GeoPandas 缓冲区分析 buffer 的单位为什么不对?投影坐标系是关键
很多人第一次用 GeoPandas 做缓冲区分析时,会写出类似 gdf.buffer(1000) 的代码,然后发现结果不是 1000 米缓冲区,甚至大得离谱。这不是 GeoPandas 算错了,而是坐标系单位没有弄清楚。
buffer 使用的是坐标单位
GeoPandas 的 buffer 方法并不知道你心里想的是“米”还是“公里”,它只会使用当前几何坐标的单位。如果数据是 EPSG:4326,也就是常见的 WGS84 经纬度坐标,单位是“度”。此时 buffer(1000) 表示 1000 度,结果当然不合理。
正确流程
标准做法是先确认原始 CRS,再转换到适合研究区的投影坐标系,做完缓冲后视需要转回 WGS84。
import geopandas as gpd
gdf = gpd.read_file("points.geojson")
gdf = gdf.to_crs(epsg=32650) # 示例:UTM 50N,单位为米
gdf["geometry"] = gdf.buffer(1000)
gdf = gdf.to_crs(epsg=4326)
gdf.to_file("buffer_1km.geojson", driver="GeoJSON")
投影怎么选
如果研究区范围不大,可以使用当地 UTM 分带或地方常用投影。中国区域项目中,也常见 CGCS2000 高斯克吕格投影。不要为了省事直接在经纬度下缓冲,尤其是涉及面积、距离、邻近分析时,误差会非常明显。
排查清单
- 用
gdf.crs查看 CRS 是否为空。 - 用
gdf.total_bounds判断坐标值像经纬度还是投影坐标。 - 缓冲前用
to_crs转到米制投影坐标系。 - 输出 Web 地图前再转回 EPSG:4326 或 EPSG:3857。
一句话总结:GeoPandas 的距离分析先问坐标系,再写 buffer。这个习惯能避免大量“结果看起来能出图,但数值完全不可信”的问题。
相关文章
-
Python 读取 Shapefile 中文乱码怎么办?编码、驱动与字段名限制说明 2026-05-30 13:49:29
-
GeoPandas 空间连接 sjoin 结果为空怎么办?CRS、几何、索引三步排查 2026-05-23 11:35:12
-
gis python 开发入门全解析,gis Python新手指南 2025-09-06 12:13:26
-
gis python开发者必看,gis Python基础入门全解析 2025-09-06 12:13:25
-
gis Python入门指南,从解析gis python基础知识谈起 2025-09-06 12:13:24
-
gis Python入门指南,从解析Gis python库开始 2025-09-06 12:13:23
-
GISer的Python学习路径:从基础语法到GeoPandas空间数据分析 2025-08-23 12:53:35
-
GeoPandas实战:用几行代码完成空间数据读写、坐标转换与可视化 2025-08-19 11:03:19
-
Jupyter Notebook + GIS:打造可交互、可复现的空间分析报告 2025-07-12 20:36:08
热门标签
最新资讯
2026-05-30 13:49:29
2026-05-30 13:49:27
2026-05-30 13:49:25
2026-05-30 13:49:25
2026-05-30 13:49:24
2026-05-30 13:49:22
2026-05-30 13:49:22
2026-05-30 13:49:21
2026-05-30 13:49:20
2026-05-30 13:49:19