[ PROMPT_NODE_26632 ]
crs-management
[ SKILL_DOCUMENTATION ]
# 坐标参考系统 (CRS)
坐标参考系统定义了坐标如何与地球上的位置相关联。
## 理解 CRS
CRS 信息存储为 `pyproj.CRS` 对象:
python
# 检查 CRS
print(gdf.crs)
# 检查是否设置了 CRS
if gdf.crs is None:
print("未定义 CRS")
## 设置与重投影
### 设置 CRS
当坐标正确但缺少 CRS 元数据时,使用 `set_crs()`:
python
# 设置 CRS (不转换坐标)
gdf = gdf.set_crs("EPSG:4326")
gdf = gdf.set_crs(4326)
**警告**:仅在缺少 CRS 元数据时使用。此操作不会转换坐标。
### 重投影
使用 `to_crs()` 在坐标系统之间转换坐标:
python
# 重投影到不同的 CRS
gdf_projected = gdf.to_crs("EPSG:3857") # Web Mercator
gdf_projected = gdf.to_crs(3857)
# 重投影以匹配另一个 GeoDataFrame
gdf1_reprojected = gdf1.to_crs(gdf2.crs)
## CRS 格式
GeoPandas 通过 `pyproj.CRS.from_user_input()` 接受多种格式:
python
# EPSG 代码 (整数)
gdf.to_crs(4326)
# 授权字符串
gdf.to_crs("EPSG:4326")
gdf.to_crs("ESRI:102003")
# WKT 字符串 (Well-Known Text)
gdf.to_crs("GEOGCS[...]")
# PROJ 字符串
gdf.to_crs("+proj=longlat +datum=WGS84")
# pyproj.CRS 对象
from pyproj import CRS
crs_obj = CRS.from_epsg(4326)
gdf.to_crs(crs_obj)
**最佳实践**:使用 WKT2 或授权字符串 (EPSG) 以保留完整的 CRS 信息。
## 常见 EPSG 代码
### 地理坐标系统
python
# WGS 84 (经度/纬度)
gdf.to_crs("EPSG:4326")
# NAD83
gdf.to_crs("EPSG:4269")
### 投影坐标系统
python
# Web Mercator (用于 Web 地图)
gdf.to_crs("EPSG:3857")
# UTM 分带 (示例:UTM Zone 33N)
gdf.to_crs("EPSG:32633")
# UTM 分带 (南半球,示例:UTM Zone 33S)
gdf.to_crs("EPSG:32733")
# 美国国家地图集等积投影
gdf.to_crs("ESRI:102003")
# 阿尔伯斯等积圆锥投影 (北美)
gdf.to_crs("EPSG:5070")
## 操作的 CRS 要求
### 需要匹配 CRS 的操作
这些操作要求 CRS 完全一致:
python
# 空间连接
gpd.sjoin(gdf1, gdf2, ...) # CRS 必须匹配
# 叠加操作
gpd.overlay(gdf1, gdf2, ...) # CRS 必须匹配
# 合并
pd.concat([gdf1, gdf2]) # CRS 必须匹配
# 如有必要,先进行重投影
gdf2_reprojected = gdf2.to_crs(gdf1.crs)
result = gpd.sjoin(gdf1, gdf2_reprojected)
### 建议在投影 CRS 中进行的操作
面积和距离计算应使用投影 CRS