给定以下GeoDataFrame:
h=pd.DataFrame({'zip':[19152,19047],
'Lat':[40.058841,40.202162],
'Lon':[-75.042164,-74.924594]})
crs='none'
geometry = [Point(xy) for xy in zip(h.Lon, h.Lat)]
hg = GeoDataFrame(h, crs=crs, geometry=geometry)
hg
Lat Lon zip geometry
0 40.058841 -75.042164 19152 POINT (-75.042164 40.058841)
1 40.202162 -74.924594 19047 POINT (-74.924594 40.202162)
我需要像使用另一个GeoDataFrame一样设置CRS(如下所示):
c=c.to_crs("+init=epsg:3857 +ellps=GRS80 +datum=GGRS87 +units=mi +no_defs")
我已经试过了:
crs={'init': 'epsg:3857'}
和这个:
hg=hg.to_crs("+init=epsg:3857 +ellps=GRS80 +datum=GGRS87 +units=mi +no_defs")
...但是没有运气。
一些重要说明:
应用.to_crs方法后,其“几何”值如下所示:
POLYGON((-5973.005380655156 3399.646267693398 ...当我尝试使用hg GeoDataFrame进行上述操作时,它们仍然看起来像常规的经/纬度坐标。
ValueError:无法转换原始几何。请先在对象上设置crs。
提前致谢!
最佳答案
Geopandas API得到了清理,现在可以正常使用了。确保使用最新的稳定版本并阅读docs。
使用EPSG代码在GeoDataFrame上设置CRS非常简单
gdf.set_crs(epsg=4326, inplace=True)
其中gdf
是geopandas.geodataframe.GeoDataFrame
。当心明确的inplace
!因此,在上面的示例中将是:
import pandas as pd
from shapely.geometry import Point
from geopandas import GeoDataFrame
df = pd.DataFrame({'zip':[19152,19047],
'Lat':[40.058841,40.202162],
'Lon':[-75.042164,-74.924594]})
geometry = [Point(xy) for xy in zip(h.Lon, h.Lat)]
gdf = GeoDataFrame(df, geometry=geometry)
gdf.set_crs(epsg=4326, inplace=True)
# ^ comment out to get a "Cannot transform naive geometries" error below
# project to merkator
gdf.to_crs(epsg=3395)
zip Lat Lon geometry
0 19152 40.058841 -75.042164 POINT (-8353655.485 4846992.030)
1 19047 40.202162 -74.924594 POINT (-8340567.652 4867777.107)