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

如何将GeoJSON上传至Mapbox API?接口未返回job_id问题解决

正确的Mapbox API上传GeoJSON流程

你的代码仅完成了第一步(获取S3临时上传凭证),但缺少上传文件到指定S3桶和触发Mapbox上传任务两个核心步骤,因此无法拿到job_id。完整流程如下:

步骤1:获取S3上传凭证

调用Mapbox的凭证接口获取临时S3权限,这一步你已实现,但需提取返回的url(S3上传地址)、key(文件存储路径)等关键信息:

import requests
import geopandas as gpd

# 转换GeoDataFrame为GeoJSON字符串
gdf = gpd.GeoDataFrame(df, geometry="GEOMETRY")
geojson_str = gdf.to_json()

# 获取S3上传凭证
username = "你的Mapbox用户名"
my_access_token = "你的Mapbox访问令牌"
cred_url = f"https://api.mapbox.com/uploads/v1/{username}/credentials?access_token={my_access_token}"
cred_response = requests.post(cred_url)
cred_data = cred_response.json()

# 提取关键凭证字段
s3_upload_url = cred_data["url"]
s3_file_key = cred_data["key"]
s3_bucket = cred_data["bucket"]

步骤2:将GeoJSON上传至指定S3桶

使用拿到的S3凭证,通过PUT请求将GeoJSON内容上传到指定地址,需设置正确的Content-Type:

# 上传GeoJSON到S3
s3_upload_response = requests.put(
    s3_upload_url,
    data=geojson_str.encode("utf-8"),
    headers={"Content-Type": "application/geo+json"}
)
s3_upload_response.raise_for_status()  # 确保上传成功,失败则抛出异常

步骤3:触发Mapbox上传任务

文件上传到S3后,调用Mapbox的上传任务接口,传入S3文件路径和自定义瓦片集信息,即可获取job_id:

# 发起Mapbox上传任务
job_url = f"https://api.mapbox.com/uploads/v1/{username}?access_token={my_access_token}"
job_payload = {
    "name": "mydata",
    "url": f"s3://{s3_bucket}/{s3_file_key}",
    "tileset": f"{username}.mydata_tileset"  # 瓦片集格式必须为「用户名.自定义名称」
}
job_response = requests.post(job_url, json=job_payload)
job_data = job_response.json()
job_id = job_data["job"]

# 查询上传状态
status_url = f"https://api.mapbox.com/uploads/v1/{username}/{job_id}/status?access_token={my_access_token}"
status_response = requests.get(status_url)
print(status_response.json())

核心注意事项

  • 确保你的Mapbox令牌拥有uploads:write和uploads:read权限
  • 瓦片集名称必须遵循「用户名.自定义名称」格式,不能包含特殊字符
  • 上传到S3时必须设置Content-Type为application/geo+json,否则Mapbox无法识别文件格式
  • 若GeoJSON体积较大,建议先保存为本地文件再上传,避免内存溢出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:35:11