免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

iOS 之地圖座標(biāo)體系和轉(zhuǎn)換

 molichen 2018-05-30

一、座標(biāo)體系

首先我們要明白,開發(fā)者能接觸到哪些座標(biāo)體系呢?

第一種分類:

1、 GPS,WGS-84,原始座標(biāo)體系。一般用國際標(biāo)準(zhǔn)的GPS記錄儀記錄下來的座標(biāo), 都是GPS的座標(biāo)。很可惜,在中國,任何一個地圖產(chǎn)品都不允許使用GPS座標(biāo), 據(jù)説是為了保密。GPS座標(biāo)形式如圖,度分秒形式的經(jīng)緯度。 2、 GCJ-02,國測局02年發(fā)佈的座標(biāo)體系。又稱“火星座標(biāo)”。 在中國,必須至少使用GCJ-02的座標(biāo)體系。比如谷歌,騰訊,高德都在 用這個座標(biāo)體系。GCJ-02也是國內(nèi)最廣泛使用的座標(biāo)體系。 3、 其他座標(biāo)體系。一般都是由GCJ-02進(jìn)過偏移算法得到的。 這種體系就根據(jù)每個公司的不同,座標(biāo)體系都不一樣了。比如, 百度和搜狗就使用自己的座標(biāo)體系,與其他座標(biāo)體系不兼容。

  

第二種分類:

首先明白,所有座標(biāo)體系的原點(diǎn),都是非洲。 1、 經(jīng)緯度。這個是球面座標(biāo),對於北京來説,就是(116.38817139.935961)這 樣的座標(biāo)。比如騰訊、高德、百度都是這樣的經(jīng)緯度座標(biāo)。 谷歌是經(jīng)緯度順序?qū)懛吹慕?jīng)緯度座標(biāo)。如果是度分秒座標(biāo),需要進(jìn)行轉(zhuǎn)換 ,才能得到這樣的經(jīng)緯度座標(biāo)。詳見座標(biāo)轉(zhuǎn)換。 2、 墨卡託座標(biāo)。平面座標(biāo),相當(dāng)於是直線距離,數(shù)字一般都比較大,像這樣的。 (215362.00021333335 99526.00034912192)墨卡託座標(biāo), 主要用於進(jìn)程的後臺計(jì)算。直線距離嘛,加加減減幾乎計(jì)算方便。 搜狗地圖API就是直接使用的墨卡託座標(biāo)。

  

二、座標(biāo)轉(zhuǎn)換

在各種web端平臺,或者高德、騰訊、百度上取到的座標(biāo),都不是GPS座標(biāo), 都是GCJ-02座標(biāo),或者自己的偏移座標(biāo)系。 比如,你在谷歌地圖API,高德地圖API,騰訊地圖API上取到的, 都是GCJ-02座標(biāo),他們?nèi)叶际峭ㄓ玫?,也適用於大部分地圖API產(chǎn)品, 以及他們的地圖產(chǎn)品。 例外,百度API上取到的,是BD-09座標(biāo),只適用於百度地圖相關(guān)產(chǎn)品。 例外,搜狗API上取到的,是搜狗座標(biāo),只適用於搜狗地圖相關(guān)產(chǎn)品。 例外,谷歌地球,google earth上取到的,是GPS座標(biāo), 而且是度分秒形式的經(jīng)緯度座標(biāo)。在國內(nèi)不允許使用。必須轉(zhuǎn)換為GCJ-02座標(biāo)。

  

  1. 度分秒座標(biāo)轉(zhuǎn)換為經(jīng)緯度 比如,在GPS記錄儀,或者google earth上採集到的是39°31'20.51,那麼應(yīng)該這樣換算,31分就是31/60度,20.51秒就是20.51/3600度,結(jié)果就是39 31/60 20.51/3600 度。

  2. GPS轉(zhuǎn)換為GCJ-02座標(biāo)
    谷歌,高德,騰訊的地圖API官網(wǎng)上,都不直接提供這樣的座標(biāo)轉(zhuǎn)換。如果要得到GCJ-02座標(biāo),最好在他們的地圖上直接取點(diǎn),或者通過地址解析得到。不過,在網(wǎng)上搜到了這樣的接口,該接口的type=1就是GPS轉(zhuǎn)到GCJ-02的墨卡託座標(biāo)。請大家對接口保密。詳見:http://map.sogou.com/api/documentation/javascript/api2.5/interface_tra...

  3. GCJ-02與BD-09之間互轉(zhuǎn) 國測局GCJ-02座標(biāo)體系(谷歌、高德、騰訊),與百度座標(biāo)BD-09體系的轉(zhuǎn)換,我今天想説的就是這個,後面有相關(guān)代碼!

