gpt4 book ai didi

python - Geopandas - ValueError : Cannot transform naive geometries. 请先在对象上设置 crs

转载 作者:行者123 更新时间:2023-12-05 02:48:34 26 4
gpt4 key购买 nike

有人可以解释一下这是怎么行不通的吗?

enter image description here

有问题的 shapefile 是 here并在代码中读作

shp=gpd.read_file("Microdatos_Censo_2017_Manzana/Microdatos_Censo_2017_Manzana.shp")
shp.crs="epsg:4326"
breakpoint()
shp=shp.to_crs(epsg=3857)## Error here

我只是不明白发生了什么。我有 Python 3.8.5geopandas 0.8.1pyproj 2.6.1.post1。不确定其他哪些包对了解其版本很重要。

谢谢!


编辑:

1.- 修复我弄错的 shapefile 链接。

2.- 这与作为副本发布的问题不同,因为正如您在图像上看到的那样,shp.crs 的打印语句返回正确的 crs 信息,而不是 None .我定义了一个 crs,但 to_crs 不工作。

最佳答案

在您的代码中:

shp = gpd.read_file("Comunas/Comunas.shp")

让您将 shp 作为 GeoDataFrame

接下来,行

shp.crs = "epsg:4326"

只改变shp的属性,不对geodataframe进行坐标变换。

然后

shp = shp.to_crs(epsg=3857)

导致错误。

从错误消息中可以明显看出,导致错误的命令需要正确的 object 作为其输入值。根据方法的签名,epsq=3857 中的值是错误的,如下所示。

.to_crs(crs=None, epsg=None, inplace=False)

正确使用该方法可以是:

.to_crs({'init': 'epsg:4326'})
.to_crs(crs={'init': 'epsg:4326'})
.to_crs(epsg='4326')

对于您的特定数据集,要将原始 GeoDataFrame (epsg:3857) 的 CRS 转换为 epsg:4326,然后返回原始,请执行以下步骤:

shp_file = './data/comunas/comunas.shp'  #(on my machine)
comunas0 = gpd.read_file(shp_file)
print(comunas0.crs) #{'init': 'epsg:3857'}
comunas0.plot()

epsg3857(comunas0 的图像)

comunas4326 = comunas0.to_crs({'init': 'epsg:4326'})
print(comunas4326.crs) #{'init': 'epsg:4326'}
comunas4326.plot()

epsg4326(comunas4326 的图像)

comunas3857 = comunas4326.to_crs(epsg='3857')  #back to original CRS
print(comunas3857.crs) #{'init': 'epsg:3857', 'no_defs': True}

编辑

使用新 shapefile 的其他图(由 OP 更新)。

每股 yield :3857

new3857

每股 yield :4326

new4326

关于python - Geopandas - ValueError : Cannot transform naive geometries. 请先在对象上设置 crs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64421284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com