作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以解释一下这是怎么行不通的吗?
有问题的 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.5
、geopandas 0.8.1
、pyproj 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()
comunas4326 = comunas0.to_crs({'init': 'epsg:4326'})
print(comunas4326.crs) #{'init': 'epsg:4326'}
comunas4326.plot()
comunas3857 = comunas4326.to_crs(epsg='3857') #back to original CRS
print(comunas3857.crs) #{'init': 'epsg:3857', 'no_defs': True}
编辑
使用新 shapefile 的其他图(由 OP 更新)。
每股 yield :3857
每股 yield :4326
关于python - Geopandas - ValueError : Cannot transform naive geometries. 请先在对象上设置 crs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64421284/
我是一名优秀的程序员,十分优秀!