给出以下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方法工作的另一个GeoDataFrame来自一个形状文件,几何列是多边形而不是点。 它的几何形状'在应用.to_crs方法后,值看起来像这样:
POLYGON((-5973.005380655156 3399.646267693398 ...当我使用hg GeoDataFrame尝试上述内容时,它们仍然看起来像常规的纬度/经度坐标。
如果/当这个问题解决了,我会将这些点与多边形GeoDataFrame连接起来,以便绘制两者(多边形顶部的点)。
当我尝试在使用.to_crs方法之前首先连接GeoDataFrames,然后我一次在点和多边形行上使用该方法时,我收到以下错误:
ValueError:无法转换天真的几何。请先在对象上设置一个crs。
提前致谢!
答案 0 :(得分:9)
截至2018年,在GeoPandas中设置CRS非常简单:
gdf.crs = {'init' :'epsg:4326'}
其中gdf
是geopandas.geodataframe.GeoDataFrame
因此在上面的示例中为:
h=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)]
hg = GeoDataFrame(h, geometry=geometry)
hg.crs = {'init' :'epsg:4326'}
# ^ comment out to get a "Cannot transform naive geometries" error below
# project to merkator
hg.to_crs({'init': 'epsg:3395'})
Lat Lon zip geometry
0 40.058841 -75.042164 19152 POINT (-8353655.484505325 4846992.030409531)
1 40.202162 -74.924594 19047 POINT (-8340567.65197276 4867777.107279473)
答案 1 :(得分:5)
答案 2 :(得分:2)