這些經緯線是怎樣定出來的呢?地球是在不停地繞地軸旋轉(地軸是一根經過地球南北兩極和地球中心的 假想線),在地球中腰畫一個與地軸垂直的大圓圈,使圈上的每一點都和南北兩極的距離相等,這個圓圈 就叫做「赤道」。在赤道的南北兩邊,畫出許多和赤道平行的圓圈,就是「緯圈」;構成這些圓圈的線段, 叫作緯線。咱們把赤道定爲緯度零度,向南向北各爲90度,在赤道以南的叫南緯,在赤道以北的叫北緯。 北極就是北緯90度,南極就是南緯90度。緯度的高低也標誌着氣候的冷熱,如赤道和低緯度地地區無冬, 兩極和高緯度地區無夏,中緯度地區四季分明。 其次,從北極點到南極點,能夠畫出許多南北方向的與地球赤道垂直的大圓圈,這叫做「經圈」;構成這 些圓圈的線段,就叫經線。公元1884平面座標圖年,國際上規定以經過英國倫敦近郊的格林尼治天文臺的 經線做爲計算經度的起點,即經度零度零分零秒,也稱「本初子午線」。在它東面的爲東經,共180度; 在它西面的爲西經,共180度。由於地球是圓的,因此東經180度和西經180度的經線是同一條經線。各國 公定180度經線爲「國際日期變動線」。爲了不同一地區使用兩個不一樣的日期,國際日期變線在遇陸地時 略有偏離。 每一經度和緯度還能夠再細分爲60分,每一分再分爲60秒以及秒的小數。利用經緯線,咱們就能夠肯定 地球上每個地方的具體位置,而且把它在地圖或地球儀上表示出來。例如問北京的經緯度是多少?咱們 很容易從地圖上查出來是東經116度24分,北緯39度54分。在大海中航行的船隻,只要把所在地的經度測 出來,就能夠肯定船在海洋中的位置和前進方向。 緯度共有90度。赤道爲0度,向兩極排列,圈子越小, 度數越大。 橫線是緯度,豎線是經度。 固然能夠計算,四元二次方程。 經度和緯度都是一種角度。經度是個兩面角,是兩個經線平面的夾角。因全部經線都是同樣長,爲了度量 經度選取一個起點面,經1884年國際會議協商,決定以經過英國倫敦近郊、泰晤士河南岸的格林尼治皇家 天文臺(舊址)的一臺主要子午儀十字絲的那條經線爲起始經線,稱爲本初子午線。本初子午線平面是起 點面,終點面是本地經線平面。某一點的經度,就是該點所在的經線平面與本初子午線平面間的夾角。在 赤道上度量,自本初子午線平面做爲起點面,分別往東往西度量,往東量值稱爲東經度,往西量值稱爲西 經度。因而可知,一地的經度是該地對於本初子午線的方向和角距離。本初子午線是0°經度,東經度的最 大值爲180°,西經度的最大值爲180°,東、西經180°經線是同一根經線,所以不分東經或西經,而統稱 180°經線。 緯度是個線面角。起點面是赤道平面,線是本地的地面法線。所謂法線,即垂直於參考扁球體表面的線。 某地的緯度就是該地的法線與赤道平面之間的夾角。緯度在本地經線上度量,由赤道向南、北度量,向北 量值稱爲北緯度,向南量值稱爲南緯度。因而可知,一地的緯度是該地對於赤道的方向和角距離。赤道是 0°緯線,北緯度的最大值爲90°,即北極點;南緯度的最大值爲90°,即南極點。
經緯度互換javascript
度(DDD):E 108.90593度 N 34.21630度html
如何將度(DDD):: 108.90593度換算成度分秒(DMS)東經E 108度54分22.2秒?轉換方法是將108.90593整數位不變取108(度),用0.90593*60=54.3558,取整數位54(分),0.3558*60=21.348再取整數位21(秒),故轉化爲108度54分21秒.java
一樣將度分秒(DMS):東經E 108度54分22.2秒 換算成度(DDD)的方法以下:108度54分22.2秒=108+(54/60)+(22.2/3600)=108.90616度git
由於計算時小數位保留的緣由,致使正反計算存在必定偏差,但偏差影響不是很大。1秒的偏差就是幾米的樣子。GPS車友能夠用上述方法換算成本身須要的單位座標。數據庫
經緯度換算成米函數
緯度分爲60分,每一分再分爲60秒以及秒的小數。
緯度線投射在圖上看似水平的平行線,但其實是不一樣半徑的圓。有相同特定緯度的全部位置都在同一個緯線上。
赤道的緯度爲0°,將行星平分爲南半球和北半球。
緯度是指某點與地球球心的連線和地球赤道面所成的線面角,其數值在0至90度之間。位於赤道以北的點的緯度叫北緯,記爲N,位於赤道以南的點的緯度稱南緯,記爲S。
緯度數值在0至30度之間的地區稱爲低緯地區,緯度數值在30至60度之間的地區稱爲中緯地區,緯度數值在60至90度之間的地區稱爲高緯地區。
赤道、南迴歸線、北迴歸線、南極圈和北極圈是特殊的緯線。
緯度1秒的長度
地球的子午線總長度大約40008km。平均:
緯度1度 = 大約111km
緯度1分 = 大約1.85km
緯度1秒 = 大約30.9m
編碼
根據地球上任意兩點的經緯度計算兩點間的距離spa
地球是一個近乎標準的橢球體,它的赤道半徑爲6378.140公里,極半徑爲 6356.755公里,平均半徑6371.004公里。若是咱們假設地球是一個完美的球體,那麼它的半徑就是地球的平均半徑,記爲R。若是以0度經線爲基 準,那麼根據地球表面任意兩點的經緯度就能夠計算出這兩點間的地表距離(這裏忽略地球表面地形對計算帶來的偏差,僅僅是理論上的估算值)。設第一點A的經 緯度爲(LonA, LatA),第二點B的經緯度爲(LonB, LatB),按照0度經線的基準,東經取經度的正值(Longitude),西經取經度負值(-Longitude),北緯取90-緯度值(90- Latitude),南緯取90+緯度值(90+Latitude),則通過上述處理事後的兩點被計爲(MLonA, MLatA)和(MLonB, MLatB)。那麼根據三角推導,能夠獲得計算兩點距離的以下公式:code
C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)htm
Distance = R*Arccos(C)*Pi/180
這裏,R和Distance單位是相同,若是是採用6371.004公里做爲半徑,那麼Distance就是公里爲單位,若是要使用其餘單位,好比mile,還須要作單位換算,1公里=0.621371192mile
若是僅對經度做正負的處理,而不對緯度做90-Latitude(假設都是北半球,南半球只有澳洲具備應用意義)的處理,那麼公式將是:
C = sin(LatA)*sin(LatB) + cos(LatA)*cos(LatB)*cos(MLonA-MLonB)
Distance = R*Arccos(C)*Pi/180
以上經過簡單的三角變換就能夠推出。
若是三角函數的輸入和輸出都採用弧度值,那麼公式還能夠寫做:
C = sin(LatA*Pi/180)*sin(LatB*Pi/180) + cos(LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)*Pi/180)
Distance = R*Arccos(C)*Pi/180
也就是:
C = sin(LatA/57.2958)*sin(LatB/57.2958) + cos(LatA/57.2958)*cos(LatB/57.2958)*cos((MLonA-MLonB)/57.2958)
Distance = R*Arccos(C) = 6371.004*Arccos(C) kilometer = 0.621371192*6371.004*Arccos(C) mile = 3958.758349716768*Arccos(C) mile
在實際應用當中,通常是經過一個個體的郵政編碼來查找該郵政編碼對應的地區中心的經緯度,然 後再根據這些經緯度來計算彼此的距離,從而估算出某些羣體之間的大體距離範圍(好比酒店旅客的分佈範圍-各個旅客的郵政編碼對應的經緯度和酒店的經緯度所 計算的距離範圍-等等),因此,經過郵政編碼查詢經緯度這樣一個數據庫是一個頗有用的資源。
附:C#代碼:
private const double EARTH_RADIUS = 6378.137;//地球半徑
private static double rad(double d)
{
return d * Math.PI / 180.0;
}
public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) +
Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)));
s = s * EARTH_RADIUS;
s = Math.Round(s * 10000) / 10000;
return s;
}
//百度地圖API部分代碼
function getDistance(p1,p2){
var p1 = new BMap.Point(104.06792346,30.67994285);
var p2 = new BMap.Point(104.150032,30.69504);
return map.getDistance(p1,p2);
}
//javascript版本
var EARTH_RADIUS = 6378.137;//地球半徑
function rad(d)
{
return d * Math.PI / 180.0;
}
function GetDistance(lat1,lng1,lat2,lng2)
{
var radLat1 = rad(lat1);
var radLat2 = rad(lat2);
var a = radLat1 - radLat2;
var b = rad(lng1) - rad(lng2);
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +
Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
s = s * EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s;
}