高德爬取的坐標疊加到84上是什么樣
坐標是偏移的,要轉一下哈,這里給一個流行的python

# -*- coding: utf-8 -*- import json import math import arcpy import os x_pi = 3.14159265358979324 * 3000.0 / 180.0 pi = 3.1415926535897932384626 # π a = 6378245.0 # 長半軸 ee = 0.00669342162296594323 # 扁率 def gcj02towgs84(lng, lat): """ GCJ02(火星坐標系)轉GPS84 :param lng:火星坐標系的經度 :param lat:火星坐標系緯度 :return: """ if out_of_china(lng, lat): return lng, lat dlat = transformlat(lng - 105.0, lat - 35.0) dlng = transformlng(lng - 105.0, lat - 35.0) radlat = lat / 180.0 * pi magic = math.sin(radlat) magic = 1 - ee * magic * magic sqrtmagic = math.sqrt(magic) dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi) dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * pi) mglat = lat + dlat mglng = lng + dlng return [lng * 2 - mglng, lat * 2 - mglat] def transformlat(lng, lat): ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + \ 0.1 * lng * lat + 0.2 * math.sqrt(math.fabs(lng)) ret += (20.0 * math.sin(6.0 * lng * pi) + 20.0 * math.sin(2.0 * lng * pi)) * 2.0 / 3.0 ret += (20.0 * math.sin(lat * pi) + 40.0 * math.sin(lat / 3.0 * pi)) * 2.0 / 3.0 ret += (160.0 * math.sin(lat / 12.0 * pi) + 320 * math.sin(lat * pi / 30.0)) * 2.0 / 3.0 return ret def transformlng(lng, lat): ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + \ 0.1 * lng * lat + 0.1 * math.sqrt(math.fabs(lng)) ret += (20.0 * math.sin(6.0 * lng * pi) + 20.0 * math.sin(2.0 * lng * pi)) * 2.0 / 3.0 ret += (20.0 * math.sin(lng * pi) + 40.0 * math.sin(lng / 3.0 * pi)) * 2.0 / 3.0 ret += (150.0 * math.sin(lng / 12.0 * pi) + 300.0 * math.sin(lng / 30.0 * pi)) * 2.0 / 3.0 return ret def out_of_china(lng, lat): """ 判斷是否在國內,不在國內不做偏移 :param lng: :param lat: :return: """ if lng < 72.004 or lng > 137.8347: return True if lat < 0.8293 or lat > 55.8271: return True return False if __name__ == '__main__': # [lng,lat]=[120.769927,32.042828] # [dstlng, dstlat] = gcj02towgs84(lng, lat) # print(dstlng, dstlat) #創建featureclass poi3 #添加字段 path=r'E:\nanxxx_gcj02.gdb\poi3' spatialref=arcpy.SpatialReference(4326) fc=arcpy.CreateFeatureclass_management(os.path.dirname(path), os.path.basename(path), "POINT", "", "", "",spatialref) arcpy.AddField_management(fc, "name", "TEXT","","",250,"","NULLABLE") arcpy.AddField_management(fc, "type1", "TEXT","","",50,"","NULLABLE") arcpy.AddField_management(fc, "type2", "TEXT","","",50,"","NULLABLE") arcpy.AddField_management(fc, "type3", "TEXT","","",50,"","NULLABLE") arcpy.AddField_management(fc, "address", "TEXT","","",150,"","NULLABLE") cur2=arcpy.da.InsertCursor(fc, ["SHAPE@","name","type1","type2","type3","address"]) gcj02=r'E:\nantonxxxgcj02.gdb\poi2' with arcpy.da.SearchCursor(gcj02,["SHAPE@XY","name","type1","type2","type3","address"]) as cursor: for row in cursor: x,y=row[0] [lng, lat] = gcj02towgs84(x, y) point = arcpy.Point(lng, lat) cur2.insertRow([point,row[1],row[2],row[3],row[4],row[5]]) del cur2 print 'over'
國內的常用坐標系
1、WGS-84坐標系:地心坐標系,GPS原始坐標體系
在中國,任何一個地圖產品都不允許使用GPS坐標,據說是為了保密。
2、GCJ-02 坐標系:國測局坐標,火星坐標系
1)國測局02年發布的坐標體系,它是一種對經緯度數據的加密算法,即加入隨機的偏差。
2)互聯網地圖在國內必須至少使用GCJ-02進行首次加密,不允許直接使用WGS-84坐標下的地理數據,同時任何坐標系均不可轉換為WGS-84坐標。
3)是國內最廣泛使用的坐標體系,高德、騰訊、Google中國地圖都使用它。
3、CGCS2000坐標系:國家大地坐標系
該坐標系是通過中國GPS 連續運行基准站、 空間大地控制網以及天文大地網與空間地網聯合平差建立的地心大地坐標系統。
4、BD-09坐標系
百度中國地圖所采用的坐標系,由GCJ-02進行進一步的偏移算法得到。
5、搜狗坐標系
搜狗地圖所采用的坐標系,由GCJ-02進行進一步的偏移算法得到。
6、圖吧坐標系
圖吧地圖所采用的坐標系,由GCJ-02進行進一步的偏移算法得到。
原文:
https://blog.csdn.net/m0_37738114/article/details/80452485
高德坐標點獲取
https://lbs.amap.com/console/show/picker
https://wenku.baidu.com/view/572e2a70b14e852459fb57a5.html
知乎回答:
https://www.zhihu.com/question/35775670?sort=created
很開心發現了這樣一個問題,於是我抱着重拾大地測量學這一非常冷門學科的態度開啟了一波拜大神文獻操作,嘗試用比較通俗的方式去解釋一個非常干貨的問題。我把時間軸推向2008年,在2008年前后和2015-2018年兩個節點檢索大地測量學大家們的若干文獻,以期通過CGCS2000坐標系啟用之初的設想以及當前發展兩個角度闡釋建立和維持CGCS2000坐標系的意義。為了響應題目,本文將采用邏輯上的倒敘,即先說兩種坐標系的異同,再說2000系的意義,最后分享一下我國坐標系的發展經歷。個人學識所限,不嚴謹之處歡迎指正。
1、CGCS2000坐標系與WGS84坐標系的差異
CGCS2000坐標系正式名稱為2000國家大地坐標系,是以國際地球框架ITRF1997為參考,采用2000歷元建立的區域性地心坐標系統,於2008年正式啟用。WGS84為全球衛星定位系統(GPS)建立的一個全球地心坐標系統,WGS84是一個動態維持的坐標系統,幾經修正后當前的WGS84(G1674)與ITRF2008在歷元2005.0處一致。
我找到了2008年-2009年的兩篇論文,分別是魏子卿院士的《2000中國大地坐標系及其與WGS84的比較》和程鵬飛院長等著的《2000 國家大地坐標系橢球參數與GRS80和WGS84的比較》,然后參考論文內容嘗試分析一下CGCS2000和WGS84存在多大區別。
大地坐標系有4個主要幾何參數,兩者有3個相同,分別是長半軸 ,地心引力常數
,自轉角速度
。只有扁率f不同,CGCS2000是f=1/298.257222101,WGS84是1/298.257223563。由此看出兩者之間參數定義的區別是很小的,而這一點區別到底有多影響呢,程院長的論文給出的一個數字是:“給定點位在某一框架和某一歷元下的空間直角坐標,投影到CGCS2000橢球和WGS84橢球上所得的緯度的最大差異相當於0.11mm。”
需要注意的是,論文中比較的WGS84應該是2002年啟用的WGS84(G1150),對應ITRF2000的2001.0歷元。那么不同版本的WGS84之間差多少呢,這里有個參考,魏子卿院士論文中分析WGS84與ITRF2000的符合度為每分量1cm,進而分析出CGCS2000與WGS84是相容的,在坐標系實現精度范圍內二者坐標是一致的。
這里有一些難整明白,補充一點個人說明。首先,WGS84和CGCS2000的初始參數都來源於GRS80橢球,而后分別於ITRF坐標框架進行了對應,因此二者在基本定義上是非常接近的;其次,ITRF不同框架間有極微小的差異,這個差異是可以采用7參數法進行轉換的。所謂7參數是指兩個大地坐標系可以通過x軸平移,y軸平移,z軸平移,x軸旋轉,y軸旋轉,z軸旋轉,尺度比例7個參數進行轉換,之前分析的每分量1cm可以近似理解為以地心為原點,橢球長半軸誤差不到1cm,對比一下6378137m的長半軸長度,這個誤差影響是非常微小的。
2、CGCS2000坐標系的意義
剛才分析了一通CGCS2000和WGS84的誤差小到可以忽略,那為什么還要建立CGCS2000坐標系呢?直接用人家的不就完了!這其中還是有一些問題的。我參考了陳俊勇院士2003年發表的《關於中國采用地心3維坐標系統的探討》,這篇論文是CGCS2000建設前期的一篇重要論文,文中對建立CGCS2000的必要性和可行性作了探討,結合我個人體會聊一聊這個意義。
第一,當時我國迫切需要地心3維框架。大地坐標系表面上只是一堆坐標數字,但其背后深層次的意義在於為我國各項科學生產活動提供一個位置基准。在此之前,我國采用西安80坐標系,是非地心系,一般只能用作二維平面坐標使用,高程由85高程基准提供。在陸地使用尚可,對海域幾乎是空白(海上不能作水准測量);彼時,國內作為基准控制的5萬多個天文大地控制點也存在很多損毀,坐標基准難以維持;此外由於衛星定位、實時定位的需求,西安80坐標系都顯得不夠用了。所以,我們建立一個自己的地心坐標框架是很必要的。
第二,坐標框架必須從底層開始建立。把西安80直接換成WGS84坐標行不行呢?當然是可以,但不科學。WGS84是通過GPS衛星及地面站觀測維持的,這些觀測數據都掌握在美國及一些國際組織手中。如果我們采用聯測的方法建立WGS84國家控制網來做全國基准,會造成坐標框架基礎數據的缺失。這樣的缺失可能對於一般用途而言無所謂,但對於高精度、實時觀測以及未來很多年之后的坐標框架發展就有影響了。因而我們采用原生的參數,覆蓋全國的控制點以及持續動態的觀測模式維系了一個能夠完全為我們掌握的坐標框架,這是符合科學發展規律的。
第三,現代地心三維坐標系統必須要持續維持更新。大家都知道地球的表面是很復雜,地殼內部有着復雜的變動。一套坐標系統建立后,作為維系其基准的地面控制點不斷的發生着微小變化,日積月累就足以影響實現精度。作為我國自行建立的坐標系及坐標框架,我們有能力持續維護這一系統,不斷提高其精度。
第四,我們需要符合我國國情的坐標系統。WGS84是全球的,具體來說是為美國服務順便服務全球。相對應的CGCS2000就是要專心為我國服務。在建立CGCS2000的過程中,我們維持了我國國土陸域、海域內的高精度,觀測了全國范圍的重力異常值,建立了高精度的全國似大地水准面(3維坐標系中獲取的高程是大地高,需要通過似大地水准面精化后的高程異常來獲得正常高,我國法定高程系統為正常高系統),相當於是對全國的一次全方位測繪,這一切都具有非常重要的意義。
第五,CGCS2000坐標系代表了大國自信。隨着北斗定位系統從中國走向全球,CGCS2000坐標系也在探索建立全球框架。未來為什么大家都要用GPS呢?也可以都用北斗啊,用北斗當然就要用2000坐標系啊,我們來為你們維護高精度坐標基准,為你們提供實時定位服務,為你們進行坐標轉換,這是大國科技發展的一種必然。
3、CGCS2000坐標系的發展
這一節我參考了2015年寧津生院士等著的《2000 國家大地坐標系框架體系建設及其進展》以及2018年蔣志浩、劉經南院士等著的《全球 CGCS2000 坐標框架的構建理論研究》兩篇論文,聊聊CGCS2000坐標系的發展。
(1)CGCS2000框架精化。CGCS2000於2008年啟用,但參考歷元是2000.0. 當前歷元距離參考歷元的時間差越長,框架點位的坐標變化也越大。在十年間,國家開展多次框架加密和精化工作,不久的將來可以把歷元向前發展,提高整體框架的密度和精度。
(2)CGCS2000的動態維持。在2000坐標系啟用后的十年間,我國先后開展了板塊模型、速度場模型和非線性速度場模型研究,這些模型研究的精度都非常高,多達毫米級,可以為坐標框架點的運動提供參考,維持坐標系統的高精度實現。
(3)CGCS2000框架更新。在建立了板塊模型、速度場模型等基礎上,就可以開展對CGCS2000坐標框架的更新。但坐標系統是一個基礎性工程,什么時候更新也是有所要求,目前我國已經掌握誤差監測手段和更新技術,待誤差影響到用戶需求時就可以啟動更新工作。
(4)測繪成果坐標轉換。我國境內大量測繪成果還在使用80坐標系甚至54坐標系,隨着CGCS2000坐標系的建成完善,不同區域的坐標轉換模型也已建立完畢。各地正在開展測繪成果向2000系轉換的工作,先從基礎國土數據開始,進而逐漸發展到各行各業。
(5)建立全球CGCS2000坐標框架。目前CGCS2000只是滿足我國區域性坐標參考框架應用服務,隨着北斗衛星全球化應用的逐步開展,必須要有中國獨立自主的全球坐標參考框架做為基礎。國內已經開始有了相關的理論和實現技術研究,相信CGCS2000必然可以伴隨北斗走向全球。
4、我國坐標系統沿革
作為結尾,我想常識性的回顧一下我國使用過的坐標系統。平面坐標系主要有1954北京坐標系,西安1980坐標系;高程系統有1956黃海高程系和1985國家高程基准。
1954北京坐標系是基於蘇聯克拉索夫斯基橢球建立的參心坐標系。這一坐標系解決了建國之初缺少統一國家大地基准的問題,很多地區的第一代測繪成果都采用此坐標系統測制。但是1954北京坐標系的觀測不嚴密,坐標原點甚至在蘇聯境內,很快暴露出精度問題。現在除少數行業和地區成果外,1954坐標基本停用。
1956黃海高程系是我國第一個高程系統。我國一直采用正常高系統作為高程基准(常說的海拔就是絕對高程,高程的一種),以1954為代表的參心坐標系一般在陸地采用其平面坐標的實現,高程則利用高程基准通過水准測量來實現。1956黃海高程系是根據青島驗潮站1950年到1956年的黃海驗潮資料確定的平均海平面作為高程基准,水准原點高程為72.289米。
西安1980坐標系是我國第一個自主建立的大地坐標系統,其坐標原點的陝西省涇陽縣永樂鎮。西安1980坐標系采用1975國際橢球參數,也是一個參心坐標系。該橢球精度比克拉索夫斯基橢球精度高很多,更加符合我國國情。目前,大量的測繪成果還在使用西安1980坐標系。
1985國家高程基准是1956黃海高程系的發展,以青島驗潮站1952年~1979年的潮汐觀測資料為計算依據,水准原點設在青島觀象山,原點高程為72.260米。目前,國內絕大多數成果都使用1985國家高程基准。由於,我國法定正常高系統,在80坐標系轉換成2000坐標系后,地面高程依然采用1985國家高程基准。
PS:對高程系統感興趣的小盆友可以鑽這個傳送門:怎樣測量海拔高度? - 測繪小河馬的回答
可以說我國大地坐標系統的發展呈現了從二維到三維,從靜態到動態,從參心到地心,從外國援助到自主測繪的發展歷程。大地測量學好像與大家都很遙遠,其實它一直在默默為全國服務。
參考文獻:
1.蔣志浩,劉經南,等.全球CGCS2000坐標框架的構建理論研究[J].武漢大學學報·信息科學版,2018.43(2):167-174.
2.魏子卿.2000中國大地坐標系及其與WGS84的比較[J].大地測量與地球動力學,2008.28(5):1-5.
3.程鵬飛,文漢江,等.2000國家大地坐標系橢球參數與GRS80和WGS84的比較[J].測繪學報.2009,38(3):189-194.
4.陳俊勇.關於中國采用地心3維坐標系統的探討[J].測繪學報.2003.32(4):283-288.
5.寧津生,王華,等.2000國家大地坐標系框架體系建設及其進展[J]. 武漢大學學報·信息科學版,2015.40(5):569-573.