Python 地图坐标的转换

该项目涉及使用Python进行地图坐标系统的转换,参考了网上多个资源,包括优快云博客和百度地图论坛的帖子,并最终在百度地图API上验证了转换的准确性。

最近做项目正好需要坐标的转换,

找了很多资料,参考:

1、http://blog.youkuaiyun.com/ma969070578/article/details/41013547

2、http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=10923


 * 各地图API坐标系统比较与转换;
 * WGS84坐标系:即地球坐标系,国际上通用的坐标系。设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系,
 * 谷歌地图采用的是WGS84地理坐标系(中国范围除外);
 * GCJ02坐标系:即火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。
 * 谷歌中国地图和搜搜中国地图采用的是GCJ02地理坐标系; BD09坐标系:即百度坐标系,GCJ02坐标系经加密后的坐标系;
 * 搜狗坐标系、图吧坐标系等,估计也是在GCJ02基础上加密而成的.

然后在csv中将其转化。

最后再在百度地图API上进行检验成功

#http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=10923
#代码原地址
import csv
import string
import time
import math

#系数常量
a = 6378245.0
ee = 0.00669342162296594323
x_pi = 3.14159265358979324 * 3000.0 / 180.0;

#转换经度
def transformLat(lat,lon):
    ret = -100.0 + 2.0 * lat + 3.0 * lon + 0.2 * lon * lon + 0.1 * lat * lon +0.2 * math.sqrt(abs(lat))
### 实现地图坐标转换的方法 在 Python 中,可以使用 `pyproj` 和 `GeoPandas` 来完成地图坐标的投影变换。以下是详细的说明: #### 使用 PyProj 进行坐标转换 `pyproj` 是一个强大的工具,提供了对 PROJ 库的接口支持,能够轻松实现不同地理坐标系统的相互转换。 ```python import pyproj # 定义源坐标系和目标坐标系 source_proj = pyproj.CRS('EPSG:4326') # WGS84 坐标系 target_proj = pyproj.CRS('EPSG:3857') # Web Mercator 坐标系 # 创建 Transformer 对象 transformer = pyproj.Transformer.from_crs(source_proj, target_proj) # 转换单个点的坐标 lon, lat = 106.561203, 29.558078 converted_x, converted_y = transformer.transform(lon, lat) print(f"Transformed Coordinates: X={converted_x}, Y={converted_y}") ``` 上述代码展示了如何通过定义两个不同的 CRS(Coordinate Reference System),并利用 `Transformer` 类来执行具体的坐标转换操作[^1]。 --- #### 结合 GeoPandas 处理矢量数据集中的坐标转换 当需要批量处理复杂的几何对象时,`GeoPandas` 提供了一个更高层次的抽象方法来进行坐标系之间的切换。 ```python import geopandas as gpd from shapely.geometry import Point # 构造简单的 GeoDataFrame 并指定其原始 CRS point_data = {'geometry': [Point(106.561203, 29.558078)]} gdf = gpd.GeoDataFrame(point_data, crs="EPSG:4326") # 将整个 DataFrame 的 CRS 更改为 EPSG:3857 reprojected_gdf = gdf.to_crs(epsg=3857) print(reprojected_gdf.head()) ``` 这段脚本先创建了一组包含单一点要素的数据框,随后调用了 `.to_crs()` 方法完成了整体的空间重投影过程[^2]。 --- #### 绘制带有自定义投影的地图 如果希望进一步展示结果,则可以通过集成 Matplotlib 或其他可视化框架生成直观的效果图。 ```python fig, ax = plt.subplots(figsize=(10, 6)) # 加载底图数据作为背景层 china_map = gpd.read_file("path_to_china_shapefile.shp").set_crs("EPSG:4326") china_projected = china_map.to_crs(epsg=2381) # 添加城市标记到图形上 city_point = gpd.GeoSeries([Point(106.561203, 29.558078)], crs='EPSG:4326') city_projected = city_point.set_crs("EPSG:4326").to_crs(epsg=2381) # 执行绘图命令 china_projected.plot(ax=ax, color='lightblue', edgecolor='black', linewidth=0.5) city_projected.plot(ax=ax, color='darkgreen', markersize=50, label="City Location", zorder=5) plt.legend() plt.title("China Map with City Projection Example") plt.show() ``` 这里不仅实现了基础的功能需求——即从经纬度至局部平面直角网格下表示位置关系;还附加了实际案例演示效果[^3][^4]。 --- ### 总结 无论是单独运用 `pyproj` 高效解决特定场景下的简单任务还是借助 `GeoPandas` 方便管理复杂结构化的空间信息集合体,在现代 GIS 开发领域都占据着重要地位。两者各有侧重又相辅相成,共同构成了完整的解决方案链条。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值