首页 > 解决方案 > 如何使用 SPARQL 查询 wikidata 以找到符合特定条件且地理位置靠近另一个城市的地点

问题描述

我编写了以下 SPARQL 查询以在意大利查找带有“San Leucio”标签的 wikidata 项目。

SELECT DISTINCT * WHERE {
                        ?location ?label 'San Leucio'@en .  
                        ?location wdt:P17 wd:Q38 .
                        ?location rdfs:label ?locationName .
                        OPTIONAL {
                          ?article schema:about ?location .
                          ?article schema:isPartOf <https://en.wikivoyage.org/> .
                        }
                        ?location wdt:P18 ?image .
                        FILTER(lang(?locationName) = "en") 
                        }

查询返回以下 3 个结果:

wd:Q55179410
wd:Q20009063
wd:Q846499

我想要的结果是wd:Q846499,它位于意大利那不勒斯之外。有什么方法可以进一步过滤此查询以返回最接近那不勒斯的结果?我知道我可以使用 获取其中每一个?location wdt:P625 ?coordinates的地理坐标,但我不确定如何使用它与那不勒斯的地理坐标进行比较以获得我想要的。

标签: sparqlwikidata

解决方案


SELECT DISTINCT * {
    VALUES ?naples {wd:Q2634}
    ?Napfes wdt:P625 ?naples_coordinates.
    ?location rdfs:label 'San Leucio'@en .  
    ?location wdt:P17 wd:Q38 .
    ?location wdt:P18 ?image .
    ?location wdt:P625 ?location_coordinates.
    OPTIONAL {
        ?article schema:about ?location .
        ?article schema:isPartOf <https://en.wikivoyage.org/> .
    }
    BIND (geof:distance(?location_coordinates, ?naples_coordinates) AS ?distance)
} ORDER BY ?distance LIMIT 1

推荐阅读