在Geopandas中更改df CRS后,向点添加坐标

时间:2019-07-14 12:11:08

标签: python pandas gis qgis geopandas

基本上,这个想法是在不使用Qgis的情况下自动化一些工作流程。

我无法获得与Geopandas中的Qgis功能“向点添加坐标”类似的结果,该功能允许您获取其当前投影中点的x,y坐标并为表格创建新属性。

所以我有一些要点。原始shapefile的CRS为epsg 2154(Lambert 93)。我需要以与Google地图兼容的格式获取经度和纬度。

Google将epsg 3857用于Google Maps。

points = pd.DataFrame({'Id': ['001', '002', '003'],'geometry': ['POINT (909149.3986619939 6881986.232659903)', 'POINT (909649.3986619939 6882486.232659903)', 'POINT (909149.3986619939 6882486.232659903)']})

想法是切换到epsg 3857(wgs84),然后从那里创建经/纬度列,这些列将填充wgs84坐标,例如47.357955,1.7317783。

所以我所做的就是明显地更改了CRS: pointswgs84 = points.to_crs(espg=3857)

然后

pointswgs84['lon'] = pointswgs84.geometry.x

pointswgs84['lat'] = pointswgs84.geometry.y

但是我的经/纬度列然后填充了与原始点数据框相对应的坐标:

points = pd.DataFrame({'Id': ['001', '002', '003'],'geometry':['POINT (909149.3986619939 6881986.232659903)', 'POINT (909649.3986619939 6882486.232659903)', 'POINT (909149.3986619939 6882486.232659903)'],'long': ['6881986.232659903', '6882486.232659903', '6882486.232659903'], 'lat': ['909149.3986619939', '909649.3986619939', '909149.3986619939']})

好像我在这里遗漏了一些东西,但是由于我对Python和Geopandas相当陌生,所以我不确定...

谢谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以尝试:

import geopandas as gpd
from shapely.geometry import Point

points = pd.DataFrame({'Id': ['001', '002', '003'],
                       'geometry': [Point(909149.3986619939, 6881986.232659903), Point(909649.3986619939, 6882486.232659903), Point(909149.3986619939, 6882486.232659903)]})

gdf = gpd.GeoDataFrame(points, crs={'init': 'epsg:2154'}, geometry=points.geometry) # https://epsg.io/2154
gdf.geometry = gdf.geometry.to_crs({'init': 'epsg:3857'}) # https://epsg.io/3857

print(gdf)

结果:

    Id                                     geometry
0  001   POINT (652238.9846394559 6275490.88115861)
1  002  POINT (653026.8173626668 6276225.689838496)
2  003  POINT (652266.5262486706 6276253.346635176)

答案 1 :(得分:0)

好的,问题就解决了。这是一个简单的espg问题。如果可以帮助像我这样的其他新手,则可以使用以下解决方案:

即使Google使用espg 3857,如果您需要将点的X,Y转换为可利用的东西(例如url参数),也需要使用espg 4326。

然后您将以正确的方式获得长寿。像5.859162,49.003710.

所以:

步骤1:将原始shapefile转换为espg 4326

pointswgs84 = points.to_crs({'init': 'epsg:4326'})

第2步:只需提取x和y并将它们添加到新列中

pointswgs84['lon'] = pointswgs84.geometry.x

pointswgs84['lat'] = pointswgs84.geometry.y