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

GeoPandas.to_crs()不能作为函数的一部分工作,但可以在独立程序中工作

吕德惠
2023-03-14

我试图将一个由点组成的GeoJSON层从EPSG:4326重新投影到EPSG:3857。当我在一个独立的程序中运行下面的代码时(如下所示),输出与预期一样。

geojsonSaveDir = 'path_to_input_file'
firePoints4326 = gpd.read_file(geojsonSaveDir)
firePointsReproject = firePoints4326.copy()
firePointsReproject['geometry'] = firePointsReproject['geometry'].to_crs(3857)
print(firePoints4326['geometry'].head())
print(firePointsReproject['geometry'].head())
firePointsReproject.crs = from_epsg(3857)
reprojectSaveDir = geojsonSaveDir.replace('.geojson', '') + '_3857'
firePointsReproject.to_file(reprojectSaveDir)

上述代码的输出为:

0    POINT (-61.56000 -11.96000)
1    POINT (-61.58000 -11.96000)
2    POINT (-59.21000 -11.66000)
3    POINT (-59.23000 -11.66000)
4    POINT (-51.55000 -11.28000)
Name: geometry, dtype: geometry
1    POINT (-6855054.243 -1341156.488)
2    POINT (-6591227.050 -1307038.377)
3    POINT (-6593453.440 -1307038.377)
4    POINT (-5738519.750 -1263874.866)
Name: geometry, dtype: geometry

然而,当我使用完全相同的代码创建一个函数时,输出是EPSG: 3857中的shapefile,其中所有点的坐标都是0.00000, 0.00000。大多数时候,这甚至不会在QGIS中显示。此函数的输入参数是要重新项目的GeoJSON文件的路径。我对输出是shapefile没意见,但就是不明白为什么重新投影在以前不会这样工作。

def pointReprojector(geojsonSaveDir):
firePoints4326 = gpd.read_file(geojsonSaveDir)
firePointsReproject = firePoints4326.copy()
firePointsReproject['geometry'] = firePointsReproject['geometry'].to_crs(epsg=3857)
print(firePoints4326['geometry'].head())
print(firePointsReproject['geometry'].head())
firePointsReproject.crs = from_epsg(3857)
reprojectSaveDir = geojsonSaveDir.replace('.geojson', '') + '_3857'
firePointsReproject.to_file(reprojectSaveDir)
return reprojectSaveDir

其输出为:

0    POINT (-61.56000 -11.96000)
1    POINT (-61.58000 -11.96000)
2    POINT (-59.21000 -11.66000)
3    POINT (-59.23000 -11.66000)
4    POINT (-51.55000 -11.28000)
Name: geometry, dtype: geometry
0    POINT (0.00000 0.00000)
1    POINT (0.00000 0.00000)
2    POINT (0.00000 0.00000)
3    POINT (0.00000 0.00000)
4    POINT (0.00000 0.00000)
Name: geometry, dtype: geometry

我对GeoPandas相当陌生,所以任何帮助都将不胜感激。如果需要更多信息,请告诉我。

共有1个答案

席安康
2023-03-14

请尝试使用此选项:

def pointReprojector(geojsonSaveDir):
    firePoints4326 = gpd.read_file(geojsonSaveDir)
    firePointsReproject = firePoints4326.copy()
    firePointsReproject['geometry'] = firePointsReproject['geometry'].to_crs('epsg:3857')
    print(firePoints4326['geometry'].head())
    print(firePointsReproject['geometry'].head())
    #firePointsReproject.crs = from_epsg(3857)
    reprojectSaveDir = geojsonSaveDir.replace('.geojson', '') + '_3857'
    firePointsReproject.to_file(reprojectSaveDir)
    return reprojectSaveDir

请注意,您不需要在重新投影后设置CRS。这就是为什么我评论了那句话。另外,我看到您对to_crs功能使用了两种不同的输入样式(to_crs(3857)to_crs(epsg=3857))。只要坚持这种输入方式,你就不会出错:到crs(“epsg:3857”)

我用下载的GeoJSON尝试了上面的代码,结果很好——生成的shapefile在QGIS中非常完美。

 类似资料:
  • 正在更新属性文件:/home/mehmet/works/netbeansprojects/hsm_java/build/built-clean.属性删除目录/home/mehmet/works/netbeansprojects/hsm_java/build 清洁: 初始化: 已创建目录:/home///netbeansprojects/hsm_java/build/empty 已创建目录:/hom

  • 我试图详细学习JavaEE7,但我在从数据库中获取记录并在JSF页面上显示它们方面遇到了问题。 我使用Wildfly10.1.0和Oracle XE11。我创建了以下数据源: 在JBoss的管理接口中的连接测试是成功的。 这是我的: 当我通过运行WildFly,并通过部署我的应用程序时,它可以工作。 当我在Eclipse中启动服务器并尝试使用相同的命令部署应用程序时,它失败了--因为我添加了JPA

  • 这就是我正在做的。 部署此应用程序在 jboss 中失败,因为它在 tomcat 中部署,并且像 charm 一样工作。 我使用来自eclipse的动态web应用程序作为项目源。 将项目导出到war文件并在jboss服务器中部署也不起作用。 web.xml: Spring.xml: 控制器: 和 JBOSS 中的错误:

  • 几天来,我一直在用头撞这个,完全被难倒了。下面是纲要: 我有一个Eclipse插件项目,使用Tycho通过Maven 3构建 在Maven中,我已经设置了maven-jarsigner-plugin来使用我的keystore对jars进行签名(有关keystore的详细信息,请参阅下文) 我的密钥库里有个Thawte签名的代码签名证书 我可以从目标/*中获取任何签名的jar文件,并在上面运行“ja

  • 问题内容: 早上好!最近,我买了一个Arduino开发板来对房间进行“灯光控制”。这是我编写的固件代码: 之后,我使用了Python解释器中的pySerial来控制引脚,一切工作正常。这是一段解释器输出: 然后,我决定编写一个简单的Python脚本来执行相同的操作: 但这根本不起作用!Arduino显示在我启动脚本的过程中收到了一些东西,但是什么也没发生。这是脚本的strace输出: 看起来一切都

  • 我试图访问一个使用.html插入的类元素。当我通过click事件在函数中调用它时,它可以工作,但当我直接调用它时,它就不工作了...有什么想法吗?