当前位置: 首页 > 知识库问答 >
问题:

从点生成geopandas数据帧,然后投影gpd,得到错误:无法转换原始几何体。请先在对象上设置crs

雷曜灿
2023-03-14

我将一个具有lat/lon的数据集转换为geopandas数据帧(我们称之为gpd)。gpd没有CRS,我试图使用以下方法将此gpd投影到“EPSG:3857”:

gpd=对crs的gpd(“EPSG:3857”)

我得到一个错误,说“无法转换原始几何体。请先在对象上设置一个CRS”。这是否意味着,对于任何没有CRS的gpd,我必须首先为其分配CRS,然后将其重新投影到我感兴趣的CRS,例如,从4326到3857:

gpd.crs=“EPSG:4326”

gpd=对crs的gpd(“EPSG:3857”)

我的困惑是CRS和投影之间的区别,为什么我不能在这种情况下直接使用3857。此外,pyproj项目提到重新投影geodata有一些变化,并就如何投影geodata给出了建议,我不清楚细节,有人能就如何适当投影/重新投影geodata给出一些建议吗?谢谢

共有1个答案

斜宁
2023-03-14

您需要先定义crs,然后才能对其进行投影。如果.shp文件没有附带的.prj文件,则通常会发生这种情况。

import geopandas as gpd
gdf = gpd.read_file('GSHHS_c_L1.shp')
print(gdf.crs)
None

#this is how we define the projection
gdf.crs = "EPSG:4326"
print(gdf.crs)
EPSG:4326

#In Jupyter if you don't use a print statement, but shift+enter, you'll get this for your crs

<Geographic 2D CRS: EPSG:4326>
Name: WGS 84
Axis Info [ellipsoidal]:
- Lat[north]: Geodetic latitude (degree)
- Lon[east]: Geodetic longitude (degree)
Area of Use:
- name: World
- bounds: (-180.0, -90.0, 180.0, 90.0)
Datum: World Geodetic System 1984
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich

定义了crs之后,就可以对其进行投影了。

#this is how we project the data
gdf = gdf.to_crs("EPSG:3857")
# this will display crs information in jupyter
gdf.crs

<Projected CRS: EPSG:3857>
Name: WGS 84 / Pseudo-Mercator
Axis Info [cartesian]:
- X[east]: Easting (metre)
- Y[north]: Northing (metre)
Area of Use:
- name: World - 85°S to 85°N
- bounds: (-180.0, -85.06, 180.0, 85.06)
Coordinate Operation:
- name: Popular Visualisation Pseudo-Mercator
- method: Popular Visualisation Pseudo Mercator
Datum: World Geodetic System 1984
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich
 类似资料:
  • 我正在尝试使用Geopandas和Matplotlib绘制西班牙地图。我使用的是您在下面看到的GeoJSON文件,其中的几何体是地理坐标(EPSG 4326) 我想在墨卡托投影中绘制地图,但当我尝试使用 我收到一个错误说: 我已按照本手册中的说明进行操作http://geopandas.org/projections.html. 其中指出,如果geopandas数据帧不与CRS的信息一起计算,则必

  • 给定以下GeoDataFrame: 我需要设置CRS,就像我对另一个GeoDataFrame所做的那样(如下所示): 我试过这个: 还有这个: ……但运气不好。 一些重要的注意事项: > 上述.to_crs方法适用的另一个GeoDataFrame来自一个形状文件,geometry列用于多边形,而不是点。应用.to_crs方法后,其“几何”值如下所示: 多边形((-5973.005380655156

  • 我正在使用Geopandas通过读取一个已投影到EPSG:3735(俄亥俄州平面南部,美国英尺)的形状文件(.shp)来创建一个geodataframe。现在我想把另一个geodataframe连接到这个。第二个geodataframe是通过读取包含lon,lat格式的x,y坐标的.csv文件创建的。因此,我将第二个地理数据框的crs定义为EPSG:4326(WGS 1984)。要使用空间连接函数

  • 问题内容: 我将类的实例存储在中。 如何将Object 转换回类以访问class方法? 问题答案: 打字: 另外,如果是 class方法 ,则不需要 实例 来访问它,则可以直接调用它:

  • 问题内容: 我正在开发一个简单的react- spring引导应用程序,但是由于GitHub问题,我使用IntelliJ重新创建了应用程序启动器文件,并使用先前应用程序的package.json文件的依赖项数据安装了节点模块。 如果我使用折叠的导航栏(汉堡栏->响应式导航栏,该导航栏在移动视图中折叠),然后单击“汉堡栏”按钮以查看导航链接,则会出现以下错误。但是所有这些事情在以前的应用程序中都进展

  • 当对象相加 obj1 + obj2,相减 obj1 - obj2,或者使用 alert(obj) 打印时会发生什么? 在这种情况下,对象会被自动转换为原始值,然后执行操作。 在 类型转换 一章中,我们已经看到了数值,字符串和布尔转换的规则。但是我们没有讲对象的转换规则。现在我们已经掌握了方法(method)和 symbol 的相关知识,可以开始学习对象原始值转换了。 所有的对象在布尔上下文(con