You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选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中的多个子区域合并为一个整体,方便批量判断点是否在任意子区域内

预期输出

LatLongTemp
52.00-1.8913.67
53.23-2.4510.38

内容的提问来源于stack exchange,提问作者O Stanley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:58:19