摘要:實(shí)際中我們可能會(huì)用到不同的地圖,那么就對(duì)應(yīng)到不同坐標(biāo)系的轉(zhuǎn)換,比如說(shuō),你有一份的數(shù)據(jù)服務(wù),你要展現(xiàn)在百度或者高德地圖上,這時(shí)候你就需要轉(zhuǎn)換了。
地圖坐標(biāo)轉(zhuǎn)換
LBS,基于位置的服務(wù)(Location Based Service),近年來(lái)已經(jīng)無(wú)處不在,尤其是我們前端,相信或多或少都有接觸一些地圖API服務(wù),比如高德、百度啊、谷歌啊~
但是用的時(shí)候可能看到下面這些字眼:比如BD09、火星坐標(biāo)、WGS84……不由得還是蒙圈了啊?
那么接下來(lái),我們就來(lái)了解一下,關(guān)于當(dāng)前用到的一些互聯(lián)網(wǎng)地圖的基礎(chǔ)坐標(biāo)轉(zhuǎn)換知識(shí)~
0、首先給大家出一個(gè)題地圖上的經(jīng)緯度轉(zhuǎn)換到平面坐標(biāo)時(shí),和平面坐標(biāo)的XY的對(duì)應(yīng)關(guān)系是什么,就是經(jīng)度(longitude)和維度(latitude)分別給對(duì)應(yīng)X,Y中的誰(shuí)?
這是在實(shí)際中經(jīng)常會(huì)用到的一個(gè)知識(shí)點(diǎn),我之前沒(méi)有想太多,反正就把數(shù)值往里嘗試,因?yàn)槲恢貌町惡艽?,正確還是錯(cuò)誤一眼就看出來(lái)了的,但是這樣其實(shí)很不好,被師兄說(shuō)了,我一個(gè)GISer的連這個(gè)都弄不明白不應(yīng)該,哈哈哈。不求甚解是可以的,但是專(zhuān)業(yè)性還是要強(qiáng)化的。
來(lái)看看上面的圖:
經(jīng)緯度大家都知道,地球上橫線是緯度,縱線是經(jīng)度。
這也導(dǎo)致了我們下意識(shí)就會(huì)覺(jué)得,橫線是X,縱線是Y。這樣的認(rèn)知顯然是錯(cuò)誤的。
但其實(shí),橫線是刻畫(huà)了Y軸上的刻度,縱線是刻畫(huà)了X軸上的刻度,這里要用到投影的角度來(lái)看問(wèn)題。
所以大家要記住經(jīng)緯XY
經(jīng)度 (longitude) —— 對(duì)應(yīng) X
維度 ( latitude ) —— 對(duì)應(yīng) Y
國(guó)際標(biāo)準(zhǔn),從專(zhuān)業(yè)GPS 設(shè)備中取出的數(shù)據(jù)的坐標(biāo)系
國(guó)際地圖提供商使用的坐標(biāo)系
中國(guó)標(biāo)準(zhǔn),從國(guó)行移動(dòng)設(shè)備中定位獲取的坐標(biāo)數(shù)據(jù)使用這個(gè)坐標(biāo)系
國(guó)家規(guī)定: 國(guó)內(nèi)出版的各種地圖系統(tǒng)(包括電子形式),必須至少采用GCJ-02對(duì)地理位置進(jìn)行首次加密。
百度標(biāo)準(zhǔn),百度 SDK,百度地圖,Geocoding 使用
(百度在火星坐標(biāo)上的二次加密)
火星坐標(biāo)系:
iOS 地圖(其實(shí)是高德) Gogole地圖 搜搜、阿里云、高德地圖
百度坐標(biāo)系:
當(dāng)然只有百度地圖
WGS84坐標(biāo)系:
國(guó)際標(biāo)準(zhǔn),谷歌國(guó)外地圖、osm地圖等國(guó)外的地圖一般都是這個(gè)三、從設(shè)備獲取經(jīng)緯度(GPS)坐標(biāo)
如果使用的是百度sdk那么可以獲得百度坐標(biāo)(bd09)或者火星坐標(biāo)(GCJ02),默認(rèn)是bd09 如果使用的是ios的原生定位庫(kù),那么獲得的坐標(biāo)是WGS84 如果使用的是高德sdk,那么獲取的坐標(biāo)是GCJ02四、坐標(biāo)轉(zhuǎn)換方法--JS版本
我在之前的一篇文章里,基于Ionic框架的使用講到了地圖定位:ionic2入門(mén)教程(六)地圖服務(wù)(谷歌、高德、百度定位),現(xiàn)在重新寫(xiě)一個(gè)小demo來(lái)實(shí)現(xiàn)我們的坐標(biāo)轉(zhuǎn)換。
關(guān)于方法,我找到了應(yīng)該是最通用的一種,源碼地址——作者wandergis,大部分的轉(zhuǎn)換方式應(yīng)該都是基于他的這個(gè)版本,相關(guān)說(shuō)明也是最清楚的。
實(shí)際中我們可能會(huì)用到不同的地圖,那么就對(duì)應(yīng)到不同坐標(biāo)系的轉(zhuǎn)換,比如說(shuō),你有一份wgs84的數(shù)據(jù)服務(wù),你要展現(xiàn)在百度或者高德地圖上,這時(shí)候你就需要轉(zhuǎn)換了。
我這里的例子是,我用到百度搜索地名,得到經(jīng)緯度,但是我要將它繪制在以84為坐標(biāo)系的地圖leaflet之上,這時(shí)候我就需要將返回的經(jīng)緯度進(jìn)行轉(zhuǎn)換。
我們先用百度搜索廣州塔,定位中心
基于我們選擇的OpenStreetMap,未轉(zhuǎn)換之前,我們用百度搜索廣州塔返回的值畫(huà)點(diǎn),可以看出很明顯是偏移了的:
百度地名搜索
myGeo.getPoint(searchVal, function (point) { if (point) { console.log(point); // bd09->gcj02 var myPoint = coordtransform.bd09togcj02(point.lng, point.lat); console.log(myPoint); // gcj02->wgs84 var myPoint2 = coordtransform.gcj02towgs84(myPoint[0], myPoint[1]); console.log(myPoint2); var latlng = L.latLng([myPoint[1], myPoint[0]]); var latlng2 = L.latLng([myPoint2[1], myPoint2[0]]); // 畫(huà)點(diǎn) L.marker(point).addTo(mymap); L.marker(latlng).addTo(mymap); L.marker(latlng2).addTo(mymap); // 設(shè)置中心 mymap.setView([point.lat, point.lng], 13); } else { alert("您選擇地址沒(méi)有解析到結(jié)果!"); } }, "廣州市");源碼:https://github.com/JiaXinYi/i...
五、EPSG:3857如果你用到了leaflet/openlayers/arcgis jsAPI的話,應(yīng)該還有一個(gè)點(diǎn)需要了解
這個(gè)算是題外話,因?yàn)橐话愣际菍W(xué)gis的才會(huì)用到這些,一般情況下百度高德這些大概都能夠滿足需求了。
像用到這些地圖的情況,經(jīng)常會(huì)涉及到EPSG:3857 或者OpenLayers:900913,acrgis: 102100(3857)。EPSG:3857 其實(shí)是EPSG協(xié)會(huì)(European Petroleum Survey Group)為 Web Wercator 最終設(shè)立的WKID,也就是現(xiàn)在我們常用的Web 地圖的坐標(biāo)系,并且給定官方命名 “WGS 84 / Pseudo-Mercator“。
Web Mercator 是一個(gè)投影坐標(biāo)系統(tǒng),其基準(zhǔn)面是 WGS 1984 。
WGS 1984 是一個(gè)長(zhǎng)半軸(a)為6378137,短半軸(b)為6356752.314245179 的橢球體,扁率(f)為298.257223563,f=(a-b)/a 。
但是,Web Mercator 坐標(biāo)系使用的投影方法不是嚴(yán)格意義的墨卡托投影而是一個(gè)被 EPSG稱為偽墨卡托的投影方法,這個(gè)偽墨卡托投影方法的大名是 Popular Visualization Pseudo Mercator,PVPM。
Google 最先發(fā)明了這套系統(tǒng),在投影過(guò)程中,將表示地球的參考橢球體近似的作為正球體處理(正球體半徑 R = 橢球體半長(zhǎng)軸 a)。
后來(lái),Web Mercator 在 Web 地圖領(lǐng)域被廣泛使用,這個(gè)坐標(biāo)系就名聲大噪。盡管這個(gè)坐標(biāo)系由于精度問(wèn)題一度不被GIS專(zhuān)業(yè)人士接受,但最終 EPSG 還是給了 WKID:3857。
所以其實(shí)看到EPSG:3857,就知道,當(dāng)前的坐標(biāo)系是wgs84,而這個(gè)屬性,通常在地圖的默認(rèn)設(shè)置中。就是說(shuō),如果你不改,這些地圖就應(yīng)該是wgs84坐標(biāo)系。
六、坐標(biāo)轉(zhuǎn)換方法--TS版本(待完成)請(qǐng)輸入代碼如果對(duì)你有幫助的話,能否考慮打賞a cup of coffee,比心
參考:
http://wandergis.com/coordtra...
http://blog.csdn.net/kikitamo...
https://www.sogou.com/link?ur...
http://developer.baidu.com/ma...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/93201.html
摘要:不建議底圖選擇中存在兩種不同坐標(biāo)體系,如下圖坐標(biāo)存在明顯的偏差,火星坐標(biāo)在采用坐標(biāo)系的地圖上位置偏上彩色中國(guó)天地圖全球衛(wèi)星地圖例如我們使用的類(lèi)進(jìn)行查找,返回的數(shù)據(jù)都是國(guó)際坐標(biāo),因此必須進(jìn)行偏差糾正。 ArcGIS for javascript開(kāi)發(fā)心得 本次實(shí)例中采用ArcGIS for javascript3.24版本,由于版本3與4在API等存在較大區(qū)別,就不一一列舉,詳細(xì)區(qū)別看官方...
摘要:業(yè)內(nèi)開(kāi)發(fā)框架層出不窮,,,等等,都在朝著更快,更強(qiáng)大的方向發(fā)展,有統(tǒng)一微信支付寶百度和頭條小程序的大趨勢(shì)。最近升級(jí)為版本,支持微信支付寶百度和頭條小程序。 原文鏈接 最近小程序的發(fā)展越來(lái)越火了,作為各個(gè)產(chǎn)品線的extra服務(wù)入口,以輕便、快速、強(qiáng)大的社交鏈吸引著大量的用戶和開(kāi)發(fā)者。業(yè)內(nèi)開(kāi)發(fā)框架層出不窮,wepy,mpvue,taro等等,都在朝著更快,更強(qiáng)大的方向發(fā)展,有統(tǒng)一 H5、微...
摘要:業(yè)內(nèi)開(kāi)發(fā)框架層出不窮,,,等等,都在朝著更快,更強(qiáng)大的方向發(fā)展,有統(tǒng)一微信支付寶百度和頭條小程序的大趨勢(shì)。最近升級(jí)為版本,支持微信支付寶百度和頭條小程序。 原文鏈接 最近小程序的發(fā)展越來(lái)越火了,作為各個(gè)產(chǎn)品線的extra服務(wù)入口,以輕便、快速、強(qiáng)大的社交鏈吸引著大量的用戶和開(kāi)發(fā)者。業(yè)內(nèi)開(kāi)發(fā)框架層出不窮,wepy,mpvue,taro等等,都在朝著更快,更強(qiáng)大的方向發(fā)展,有統(tǒng)一 H5、微...
閱讀 3262·2021-10-13 09:39
閱讀 2017·2021-09-27 13:36
閱讀 3080·2021-09-22 16:02
閱讀 2603·2021-09-10 10:51
閱讀 1585·2019-08-29 17:15
閱讀 1537·2019-08-29 16:14
閱讀 3513·2019-08-26 11:55
閱讀 2555·2019-08-26 11:50