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

Python调用Overpass查询卢森堡OSM村镇数据时Kiischpelt缺失问题

问题原因

你查询不到对应数据主要是两个常见的Overpass API使用坑导致的:

  1. 直接通过area["ISO3166-1"=xxx][admin_level=2]定义查询范围的方式可靠性不足,部分地区的国家边界area没有被预生成或者标签匹配有偏差,导致后续的范围筛选失效。
  2. 你使用的是HTTP协议的Overpass端点,目前官方端点已经强制跳转HTTPS,部分场景下跳转过程会丢失查询参数,导致返回结果不完整。

修复方案

你可以按以下步骤调整代码:

  • 先查询对应国家的admin_level=2的relation,再用map_to_area方法手动转为查询范围,避免预生成area匹配不到的问题
  • 将Overpass端点改为HTTPS协议
  • 可以用正则合并重复的place标签查询,简化代码

修正后的代码如下:

import requests
import json

Country = 'LU'

# 改为HTTPS协议的Overpass端点
overpass_url = "https://overpass-api.de/api/interpreter"
overpass_query = f"""
[out:json][timeout:30];
// 先查国家relation再转area,范围匹配更准确
rel["ISO3166-1"="{Country}"][admin_level=2];
map_to_area -> .search;
(
  node["place"~"^(city|town|village)$"](area.search);
  way["place"~"^(city|town|village)$"](area.search);
  rel["place"~"^(city|town|village)$"](area.search);
);
out center;
"""
response = requests.get(overpass_url, 
                      params={'data': overpass_query})
response.raise_for_status() # 新增请求错误捕获,方便定位接口问题
data = response.json()

filename = f"C:/Data/GetGeoData/data/{Country}cities.json"
with open(filename,'w', encoding="utf-8") as f:
    json.dump(data, f)

如果调整后还是查询不到,你可以单独运行下面的查询语句,确认该数据在你使用的Overpass服务器节点中存在:

[out:json];
rel["name"="Kiischpelt"]["place"="town"];
out center;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:15:03