使用 read_file() 将 shapefile 导入 geopandas;无法打印 crs 或重新投影

importing shapefile to geopandas using read_file(); can't print crs or reproject

我有一个历史县边界的 shapefile 和一个有效的 .prj 文件。我可以在 ArcGIS 中打开它,发现投影是 USA Contiguous Albers Equal Area Conic。我还可以在将 shapefile 读入 geopandas 并且投影看起来正确后绘制它。

但是,我无法在我的 Python IDE.

中打印坐标系的名称

如果你读入来自 geopandas 的内置数据

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

然后是运行

print(world.crs)

你得到

{'init': 'epsg:4326'}

但是如果我运行

counties1910 = gpd.read_file('counties1910.shp')

print(counties1910.crs)

我得到的只是

{}

此外,我发现虽然我可以手动 运行

counties1910.crs = {'init' :'epsg:102003'}

没有错误,如果我尝试重新投影 counties1910:

counties1910 = counties1910.to_crs("EPSG:4326")

--------------------------------------------------------------------------
CRSError                                  Traceback (most recent call last)
<ipython-input-148-4aa2873c2f22> in <module>
----> 1 counties1910 = counties1910.to_crs("EPSG:4326")

~\AppData\Local\Continuum\anaconda3\lib\site-packages\geopandas\geodataframe.py in to_crs(self, crs, epsg, inplace)
    532         else:
    533             df = self.copy()
--> 534         geom = df.geometry.to_crs(crs=crs, epsg=epsg)
    535         df.geometry = geom
    536         df.crs = geom.crs

~\AppData\Local\Continuum\anaconda3\lib\site-packages\geopandas\geoseries.py in to_crs(self, crs, epsg)
    408         # skip transformation if the input CRS and output CRS are the exact same
    409         if _PYPROJ_VERSION >= LooseVersion("2.1.2") and pyproj.CRS.from_user_input(
--> 410             self.crs
    411         ).is_exact_same(pyproj.CRS.from_user_input(crs)):
    412             return self

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pyproj\crs\crs.py in from_user_input(value, **kwargs)
    438         if isinstance(value, CRS):
    439             return value
--> 440         return CRS(value, **kwargs)
    441 
    442     def get_geod(self) -> Optional[Geod]:

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pyproj\crs\crs.py in __init__(self, projparams, **kwargs)
    294             projstring = _prepare_from_string(" ".join((projstring, projkwargs)))
    295 
--> 296         super().__init__(projstring)
    297 
    298     @staticmethod

pyproj/_crs.pyx in pyproj._crs._CRS.__init__()

CRSError: Invalid projection: +init=epsg:102003 +type=crs: (Internal Proj Error: proj_create: crs not found)

我错过了什么?

谢谢!

美国连续阿尔伯斯等积圆锥曲线是 ESRI:102003。因为你使用的是旧版本的 GeoPandas 和 pyproj,它不会自动选择它。

因为您将其作为 EPSG:102003 而不是 ESRI 传递,所以会引发该错误。

这应该在 GeoPandas 0.7.0 和 0.8.0 中按预期工作,它使用 pyproj.CRS class 来存储投影信息。理想情况下,您可以通过更新到最新版本 (0.8.0) 来修复它。

或者,将 CRS 作为 ESRI 传递(但如果可能,建议进行更新)。

counties1910.crs = {'esri:102003'}