如何筛选GeoJSON区域范围内的温度DataFrame记录?
筛选GeoJSON区域内的温度数据记录
要实现仅保留GeoJSON区域内的温度数据记录,核心是用geopandas处理空间几何判断,步骤如下:
1. 安装依赖库
首先确保安装处理空间数据的必要工具:
pip install geopandas shapely pandas
2. 完整代码实现
import pandas as pd import geopandas as gpd from shapely.geometry import Point # 读取GeoJSON文件,替换为你的文件路径 geojson_region = gpd.read_file("your_region.geojson") # 示例温度数据(替换为你的实际DataFrame) temperature_df = pd.DataFrame({ "Lat": [52, 53.23, 51.37], "Long": [-1.89, -2.45, -2.1], "Temp": [13.67, 10.38, -2.45] }) # 将温度数据转换为GeoDataFrame(生成经纬度对应的点几何) geometry_points = [Point(long, lat) for long, lat in zip(temperature_df["Long"], temperature_df["Lat"])] temp_geo_df = gpd.GeoDataFrame( temperature_df, geometry=geometry_points, crs="EPSG:4326" # WGS84坐标系,与多数GeoJSON默认一致 ) # 确保GeoJSON与温度数据坐标系统一(若GeoJSON坐标系不同,执行转换) # geojson_region = geojson_region.to_crs("EPSG:4326") # 筛选位于GeoJSON区域内的记录 # 方式1:用within方法判断点是否在区域内 filtered_df = temp_geo_df[temp_geo_df.geometry.within(geojson_region.unary_union)] # 方式2:用空间连接(sjoin),适合复杂区域场景 # filtered_df = gpd.sjoin(temp_geo_df, geojson_region, how="inner", predicate="within") # 清理结果,保留原数据列 filtered_df = filtered_df[["Lat", "Long", "Temp"]].reset_index(drop=True) print(filtered_df)
3. 关键说明
- 几何转换:必须把经纬度转为
Point几何对象,才能让geopandas识别为空间数据 - 坐标系一致性:GeoJSON和温度数据的坐标系必须相同,否则空间判断会失效。多数公开GeoJSON使用
EPSG:4326(WGS84),若你的文件不同,用to_crs方法转换 - 区域合并:
unary_union会把GeoJSON中的多个子区域合并为一个整体,方便批量判断点是否在任意子区域内
预期输出
| Lat | Long | Temp |
|---|---|---|
| 52.00 | -1.89 | 13.67 |
| 53.23 | -2.45 | 10.38 |
内容的提问来源于stack exchange,提问作者O Stanley
相关产品推荐
相关产品推荐

