无需七参数,使用Python批量化将WGS84坐标系转为CGCS20003/6度带坐标

本文介绍了一种使用Python和Pyproj库将CSV文件中的经纬度坐标转换为CGCS2000坐标的解决方案,通过批量处理避免了单点转换的繁琐,且结果精度较高。作者分享了代码示例和转换前后坐标的小数点误差分析。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

已知点的经纬度坐标txt csv格式均可,将文件内点坐标统一转为CGCS2000 坐标,期间借鉴了https://blog.csdn.net/weixin_40575956/article/details/107288757 里的方法,利用arcgis转了一个点,但是没办法批量处理,所以自己想办法利用Python实现这一功能,最终python处理结果与arcgis基本一样,但可以轻松搞定海量点数据。(这个方法本身可能存在不严谨性,通常情况下涉及到坐标系转换精度要求较高的话还是需要七参数或者四参数)


直接上代码

代码如下(示例):

import pandas as pd
import pyproj


# 定义坐标转换函数
def convert_to_cgcs2000(lat, lon):
    transformer = pyproj.Transformer.from_crs("epsg:4326", "epsg:4521", always_xy=True)
    cgcs2000_lon, cgcs2000_lat = transformer.transform(lon, lat)
    return cgcs2000_lat, cgcs2000_lon
    
# 读取CSV文件
input_file = '示范段.csv'  # 请替换为您的CSV文件路径
df = pd.read_csv(input_file, encoding='GBK')

# 批量转换坐标
df['CGCS2000_Latitude'], df['CGCS2000_Longitude'] = zip(*df.apply(lambda row: convert_to_cgcs2000(row['纬度'], row['经度']), axis=1))

# 选择要保留的列(点标签和新的CGCS2000坐标),并生成新的DataFrame
new_df = df[['点标签', 'CGCS2000_Latitude', 'CGCS2000_Longitude', '海拔']]

# 保存新的DataFrame到CSV文件,不包含原始经纬度信息
output_file = 'output.csv'  # 请替换为输出文件路径
new_df.to_csv(output_file, index=False, encoding='GBK', float_format='%.15f')

WKID可以参考这里
地理坐标系WKID:地理坐标系
投影坐标系WKID:投影坐标系


对比下结果

在这里插入图片描述
在这里插入图片描述
小数点后面第四位才有变化基本是毫米的偏差。

参考

https://blog.csdn.net/sinat_28797501/article/details/75635439
https://blog.csdn.net/weixin_40575956/article/details/107288757

在Vue中实现WGS84坐标系转CGCS2000坐标系的过程可以分为以下几个步骤: 1. 引入必要的库和模块: 首先,你需要引入相关的库和模块,以便在Vue应用程序中实现坐标转换。可以使用JavaScript的`proj4`库来进行坐标转换。你可以通过npm或yarn等包管理器来安装它。 ```bash npm install proj4 ``` 或者 ```bash yarn add proj4 ``` 2. 导入必要的投影参数: 在Vue组件中,你需要导入WGS84坐标系和CGCS2000坐标系的投影参数。可以使用`proj4`库提供的`defs`方法来导入这些参数。 ```javascript import proj4 from 'proj4'; // 导入WGS84投影参数 proj4.defs([ 'EPSG:4326', // WGS84坐标系(经度/纬度) ]); // 导入CGCS2000投影参数(根据实际情况导入) // ... ``` 3. 实现坐标转换方法: 在Vue组件中,你可以创建一个方法来实现WGS84坐标系到CGCS2000坐标系转换。可以使用`proj4`库提供的`transform`方法来进行坐标转换。 ```javascript methods: { convertCoordinates(wgs84Coordinates) { const cgcsc2000Coordinates = proj4(wgs84Coordinates.projCode, 'EPSG:4490'); // 替换为实际的CGCS2000投影代码 return cgcsc2000Coordinates; }, }, ``` 其中,`wgs84Coordinates`是一个包含经度、纬度等属性的对象,用于表示WGS84坐标系坐标。`projCode`表示转换所需的投影代码(在上面的示例中为'EPSG:4490')。你需要根据你的实际情况来替换投影代码。 4. 使用转换方法: 在Vue组件的适当位置,你可以调用上面创建的`convertCoordinates`方法来将WGS84坐标系转换为CGCS2000坐标系。例如,可以在数据绑定、计算属性或方法中调用该方法。 ```html <template> <div> <!-- 在模板中使用转换后的坐标 --> <p>WGS84坐标: {{ wgs84Coordinates }}</p> <p>CGCS2000坐标: {{ cgcsc2000Coordinates }}</p> </div> </template> ``` 确保在模板中使用转换后的坐标值时,将其作为数据绑定或计算属性的返回值。这样,你就可以在Vue应用程序中实现WGS84坐标系到CGCS2000坐标系转换了。 请注意,上述示例中的投影代码和参数可能需要根据实际情况进行调整。确保你使用正确的投影代码和参数来进行正确的坐标转换。此外,还需要考虑其他因素,如偏移量和缩放级别等,以确保转换结果的准确性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值