【python】高德坐标转wgs84

本文提供了一段Python代码,用于将GCJ02(火星坐标系)的经纬度转换为GPS84坐标系。代码详细展示了如何从Excel文件中读取经纬度数据,并通过数学运算实现坐标转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

采集到的数据是这样的在这里插入图片描述
代码:

import math
import xlrd
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:
    """
    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


if __name__ == '__main__':
    filepath = 'D:\\learn\\娱乐.xls'
    xls_file = xlrd.open_workbook(filepath)
    xls_sheet=xls_file.sheet_by_name("娱乐")
    for i in range(1,xls_sheet.nrows):
        alldata=xls_sheet.row_values(i) #获取整行数据
        lon=alldata[1]  #经度
        lat=alldata[2]  #纬度
        transform_lon=gcj02towgs84(lon,lat)
        print(transform_lon[0],transform_lon[1])

运行结果:
在这里插入图片描述
经纬度转换代码转载自:https://www.cnblogs.com/shadrach/p/7640717.html

### 实现高德坐标WGS84坐标换 为了实现从高德坐标(GCJ02)到世界大地测量系统1984年标准(WGS84)的换,可以利用已有的工具库来简化这一过程。具体来说,在Java环境中,可以通过调用`CoordTransform`类中的相应函数完成此操作。 #### 使用Java进行坐标换 在Java项目中引入基于`coordtransform` Python版本开发而成的同名Java库[^1]。该库支持多种常用地理信息系统(GIS)所采用的不同坐标系统的相互变,其中包括: - 百度坐标(BD09) - 国测局坐标(即火星坐标, GCJ02) - WGS84坐标系 对于当前需求——即将高德坐标WGS84坐标,则需关注于处理GCJ02至WGS84间的变换逻辑。下面给出一段简单的代码片段用于展示如何执行这种类型的换: ```java import com.wandergis.coordtransform.GCJ02ToWGS84; // 假设我们有一个来自高德地图API返回的位置信息对象location, // 它包含了经度longitude和纬度latitude属性。 double longitude = location.getLongitude(); double latitude = location.getLatitude(); // 创建一个新的实例并传入待换的经纬度参数 GCJ02ToWGS84 converter = new GCJ02ToWGS84(longitude, latitude); // 调用convert()方法得到换后的结果 double[] wgs84Coordinates = converter.convert(); System.out.println("Converted Longitude: " + wgs84Coordinates[0]); System.out.println("Converted Latitude: " + wgs84Coordinates[1]); ``` 这段程序展示了怎样通过创建`GCJ02ToWGS84`的对象来进行具体的坐标换工作,并最终打印出经过调整之后的新位置点对应的WGS84坐标值。 值得注意的是,由于原始获取的数据可能存在偏差,所以在实际应用过程中可能还需要进一步优化算法以提高精度[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值