最近整理项目的时候发现了之前用过的火星坐标转WGS84坐标的python代码,记录一下。
火星坐标
GCJ-02(G-Guojia国家,C-Cehui测绘,J-Ju局),又被称为火星坐标系,是一种基于WGS-84制定的大地测量系统,由中国国测局制定。此坐标系所采用的混淆算法会在经纬度中加入随机的偏移。国家规定,中国大陆所有公开地理数据都需要至少用GCJ-02进行加密,也就是说我们从国内公司的产品中得到的数据,一定是经过了加密的。绝大部分国内互联网地图提供商都是使用GCJ-02坐标系,包括高德地图
,谷歌地图中国区
等。
数据
数据是我从高德地图API中爬取的一些POI点,代码参考根据城市名和分类名爬取对应的POI数据(基于高德地图),实测直接可用,在高德上申请一个开发key即可。
这里注意爬取的x和y都是str数据类型,如果要直接导入Arcgis中记得转换为将单元格格式转为数值,下面是我爬取的武汉市的银行POI数据
实现代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import pandas as pd
import json
import math
import os
import csv
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 *