使用 SPARQL 从维基数据中检索坐标样本的纬度和经度

Retrieve latitude and longitude of a sample of coordinates from Wikidata using SPARQL

我正在尝试通过 SPARQL 检索维基数据中的坐标样本,但我很难实现它。我只想获得每个地方的一对坐标,并将结果显示在一列中,并将所述坐标样本的纬度和经度显示在它们自己的列中。

以下代码 (link to WQS) I use below works, but it does not get the coordinates values labels in Point(5.936111111 51.21) format. When I replace p:P625 with wdt:P625, no items are retrieved. Additionally, Borculo (Q1025685) 在具有两个唯一坐标的结果中出现两次:

SELECT DISTINCT ?place ?placeLabel (SAMPLE(?temp1) AS ?coords_sample) ?lat ?long {

  ?place p:P31 ?instanceOf.
  ?instanceOf ps:P31/wdt:279* wd:Q2039348.
  
  ?place p:P625 ?temp1.
  ?temp1 psv:P625 ?temp2.
  ?temp2 wikibase:geoLatitude ?lat.
  ?temp2 wikibase:geoLongitude ?long. 

  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
} GROUP BY ?place ?placeLabel ?lat ?long

ORDER BY ?placeLabel

使用 ps:P625 获取所需格式的坐标(另请参阅 manual on Wikibooks)。

此外,如果您还按 ?lat?long 分组,则对坐标语句进行采样是不够的。因此,您最好在子查询中对其进行采样。

最终结果:

SELECT DISTINCT ?place ?placeLabel ?coords ?lat ?long {
  ?place p:P31/ps:P31/wdt:279* wd:Q2039348 ;
         p:P625 ?coords_sample .
  {
    SELECT (SAMPLE(?coords_stmt) AS ?coords_sample) {
      ?place p:P31/ps:P31/wdt:279* wd:Q2039348 ;
             p:P625 ?coords_stmt .
    } GROUP BY ?place
  }
  ?coords_sample ps:P625 ?coords;
                 psv:P625 [
                   wikibase:geoLatitude ?lat;
                   wikibase:geoLongitude ?long
                 ] .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY ?placeLabel