Traceback (most recent call last): File ~\anaconda3\Lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec exec(code, globals, locals) File d:\huaweimovedata\users\27669\desktop\深城交实习\基础设施周围地铁站数据\untitled1.py:17 guangdong = gpd.read_file('guangdong-latest.osm.pbf') # 替换为您的实际文件名 File ~\anaconda3\Lib\site-packages\geopandas\io\file.py:289 in _read_file return _read_file_fiona( File ~\anaconda3\Lib\site-packages\geopandas\io\file.py:315 in _read_file_fiona with reader(path_or_bytes, **kwargs) as features: File ~\anaconda3\Lib\site-packages\fiona\env.py:457 in wrapper return f(*args, **kwds) File ~\anaconda3\Lib\site-packages\fiona\__init__.py:355 in open colxn = Collection( File ~\anaconda3\Lib\site-packages\fiona\collection.py:235 in __init__ self.guard_driver_mode() File ~\anaconda3\Lib\site-packages\fiona\collection.py:256 in guard_driver_mode raise DriverError(f"unsupported driver: {driver!r}") DriverError: unsupported driver: 'OSM'
时间: 2025-07-21 14:00:32 浏览: 3
<think>我们正在解决GeoPandas读取OSM文件时出现的`DriverError: unsupported driver: 'OSM'`问题。根据用户提供的引用[1]以及我们之前的分析,这个问题通常是由于GDAL没有启用OSM驱动或者GDAL版本与Fiona版本不兼容导致的。
解决方案思路:
1. 确认当前GDAL是否支持OSM驱动。
2. 如果支持,则可能是其他问题;如果不支持,则需要重新安装支持OSM驱动的GDAL和Fiona。
3. 根据引用[1]的经验,版本兼容性很重要,特别是Fiona和GDAL的版本匹配。
具体步骤:
步骤1:检查GDAL支持的驱动
我们可以通过运行以下代码来检查当前GDAL是否支持OSM驱动:
```python
from osgeo import gdal
# 或者使用fiona来检查
import fiona
print(fiona.supported_drivers)
```
如果输出中`OSM`不在列表中,或者运行上述代码报错,则说明当前GDAL不支持OSM驱动。
步骤2:重新安装GDAL和Fiona(注意版本兼容性)
根据引用[1]的经验,在Windows下,Fiona 1.8.6与GDAL 2.4.1版本兼容。我们可以按照以下步骤操作:
a. 卸载当前安装的gdal和fiona:
pip uninstall gdal fiona
b. 访问https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载对应版本的wheel文件。注意选择与你的Python版本和系统架构(32位或64位)匹配的文件。
例如:对于Python3.7 64位系统,下载GDAL-2.4.1-cp37-cp37m-win_amd64.whl和Fiona-1.8.6-cp37-cp37m-win_amd64.whl
c. 使用pip安装下载的wheel文件:
pip install 下载路径\GDAL-2.4.1-cp37-cp37m-win_amd64.whl
pip install 下载路径\Fiona-1.8.6-cp37-cp37m-win_amd64.whl
步骤3:验证安装
安装完成后,再次运行步骤1的代码,检查OSM驱动是否已经支持。如果支持,则尝试用GeoPandas读取OSM文件。
步骤4:如果仍然不支持,考虑使用转换工具
如果重新安装后还是不支持OSM驱动,我们可以使用ogr2ogr工具将OSM文件转换为GeoJSON等GeoPandas支持的格式,然后再用GeoPandas读取。
步骤5:使用osmnx库(专门处理OSM数据的库)
如果我们的目的是获取OpenStreetMap数据,那么使用osmnx库可能是更好的选择。它可以方便地获取并处理OSM数据,并直接转换为GeoDataFrame。
示例代码:
```python
import osmnx as ox
# 获取某个区域的道路网络
G = ox.graph_from_place('Piedmont, California, USA', network_type='drive')
# 将图转换为GeoDataFrame
nodes, edges = ox.graph_to_gdfs(G)
```
注意:在Windows环境下,安装GDAL和Fiona可能会遇到DLL加载错误,通常是由于版本不匹配或者缺少依赖的DLL。引用[1]中提到的版本组合(Fiona-1.8.6和GDAL-2.4.1)在Python3.7下是可行的。如果你的Python版本不同,可能需要尝试其他版本组合。
另外,如果使用Anaconda,可以尝试通过conda-forge安装,有时conda-forge的版本已经编译了OSM驱动:
```bash
conda install -c conda-forge gdal fiona
```
但是,根据经验,conda-forge安装的GDAL默认是支持OSM驱动的,但也不排除个别情况。因此,如果conda安装后仍然不支持,再尝试上述手动安装wheel的方法。
总结:优先尝试conda-forge安装,如果不成功则手动安装指定版本的GDAL和Fiona。
现在,我们根据上述步骤给出完整的解决方案:
1. 首先尝试通过conda-forge安装(如果你使用Anaconda):
```bash
conda install -c conda-forge geopandas
```
这会安装geopandas及其依赖(包括fiona和gdal),并且通常这些版本是兼容且支持OSM驱动的。
2. 如果不使用Anaconda或者conda安装后仍然不支持OSM驱动,则按照引用[1]的方法手动安装:
- 卸载现有gdal和fiona
- 下载对应版本的wheel文件(注意Python版本和系统架构)
- 安装wheel文件
3. 如果手动安装后仍然不行,考虑使用ogr2ogr转换格式或者使用osmnx库。
最后,我们给出一个完整的示例,展示如何用GeoPandas读取OSM文件(假设驱动已经支持):
```python
import geopandas as gpd
# 注意:直接读取OSM文件可能需要指定层(points, lines, multipolygons等)
# 例如,读取道路线(lines)层
gdf = gpd.read_file("path/to/your_file.osm", layer='lines')
```
如果驱动支持,上面的代码就可以运行了。
如果问题依旧,请检查GDAL的版本和Fiona的版本是否匹配,并确保下载的wheel文件与Python环境匹配。
相关问题:
1. 如何判断当前GDAL是否支持OSM驱动?
2. 在Windows环境下如何手动安装GDAL和Fiona?
3. 如何使用ogr2ogr将OSM文件转换为GeoJSON?
4. 有哪些Python库适合处理OpenStreetMap数据?
5. Fiona和Geopandas之间有什么依赖关系?
我们将在回答的最后列出这些问题。</think>### GeoPandas读取OSM文件出现`DriverError: unsupported driver: 'OSM'`的解决方法
当使用GeoPandas读取OSM文件时遇到`DriverError: unsupported driver: 'OSM'`错误,这通常是由于GDAL库未启用OSM驱动支持或版本不兼容导致的。以下是逐步解决方案:
---
### 方法一:检查并修复GDAL驱动支持
#### 步骤1:验证当前GDAL是否支持OSM驱动
```python
from osgeo import gdal
# 列出所有可用驱动
drivers = [gdal.GetDriver(i).ShortName for i in range(gdal.GetDriverCount())]
print("OSM" in drivers) # 返回False表示不支持
```
#### 步骤2:卸载并重装兼容版本(Windows推荐)
根据引用[1]的经验,Fiona 1.8.6与GDAL 2.4.1兼容性最佳:
```bash
pip uninstall -y gdal fiona geopandas
```
1. 访问[Christoph Gohlke的预编译库](https://www.lfd.uci.edu/~gohlke/pythonlibs/)
2. 下载匹配Python版本和系统的文件:
- `GDAL‑2.4.1‑cp37‑cp37m‑win_amd64.whl`
- `Fiona‑1.8.6‑cp37‑cp37m‑win_amd64.whl`
3. 手动安装:
```bash
pip install GDAL‑2.4.1‑cp37‑cp37m‑win_amd64.whl
pip install Fiona‑1.8.6‑cp37‑cp37m‑win_amd64.whl
pip install geopandas
```
#### 步骤3:验证安装结果
```python
import fiona
print(fiona.supported_drivers) # 应显示'OSM': 'r'
```
---
### 方法二:使用格式转换工具(无需驱动支持)
#### 通过ogr2ogr转换OSM为GeoJSON
```bash
# 安装GDAL命令行工具(Windows用户需设置PATH)
brew install gdal # macOS
apt install gdal-bin # Linux
# 转换格式
ogr2ogr -f "GeoJSON" roads.geojson input.osm lines
```
在Python中读取转换后的文件:
```python
import geopandas as gpd
gdf = gpd.read_file("roads.geojson")
```
---
### 方法三:使用专用OSM处理库
推荐使用`osmnx`库直接获取OSM数据:
```python
import osmnx as ox
# 获取城市道路网络
G = ox.graph_from_place('Berlin, Germany', network_type='drive')
nodes, edges = ox.graph_to_gdfs(G)
# 保存为GeoPackage
edges.to_file("berlin_roads.gpkg", driver="GPKG")
```
---
### 关键原因分析
| 问题原因 | 解决方案 |
|---------|---------|
| GDAL未编译OSM驱动 | 安装预编译版本或从源码启用OSM支持 |
| GDAL与Fiona版本冲突 | 使用兼容组合(GDAL 2.x + Fiona 1.8.x) |
| 环境路径配置错误 | 检查`gdalinfo --version`输出是否一致 |
| 文件格式不标准 | 使用QGIS验证OSM文件有效性 |
> **注意**:在Anaconda环境中可使用`conda install -c conda-forge gdal=2.4.1 fiona=1.8.6`安装兼容版本[^1]。
---
### 相关问题
1. 如何判断当前GDAL是否支持OSM驱动?
2. 在Windows环境下如何手动安装GDAL和Fiona?
3. 如何使用ogr2ogr将OSM文件转换为GeoJSON?
4. 有哪些Python库适合处理OpenStreetMap数据?
5. Fiona和Geopandas之间有什么依赖关系?
阅读全文
相关推荐