4、經(jīng)緯緯度轉(zhuǎn)成墨卡託
網(wǎng)上也有詳細(xì)講解:http://bbs./esri/viewthread.php?tid=78245(大家發(fā)現(xiàn)沒,高德是api,騰訊和百度是mapapi,説明什麼?)

三、座標(biāo)偏移

如果您的座標(biāo)在轉(zhuǎn)換之後,還有偏移,那麼考慮以下幾個方面。
A、原始座標(biāo)系弄錯,比如以為自己是GPS座標(biāo),但其實(shí)已經(jīng)是GCJ-02座標(biāo)。
解決方案:請確保採集到的數(shù)據(jù)是哪個座標(biāo)體系,需要轉(zhuǎn)換到哪個座標(biāo)系,再進(jìn)行座標(biāo)轉(zhuǎn)換。
B、原始座標(biāo)準(zhǔn)確度不夠
解決方案:如果您是GPS座標(biāo),請確保採集GPS數(shù)據(jù)時(shí),搜到至少4顆以上的衞星。並且GPS數(shù)據(jù)準(zhǔn)不準(zhǔn),還取決於周圍建築物的高度,越高越不準(zhǔn),因?yàn)橛姓趽酢?br>如果本來就是GCJ-02座標(biāo),在不同地圖放大級別的時(shí)候,看到的地方可能不一樣。比如你在地圖級別4(國家)取到的座標(biāo),放大到地圖12級(街道)時(shí),座標(biāo)就偏了。請確保在地圖最大放大級別時(shí),拾取座標(biāo)。
C、度分秒的概念混淆
比如,在google earth上採集到的是39°31'20.51,那麼應(yīng)該這樣換算,31分就是31/60度,20.51秒就是20.51/3600度,結(jié)果就是39 31/60 20.51/3600 度。
D、經(jīng)緯度順序?qū)懛戳?br>有些公司(比如高德,百度,騰訊)是先經(jīng)度,再緯度,即Point(lng lat)。但谷歌座標(biāo)的順序恰好相反,是(lat lng)。

百度地圖座標(biāo)與蘋果自帶地圖經(jīng)緯度之間的相互轉(zhuǎn)換方法: /// 百度座標(biāo)轉(zhuǎn)高德座標(biāo) (CLLocationCoordinate2D)GCJ02FromBD09:(CLLocationCoordinate2D)coor { CLLocationDegrees x_pi = 3.14159265358979324 * 3000.0 / 180.0; CLLocationDegrees x = coor.longitude - 0.0065, y = coor.latitude - 0.006; CLLocationDegrees z = sqrt(x * x y * y) - 0.00002 * sin(y * x_pi); CLLocationDegrees theta = atan2(y, x) - 0.000003 * cos(x * x_pi); CLLocationDegrees gg_lon = z * cos(theta); CLLocationDegrees gg_lat = z * sin(theta); return CLLocationCoordinate2DMake(gg_lat, gg_lon); } // 高德座標(biāo)轉(zhuǎn)百度座標(biāo) (CLLocationCoordinate2D)BD09FromGCJ02:(CLLocationCoordinate2D)coor { CLLocationDegrees x_pi = 3.14159265358979324 * 3000.0 / 180.0; CLLocationDegrees x = coor.longitude, y = coor.latitude; CLLocationDegrees z = sqrt(x * x y * y) 0.00002 * sin(y * x_pi); CLLocationDegrees theta = atan2(y, x) 0.000003 * cos(x * x_pi); CLLocationDegrees bd_lon = z * cos(theta) 0.0065; CLLocationDegrees bd_lat = z * sin(theta) 0.006; return CLLocationCoordinate2DMake(bd_lat, bd_lon); }

  

開源項(xiàng)目

JZLocationConverter:

https://github.com/JackZhouCn/JZLocationConverter

python版本

# -*- coding: utf-8 -*- import math x_pi = 3.14159265358979324 * 3000.0 / 180.0 def bd_encrypt(gg): x = gg['gg_lon'] y = gg['gg_lat'] z = math.sqrt(x * x y * y) 0.00002 * math.sin(y * x_pi) theta = math.atan2(y, x) 0.000003 * math.cos(x * x_pi) bd_lon = z * math.cos(theta) 0.0065 bd_lat = z * math.sin(theta) 0.006 return {'bd_lon':bd_lon, 'bd_lat':bd_lat} def bd_decrypt(bd): x = bd['bd_lon'] - 0.0065 y = bd['bd_lat'] - 0.006; z = sqrt(x * x y * y) - 0.00002 * sin(y * x_pi); theta = atan2(y, x) - 0.000003 * cos(x * x_pi); gg_lon = z * cos(theta); gg_lat = z * sin(theta); return {'gg_lon':gg_lon, 'gg_lat':gg_lat}

收藏學(xué)習(xí),轉(zhuǎn)自:https://segmentfault.com/a/1190000003023989 



    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多