File "1.py", line 64, in <module> in_proj = pyproj.Proj(int='epsg:4326') File "/home/admin1/anaconda3/envs/CFANet/lib/python3.6/site-packages/pyproj/__init__.py", line 358, in __new__ return _proj.Proj.__new__(self, projstring) File "_proj.pyx", line 84, in _proj.Proj.__cinit__ RuntimeError: b'projection not named'
时间: 2024-04-20 19:23:09 浏览: 165
这个错误是由于在创建 pyproj.Proj 对象时传入的投影字符串(projstring)不正确导致的。根据你提供的代码,问题出现在第 64 行,其中你正在尝试使用 'epsg:4326' 这个投影字符串创建一个 pyproj.Proj 对象。
可能的原因是 'epsg:4326' 不是一个有效的投影名称。请确认你使用的投影名称是否正确。另外,你可以尝试使用其他有效的投影字符串来创建 pyproj.Proj 对象。
如果问题仍然存在,请提供更多代码和上下文信息,以便我更好地帮助你解决这个问题。
相关问题
F:\Program Files\Python311\Lib\site-packages\pyproj\crs\crs.py:141: FutureWarning: '+init=<authority>:<code>' syntax is deprecated. '<authority>:<code>' is the preferred initialization method. When making the change, be mindful of axis order changes: https://pyproj4.github.io/pyproj/stable/gotchas.html#axis-order-changes-in-proj-6 in_crs_string = _prepare_from_proj_string(in_crs_string)
这个警告是由于`+init=`语法在`pyproj`库的未来版本中被弃用。新的初始化方法是使用`<authority>:<code>`的形式。同时,在进行更改时,请留意坐标轴顺序的变化。具体信息可以参考`pyproj`文档中的[Gotchas](https://pyproj4.github.io/pyproj/stable/gotchas.html#axis-order-changes-in-proj-6)部分。
要解决这个警告,你可以使用新的初始化方法来定义投影坐标系。以下是一个示例代码:
```python
from shapely.ops import transform
from shapely.geometry import shape
from functools import partial
import pyproj
# 定义投影转换函数
project = partial(
pyproj.transform,
pyproj.CRS.from_string('EPSG:3857'), # OGR投影的3857坐标系
pyproj.CRS.from_string('EPSG:4326') # Shapely使用的WGS84坐标系
)
# 从OGR投影格式转换为Shapely格式
ogr_geometry = ... # 从OGR读取的3857投影坐标系的几何对象
shapely_geometry = transform(project, shape(ogr_geometry))
# 打印Shapely格式的几何对象
print(shapely_geometry)
```
在这个示例中,我们使用`pyproj.CRS.from_string`方法来定义投影坐标系。我们将`'EPSG:3857'`作为OGR投影的3857坐标系,将`'EPSG:4326'`作为Shapely使用的WGS84坐标系。
请注意,你需要将`...`替换为你从OGR读取的几何对象。确保你已经安装了最新版本的`pyproj`库,并根据你的实际需求进行必要的坐标系转换参数调整。
Traceback (most recent call last): File "E:\code-study\coda\test.py", line 26, in <module> gdf['geometry'] = gdf['geometry'].to_crs(out_proj) File "C:\Users\GW00321286\.conda\envs\python_39\lib\site-packages\geopandas\geoseries.py", line 1124, in to_crs self.values.to_crs(crs=crs, epsg=epsg), index=self.index, name=self.name File "C:\Users\GW00321286\.conda\envs\python_39\lib\site-packages\geopandas\array.py", line 767, in to_crs crs = CRS.from_user_input(crs) File "C:\Users\GW00321286\.conda\envs\python_39\lib\site-packages\pyproj\crs\crs.py", line 440, in from_user_input return CRS(value, **kwargs) File "C:\Users\GW00321286\.conda\envs\python_39\lib\site-packages\pyproj\crs\crs.py", line 290, in __init__ raise CRSError("Invalid CRS input: {!r}".format(projparams)) pyproj.exceptions.CRSError: Invalid CRS input: Proj('+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs', preserve_units=True)
这个错误是由于你输入的投影坐标系不正确导致的。可能是你输入的投影坐标系字符串格式不正确或者不支持。你可以尝试使用合适的投影坐标系字符串格式,或者使用EPSG编码来指定正确的投影坐标系。例如,如果你想将几何对象转换为Web墨卡托投影,则可以使用EPSG编码3857,如下所示:
```python
import geopandas as gpd
# 读取数据
gdf = gpd.read_file('data.shp')
# 将几何对象转换为Web墨卡托投影
out_crs = 'EPSG:3857'
gdf = gdf.to_crs(out_crs)
```
如果你想使用自定义的投影坐标系字符串格式,则需要确保该字符串格式正确,并且被PyProj库支持。例如,如果你想使用自定义的Mercator投影,则可以使用以下代码:
```python
import geopandas as gpd
from pyproj import Proj, transform
# 定义自定义Mercator投影
in_proj = Proj('+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs')
out_proj = Proj(init='epsg:4326')
# 读取数据
gdf = gpd.read_file('data.shp')
# 将几何对象转换为自定义Mercator投影
gdf['geometry'] = gdf['geometry'].to_crs({'proj': 'merc', 'a': '6378137', 'b': '6378137', 'lat_ts': '0.0', 'lon_0': '0.0', 'x_0': '0.0', 'y_0': '0', 'k': '1.0', 'units': 'm', 'nadgrids': '@null', 'wktext': True, 'no_defs': True})
# 将几何对象转换为WGS84投影
gdf['geometry'] = gdf['geometry'].apply(lambda x: transform(in_proj, out_proj, x))
```
这里的in_proj是自定义的Mercator投影,out_proj是WGS84投影。你可以根据需要修改这些投影坐标系。
阅读全文