基本上,这个想法是在不使用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相当陌生,所以我不确定...
谢谢您的帮助。
答案 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