<!经评论区老哥提醒,坐标反解代码不能公开,因此坐标转化参数核心部分我进行了删除>
同学从高德地图上爬下来的POI(兴趣点)经纬度,导入ArcGIS后发生了偏移的现象,与底图不适配。帮她看了看,经过分析,应当是坐标系转换有误。
通过一番调查,具体有偏差的原因是:高德地图(国内)使用的是GCJ-02坐标系,而ArcGis中并没有该类坐标系,导致display XY data会出问题。因此先要将获得的高德地图经纬度,转化为WGS84坐标做一个中介,方便导入ArcGIS,进行后续空间分析。
而其实,国内爬的地图经纬度大多都是不能直接使用的(如图),需要进行一次转换或多次转换。最简单的解决方案是翻墙使用谷歌地图。
因此,本文聚焦在将GCJ-02坐标系下的经纬度转化为WGS84下的经纬度。虽然很快找到了问题所在,但由于本人没有地理学的学科背景,折腾了一下,才解决了这个问题。以下,附上解决使用的Python源码。(需要修改的行,标注已添加下划线)
表格文件格式如下:
Python源码如下:
import mathimport xlrdx_pi = 3.14159265358979324 * 3000.0 / 180.0pi = 3.1415926535897932384626 # πa = 6378245.0 # 长半轴ee = 0.00669342162296594323 # 扁率def gcj02towgs84(lng, lat):"""GCJ02(火星坐标系)转GPS84:param lng:火星坐标系的经度:param lat:火星坐标系纬度:return:"""dlat = transformlat(lng - 105.0, lat - 35.0)dlng = transformlng(lng - 105.0, lat - 35.0)radlat = lat / 180.0 * pimagic = math.sin(radlat)magic = 1 - ee * magic * magicsqrtmagic = 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 + dlatmglng = lng + dlngreturn [lng * 2 - mglng, lat * 2 - mglat]def transformlat(lng, lat):[坐标反解代码隐藏]return retdef transformlng(lng, lat):[坐标反解代码隐藏]return retif __name__ == '__main__':filepath = 'D:BaiduNetdiskDownloadhpj500m imagepoi.xls' # 文件路径xls_file = xlrd.open_workbook(filepath)xls_sheet=xls_file.sheet_by_name("Sheet1") # Excel里的sheet名for i in range(1,xls_sheet.nrows):alldata=xls_sheet.row_values(i) #获取整行数据lon=alldata[0] #经度所在的列号lat=alldata[1] #纬度所在的列号transform_lon=gcj02towgs84(lon,lat)print(transform_lon[0],transform_lon[1])
经纬度转化为xy坐标系_高德地图经纬度导入Gis有偏移 纠正方法(附Python代码)丨GCJ-02转WGS84...