[ PROMPT_NODE_26634 ]
data-io
[ SKILL_DOCUMENTATION ]
# 读取与写入空间数据
## 读取文件
使用 `geopandas.read_file()` 导入矢量空间数据:
python
import geopandas as gpd
# 从文件读取
gdf = gpd.read_file("data.shp")
gdf = gpd.read_file("data.geojson")
gdf = gpd.read_file("data.gpkg")
# 从 URL 读取
gdf = gpd.read_file("https://example.com/data.geojson")
# 从 ZIP 压缩包读取
gdf = gpd.read_file("data.zip")
### 性能:Arrow 加速
若要获得 2-4 倍的读取速度,请使用 Arrow:
python
gdf = gpd.read_file("data.gpkg", use_arrow=True)
需要安装 PyArrow:`uv pip install pyarrow`
### 读取时过滤
预先过滤数据以仅加载所需内容:
python
# 加载特定行
gdf = gpd.read_file("data.gpkg", rows=100) # 前 100 行
gdf = gpd.read_file("data.gpkg", rows=slice(10, 20)) # 第 10-20 行
# 加载特定列
gdf = gpd.read_file("data.gpkg", columns=['name', 'population'])
# 使用边界框进行空间过滤
gdf = gpd.read_file("data.gpkg", bbox=(xmin, ymin, xmax, ymax))
# 使用几何掩码进行空间过滤
gdf = gpd.read_file("data.gpkg", mask=polygon_geometry)
# SQL WHERE 子句 (需要 Fiona 1.9+ 或 Pyogrio)
gdf = gpd.read_file("data.gpkg", where="population > 1000000")
# 跳过几何信息 (返回 pandas DataFrame)
df = gpd.read_file("data.gpkg", ignore_geometry=True)
## 写入文件
使用 `to_file()` 进行导出:
python
# 写入 Shapefile
gdf.to_file("output.shp")
# 写入 GeoJSON
gdf.to_file("output.geojson", driver='GeoJSON')
# 写入 GeoPackage (支持多图层)
gdf.to_file("output.gpkg", layer='layer1', driver="GPKG")
# 使用 Arrow 加速写入
gdf.to_file("output.gpkg", use_arrow=True)
### 支持的格式
列出所有可用的驱动程序:
python
import pyogrio
pyogrio.list_drivers()
常见格式:Shapefile, GeoJSON, GeoPackage (GPKG), KML, MapInfo File, CSV (带 WKT 几何信息)
## Parquet 和 Feather
列式存储格式,保留空间信息并支持多个几何列:
python
# 写入
gdf.to_parquet("data.parquet")
gdf.to_feather("data.feather")
# 读取
gdf = gpd.read_parquet("data.parquet")
gdf = gpd.read_feather("data.feather")
优势:
- 比传统格式更快的 I/O
- 更好的压缩率
- 保留多个几何列
- 支持模式版本控制
## PostGIS 数据库
### 从 PostGIS 读取
python
from sqlalchemy import create_engine
engine = create_engine('postgresql://user:password@host:port/database')
# 读取整个表