地理数据处理库Geopandas:无法更改Geopandas对象的坐标参照系(CRS)

4
我正在尝试按照这里描述的方式设置geopandas对象的crs
可以从这里下载示例文件。
"Original Answer"翻译成"最初的回答"
import geopandas as gdp
df = pd.read_pickle('myShp.pickle')

我上传了截图以显示坐标的值。 enter image description here 如果我尝试更改crs,多边形的值不会改变。
最初的回答: 我展示了一个截图,显示了坐标的值。如果我尝试更改crs,多边形的值不会改变。
tmp = gpd.GeoDataFrame(df, geometry='geometry')
tmp.crs = {'init' :'epsg:32618'}

I show again the screenshot

enter image description here

If I try:

import geopandas as gdp
df = pd.read_pickle('myShp.pickle')
df = gpd.GeoDataFrame(df, geometry='geometry')
dfNew=df.to_crs(epsg=32618)

我明白:

ValueError: Cannot transform naive geometries.  Please set a crs on the object first.

你能具体一点吗?有什么问题?如果你尝试使用 to_crs 更改 crs,它是否会引发错误? - joris
@joris 我修改了文本。我没有收到错误,但是坐标的值没有改变。 - emax
如果您的数据没有CRS信息,您首先需要设置(就像以前那样)CRS,但是使用您的数据所在的CRS,而不是您想要将其转换为的CRS。 - joris
@joris 现在看起来它运行正常了。谢谢 - emax
2个回答

5
设置 crs 如下:
gdf.crs = {'init' :'epsg:32618'}

不会转换您的数据,它只设置CRS(基本上是说:“我的数据以这个CRS表示”)。在大多数情况下,使用geopandas.read_file读取数据时已经设置了CRS(如果您的文件具有CRS信息)。因此,只有当您的数据尚未具有CRS信息时才需要上述操作。
如果您实际上想将坐标转换为不同的CRS,则可以使用to_crs方法:
gdf_new = gdf.to_crs(epsg=32618)

请看https://geopandas.readthedocs.io/en/latest/projections.html

请在您的问题中展示这一点(您尝试的代码及其输出)。我在您的示例代码中没有看到任何to_crs调用。 - joris
是的,它在那里。tmp = gpd.GeoDataFrame(df, geometry='geometry') tmp.crs = {'init' :'epsg:32618'} - emax
1
请阅读我的回答并发表评论。你正在使用 tmp.crs = ...,我建议使用 tmp.to_crs(...) - joris
请查看我问题的修改版本 - emax

0

非常晚的回答,但是它是:

tmp.set_crs(...)

使用此功能来定义数据所在的坐标系,即“告诉计算机我们开始使用的坐标系”。
然后;
tmp.to_crs(...)

使用此功能将切换到您的新首选 CRS。


1
感谢您提供这段代码片段,它可能会提供一些有限的、即时的帮助。一个适当的解释将极大地提高其长期价值,因为它可以展示为什么这是一个好的问题解决方案,并使其对未来读者在其他类似问题上更有用。请[编辑]您的答案以添加一些解释,包括您所做的假设。 - PeterS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接