SPARQL/SERVICE - 附近和框
外观
< SPARQL
该服务允许搜索坐标位于中心一定半径内或一定边界框内的项目。
以下大多数示例使用地图视图,在查询顶部使用 #defaultView:Map
。您可以切换到表格显示以查看底层数据。
最常用于位置的属性是 坐标位置 (P625)。
柏林 100 公里范围内的机场示例
# Airports within 100km from Berlin
#defaultView:Map
SELECT ?place ?placeLabel ?location ?dist
WHERE {
# Berlin coordinates
wd:Q64 wdt:P625 ?berlinLoc .
SERVICE wikibase:around {
?place wdt:P625 ?location .
bd:serviceParam wikibase:center ?berlinLoc .
bd:serviceParam wikibase:radius "100" .
bd:serviceParam wikibase:distance ?dist.
}
FILTER EXISTS {
# Is an airport
?place wdt:P31/wdt:P279* wd:Q1248784 .
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY ASC(?dist)
around
服务调用的第一行必须具有格式 ?item
predicate
?location
,其中搜索结果将绑定 ?item
到指定位置内的项目,并将 ?location
绑定到它们的坐标。支持的参数是
谓词 | 含义 |
---|---|
wikibase:center | 执行搜索的点。必须绑定才能搜索生效。 |
wikibase:radius | 距中心的距离。目前距离始终以公里为单位,其他单位尚未支持。 |
wikibase:globe | 正在搜索的地球。可选,默认为 地球 (wd:Q2)。 |
wikibase:distance | 接收距离信息的变量 |
加利福尼亚州圣何塞和加利福尼亚州萨克拉门托之间的学校框搜索示例
# Schools between San Jose, CA and Sacramento, CA
#defaultView:Map
SELECT ?place ?placeLabel ?location
WHERE {
wd:Q16553 wdt:P625 ?SJloc.
wd:Q18013 wdt:P625 ?SCloc.
SERVICE wikibase:box {
?place wdt:P625 ?location.
bd:serviceParam wikibase:cornerSouthWest ?SJloc.
bd:serviceParam wikibase:cornerNorthEast ?SCloc.
}
?place wdt:P31/wdt:P279* wd:Q3914.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
可以直接指定坐标
# Schools between San Jose, CA and Sacramento, CA
#same as previous
#defaultView:Map
SELECT ?place ?placeLabel ?location
WHERE {
SERVICE wikibase:box {
?place wdt:P625 ?location.
bd:serviceParam wikibase:cornerWest "Point(-121.872777777 37.304166666)"^^geo:wktLiteral.
bd:serviceParam wikibase:cornerEast "Point(-121.486111111 38.575277777)"^^geo:wktLiteral.
}
?place wdt:P31/wdt:P279* wd:Q3914.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
box
服务调用的第一行必须具有格式 ?item
predicate
?location
,其中搜索结果将绑定 ?item
到指定位置内的项目,并将 ?location
绑定到它们的坐标。支持的参数是
谓词 | 含义 |
---|---|
wikibase:cornerSouthWest | 框的西南角。 |
wikibase:cornerNorthEast | 框的东北角。 |
wikibase:cornerWest | 框的西角。 |
wikibase:cornerEast | 框的东角。 |
wikibase:globe | 正在搜索的地球。可选,默认为 地球 (wd:Q2)。 |
wikibase:cornerSouthWest
和 wikibase:cornerNorthEast
应该一起使用,wikibase:cornerWest
和 wikibase:cornerEast
也应该一起使用,并且不能混合使用。如果使用 wikibase:cornerWest
和 wikibase:cornerEast
谓词,则假定这些点是框对角线的坐标,并且相应的角将被推导出来。
函数 geof:distance
返回两点之间的距离,以公里为单位。示例用法
# Airports within 100km from Berlin
SELECT ?place ?placeLabel ?location ?dist
WHERE {
# Berlin coordinates
wd:Q64 wdt:P625 ?berlinLoc.
SERVICE wikibase:around {
?place wdt:P625 ?location.
bd:serviceParam wikibase:center ?berlinLoc.
bd:serviceParam wikibase:radius "100".
}
# Is an airport
?place wdt:P31/wdt:P279* wd:Q1248784.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
BIND(geof:distance(?berlinLoc, ?location) as ?dist)
}
ORDER BY ?dist
# Places around 0°,0°
SELECT ?place ?placeLabel ?location ?dist
WHERE {
SERVICE wikibase:around {
?place wdt:P625 ?location.
bd:serviceParam wikibase:center "Point(0 0)"^^geo:wktLiteral.
bd:serviceParam wikibase:radius "250".
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
BIND(geof:distance("Point(0 0)"^^geo:wktLiteral, ?location) as ?dist)
}
ORDER BY ?dist