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

如何用Wikidata API的SPARQL查询获取阿尔及利亚城市坐标

获取阿尔及利亚城市经纬度的SPARQL查询方案

核心SPARQL查询

SELECT ?city ?name ?coord
WHERE {
  ?city wdt:P31 wd:Q515 ;    # 筛选实例为“城市”的实体
        wdt:P17 wd:Q288 ;    # 限定所属国家为阿尔及利亚
        wdt:P625 ?coord ;    # 获取城市的坐标信息
        rdfs:label ?name .   # 获取城市名称标签
  # 过滤常用语言标签(适配阿尔及利亚的法语/阿拉伯语环境,可按需调整)
  FILTER(LANG(?name) = "fr" || LANG(?name) = "ar" || LANG(?name) = "en")
}
ORDER BY ?name

查询字段说明

  • ?city:Wikidata中城市实体的唯一ID(格式如http://www.wikidata.org/entity/Q1234)
  • ?name:城市的多语言名称,可根据你数据库中城市名的语言选择对应标签(比如仅保留法语名就把过滤条件改成FILTER(LANG(?name) = "fr"))
  • ?coord:城市的经纬度坐标,格式为Point(经度 纬度)

与你的Python代码结合

把上述查询替换到代码的query变量中,循环处理结果时可按以下方式提取数据:

for result in results["results"]["bindings"]:
    city_wikidata_id = result["city"]["value"]
    city_name = result["name"]["value"]
    # 解析坐标:从"Point(xx.xxx yy.yyy)"格式中提取经纬度数值
    coord_str = result["coord"]["value"].strip("Point()")
    longitude, latitude = map(float, coord_str.split())
    # 此处写入你的Django数据库更新逻辑,比如根据city_name匹配数据库条目并更新经纬度字段

可选优化(精准匹配)

如果你的数据库中已经存储了城市对应的Wikidata ID,可以直接通过ID批量查询,提升效率:

SELECT ?city ?name ?coord
WHERE {
  VALUES ?city { wd:Q123 wd:Q456 wd:Q789 }  # 替换为你数据库中的城市Wikidata ID列表
  ?city wdt:P625 ?coord ;
        rdfs:label ?name .
  FILTER(LANG(?name) = "fr")
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:15:43