GeoPandas在点上设置CRS

Dan*_*ty2 9 python-3.x geopandas

给定以下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)
Run Code Online (Sandbox Code Playgroud)

我需要像使用另一个GeoDataFrame一样设置CRS(像这样):

c=c.to_crs("+init=epsg:3857 +ellps=GRS80 +datum=GGRS87 +units=mi +no_defs")
Run Code Online (Sandbox Code Playgroud)

我试过这个:

crs={'init': 'epsg:3857'}
Run Code Online (Sandbox Code Playgroud)

还有这个:

hg=hg.to_crs("+init=epsg:3857 +ellps=GRS80 +datum=GGRS87 +units=mi +no_defs")
Run Code Online (Sandbox Code Playgroud)

......但没有运气.

一些重要的说明:

  1. 上面.to_crs方法工作的另一个GeoDataFrame来自一个形状文件,几何列是多边形而不是点.在应用.to_crs方法后,其"几何"值看起来像这样:

    POLYGON((-5973.005380655156 3399.646267693398 ...当我用hg GeoDataFrame尝试上面的内容时,它们仍然看起来像常规的纬度/经度坐标.

  2. 如果/当这个结果出来时,我会用多边形GeoDataFrame连接这些点,以便绘制两个(多边形顶部的点).

  3. 当我在使用.to_crs方法之前首先尝试连接GeoDataFrames,然后我一次在点和多边形行上使用该方法时,我收到以下错误:

    ValueError:无法转换朴素几何.请先在对象上设置crs.

提前致谢!

Ufo*_*fos 17

截至2018年,在GeoPandas中设置CRS非常简单:

gdf.crs = {'init' :'epsg:4326'}
Run Code Online (Sandbox Code Playgroud)

这里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)
Run Code Online (Sandbox Code Playgroud)

  • `GeoDataFrame(df, Geometry=geometry, crs='EPSG:4326')` 也可以工作 (2认同)

小智 8

GeoPandas 中设置 CRS 的格式现在是

gdf.crs = "EPSG:4326"

较早的格式已弃用

参考:https : //geopandas.org/projections.html