wkid=4326,4490,cgcs2000,坐标系总结(⾼德爬取的坐标叠加到
84上是什么样)
⾼德爬取的坐标叠加到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 * s(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'
View Code
国内的常⽤坐标系
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进⾏进⼀步的偏移算法得到。
原⽂:
⾼德坐标点获取
知乎回答:
测绘⼈/地信⼈
很开⼼发现了这样⼀个问题,于是我抱着重拾⼤地测量学这⼀⾮常冷门学科的态度开启了⼀波拜⼤神⽂献操作,尝试⽤⽐较通俗的⽅式去解释⼀个⾮常⼲货的问题。我把时间轴推向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坐标基本停⽤。
sqrt是什么的缩写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-19
4.
4.陈俊勇.关于中国采⽤地⼼3维坐标系统的探讨[J].测绘学报.2003.32(4):283-288.
5.宁津⽣,王华,等.2000国家⼤地坐标系框架体系建设及其进展[J]. 武汉⼤学学报·信息科学版,2015.40(5):569-573.