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

手动导出OSM数据出现1KB空文件问题,求自动导出的Python/Julia命令

OSM导出空文件问题排查
  • 查询参数或语法错误:手动导出生成的Overpass查询可能存在坐标格式错误,或者过滤条件过于苛刻(比如误选了无数据的标签分类),导致返回空结果。可以手动检查导出的查询语句,简化过滤条件后重试。
  • API服务异常:公共Overpass实例可能临时限流、维护或负载过高,换个不同的公共实例地址重试试试。
  • 区域无数据:你选的区域可能确实没有OSM贡献的数据(比如偏远无人区),可以先选城市中心这类数据密集区测试。
  • 请求格式问题:部分导出工具生成的请求可能缺少必要的请求头,或者指定的输出格式不兼容,导致返回空响应体。
Python 自动下载指定坐标区域OSM数据

用osmnx库最方便,它封装了Overpass API的调用:

import osmnx as ox

# 定义坐标范围:(最小经度, 最小纬度, 最大经度, 最大纬度)
bbox = (116.3, 39.8, 116.5, 40.0)
# 下载区域内所有OSM数据并保存为GeoJSON
osm_gdf = ox.geometries_from_bbox(bbox, tags={})
osm_gdf.to_file("osm_data.geojson", driver="GeoJSON")

如果需要自定义查询逻辑,用requests直接发请求:

import requests
import json

overpass_url = "https://overpass-api.de/api/interpreter"
# 构造Overpass QL查询,指定坐标范围和要获取的元素类型
query = f"""
[out:json];
(
  node({bbox[1]},{bbox[0]},{bbox[3]},{bbox[2]});
  way({bbox[1]},{bbox[0]},{bbox[3]},{bbox[2]});
  relation({bbox[1]},{bbox[0]},{bbox[3]},{bbox[2]});
);
out body;
>;
out skel qt;
"""
resp = requests.get(overpass_url, params={"data": query})
data = resp.json()
# 保存为JSON文件
with open("osm_raw_data.json", "w") as f:
    json.dump(data, f, indent=2)
Julia 自动下载指定坐标区域OSM数据

先安装依赖包:

using Pkg
Pkg.add(["OSM", "HTTP", "JSON3"])

然后用OSM库直接下载:

using OSM

# 坐标范围格式:(最小纬度, 最小经度, 最大纬度, 最大经度)
bbox = (39.8, 116.3, 40.0, 116.5)
# 下载数据并保存为OSM XML文件
osm_data = get_osm(bbox=bbox)
save_osm(osm_data, "osm_data.osm")

如果需要自定义查询,用HTTP发送请求:

using HTTP, JSON3

query = """
[out:json];
(
  node($(join(bbox, ",")));
  way($(join(bbox, ",")));
  relation($(join(bbox, ",")));
);
out body;
>;
out skel qt;
"""
resp = HTTP.get("https://overpass-api.de/api/interpreter", query=Dict("data" => query))
data = JSON3.read(resp.body)
# 保存JSON数据
open("osm_raw_data.json", "w") do f
    JSON3.write(f, data)
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:05:21