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

如何基于Pandas DataFrame生成符合Sentinelhub格式要求的JSON文件?

没问题,我来帮你把这个流程补全,从分组坐标到生成符合Sentinel Hub要求的JSON一步到位!

完整实现步骤

首先我们需要把你的分组逻辑扩展,构建出FeatureCollection的完整结构,最后导出为JSON文件。下面是完整的代码和解释:

1. 导入依赖库并准备示例数据

import pandas as pd
import json

# 你的示例数据
data = {
    'Id': ['01', '01', '01', '02', '02', '02'],
    'Latitude': [-17.658200, -17.658151, -17.658063, -11.896096, -11.896096, -11.896088],
    'Longitude': [36.123498, 36.123522, 36.123576, 30.388277, 30.388277, 30.388275]
}
df = pd.DataFrame(data)

2. 按Id分组获取坐标列表

这里提供两种方式,你可以选一种:

  • 方式1:用Pandas GroupBy(更简洁高效)
    一行代码就能完成分组,适合数据量大的场景:
    places = df.groupby('Id').apply(lambda x: x[['Latitude', 'Longitude']].values.tolist()).to_dict()
    
  • 方式2:保留你的循环逻辑
    如果更习惯手动循环,原代码可以直接用:
    places = {}
    for row in df.itertuples():
        if row.Id not in places:
            places[row.Id] = [[row.Latitude, row.Longitude]]
        else:
            places[row.Id].append([row.Latitude, row.Longitude])
    

3. 构建符合Sentinel Hub要求的FeatureCollection

接下来把分组后的坐标转换成FeatureCollection结构:

# 初始化FeatureCollection的基础框架
feature_collection = {
    "type": "FeatureCollection",
    "features": []
}

# 遍历每个Id对应的坐标,生成Feature
for id_, coords in places.items():
    # 构建单个Feature
    feature = {
        "type": "Feature",
        "properties": {},  # 可以在这里添加自定义属性,比如{"Id": id_}
        "geometry": {
            "type": "Polygon",
            "coordinates": [coords]  # 三层列表结构是Sentinel Hub要求的格式
        }
    }
    # 将Feature添加到集合中
    feature_collection["features"].append(feature)

4. 导出为JSON文件

最后把结构转换成格式化的JSON字符串,保存到文件或者直接输出:

# 生成格式化的JSON(indent=2让结构更易读)
json_result = json.dumps(feature_collection, indent=2)

# 保存到本地文件
with open('sentinelhub_polygons.json', 'w') as f:
    f.write(json_result)

# 打印输出查看结果
print(json_result)

几个关键注意点

  • 坐标顺序:你的示例输出用了[纬度, 经度]的顺序,如果需要遵循Sentinel Hub默认的[经度, 纬度]标准,只需要把代码中['Latitude', 'Longitude']改成['Longitude', 'Latitude']即可。
  • Polygon闭合性:标准的GeoJSON Polygon要求线性环是闭合的(第一个点和最后一个点相同),如果需要满足这个要求,可以在每个坐标列表末尾添加第一个点:coords.append(coords[0])。
  • 自定义属性:如果需要在Feature中携带Id或其他信息,修改properties字段即可,比如"properties": {"Id": id_}。

运行上面的代码后,你就能得到完全符合要求的JSON文件啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:12:38