python - 从爱尔兰横轴墨卡托 (ITM) 投影到 WGS84 经纬度
问题描述
不幸的是,我从爱尔兰横轴墨卡托 (ITM) 到 WGS84 经纬度的投影似乎出错了,因为绘制的坐标与来自 CSO的都柏林地图不一致(见下文)。
转换后的数据来自爱尔兰估价办公室,ITM X 和 Y 坐标被输入一个函数,该函数改编自先前的 stackoverflow 讨论,该讨论使用 geopandas 的内置points_from_xy方法来转换坐标参考系统之间的坐标:
def create_geodf_from_GPS (df, latitude, longitude, crs):
locations = gpd.points_from_xy(longitude, latitude)
geo_df = gpd.GeoDataFrame(df, geometry=locations)
geo_df.crs = crs
return geo_df
VO_geo = create_geodf_from_GPS(VO, VO[" X ITM"], VO[" Y ITM"], crs = 'epsg:2157')
VO_geo = VO_geo.to_crs('epsg:4326')
有谁知道这里可能出了什么问题?
解决方案
感谢@joris,非常简单的修复
使用 x & y 作为 gpd.points_from_xy 的参数而不是先前混合的经度和纬度的更改函数:
def create_geodf_from_GPS (df, x, y, crs):
locations = gpd.points_from_xy(x, y)
geo_df = gpd.GeoDataFrame(df, geometry=locations)
geo_df.crs = crs
return geo_df
现在在 WGS84 纬度-经度中绘制数据按预期工作:
VO_geo = create_geodf_from_GPS(VO, x=VO[" X ITM"], y=VO[" Y ITM"], crs = 'epsg:2157')
VO_geo.to_crs('epsg:4326').plot()
注意:必须通过使用 geopandas 的 (gpd) 空间连接功能过滤掉非都柏林数据来清理数据以去除明显的异常值
VO_geo_clean = gpd.sjoin(VO_geo.to_crs('epsg:4326'), map_of_Dublin)
结果: VO 数据绘制在都柏林地图上
推荐阅读
- c# - 使用泛型和列表的多个构造函数
- c++ - C++20前后std::atomic的初始化
- javascript - 使用“不正确”时在 Typescript 中生成错误
- api - 如何从 VMware vCenter vSphere REST api 收集以下指标?
- python-3.x - 如果条件在张量流中的for循环执行中
- html - CSS 中如何支持自定义字体的字体粗细?
- python - 全局变量不好,但在 Python 中默认使用
- wpf - 在 XAML 中执行命令时触发动画
- asp.net-core - 创建 Service Fabric Api 服务仅允许 ASP .NET Core 2.1
- typescript - 在标记的联合中提取联合类型