1

我正在尝试导入形状文件并更改其 crs 以获得具有正确投影的地图。

map_sh = gpd.read_file(r'C:\PATH\VG250_Gemeindegrenzen_2018.shp')
map_sh = map_sh.to_crs({'init' :'epsg:25832'})

当我尝试执行它时,我会收到以下错误:

RuntimeError                              Traceback (most recent call last)
<ipython-input-7-8354f57e24ce> in <module>
----> 1 map_sh = map_sh.to_crs({'init' :'epsg:25832'})

~\AppData\Local\Continuum\miniconda3\lib\site-packages\geopandas\geodataframe.py in to_crs(self, crs, epsg, inplace)
    441         else:
    442             df = self.copy()
--> 443         geom = df.geometry.to_crs(crs=crs, epsg=epsg)
    444         df.geometry = geom
    445         df.crs = geom.crs

~\AppData\Local\Continuum\miniconda3\lib\site-packages\geopandas\geoseries.py in to_crs(self, crs, epsg)
    302             except TypeError:
    303                 raise TypeError('Must set either crs or epsg for output.')
--> 304         proj_in = pyproj.Proj(self.crs, preserve_units=True)
    305         proj_out = pyproj.Proj(crs, preserve_units=True)
    306         project = partial(pyproj.transform, proj_in, proj_out)

~\AppData\Local\Continuum\miniconda3\lib\site-packages\pyproj\__init__.py in __new__(self, projparams, preserve_units, **kwargs)
    360         # on case-insensitive filesystems).
    361         projstring = projstring.replace('EPSG','epsg')
--> 362         return _proj.Proj.__new__(self, projstring)
    363 
    364     def __call__(self, *args, **kw):

_proj.pyx in _proj.Proj.__cinit__()

RuntimeError: b'no arguments in initialization list'

我已经遇到了这个特定的错误,可以通过将 pyproj 更新到 2.2.1 版来解决它,但是从昨天开始我又遇到了同样的错误。

可能会发生什么变化,代码从一天到另一天都会出错?如何检查我的代码正在运行哪个版本的 pyproj?我只知道命令:

pip freeze
4

1 回答 1

0

确保您指向一个有效的epsg文件。根据您安装软件包的方式,可以在以下位置找到:

  • ~\AppData\Local\Continuum\miniconda3\Library\share\gdal
  • ~\AppData\Local\Continuum\miniconda3\Library\share

这可以通过多种方式实现,但我一般更喜欢手动指向我要使用的 gdal 资源。为此,添加一个名为 GDAL_DATA 的环境变量,并将其指向上面列表中的第一个文件夹。之后,您可能必须重新启动 python 解释器或您的计算机,具体取决于您使用的内容。

如果您使用的是 Windows,设置 GDAL 以及依赖它的所有内容可能是一个痛苦的经历,但我发现使用那些预编译的轮子安装它是最简单和最可靠的解决方案。它们也经常更新。

于 2019-08-02T00:12:28.177 回答