反向维基百科地理标记查找

时间:2009-09-09 16:30:37

标签: api geolocation sparql wikipedia geotagging

维基百科是geotagging一个lot of its articles。 (请查看页面右上角。)

是否有任何API可以查询指定半径范围内的所有geotagged pages

更新

好的,基于迷失理论的答案我试过这个(DBpedia query explorer):

PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
SELECT ?subject ?label ?lat ?long WHERE {
    ?subject geo:lat ?lat.
    ?subject geo:long ?long.
    ?subject rdfs:label ?label.
    FILTER(xsd:float(?lat) - 57.03185 <= 0.05 && 57.03185 - xsd:float(?lat) <= 0.05
        && xsd:float(?long) - 9.94513 <= 0.05 && 9.94513 - xsd:float(?long) <= 0.05
        && lang(?label) = "en"
    ).
} LIMIT 20

这非常接近我想要的,除了它在点(而不是圆圈)周围的(local)方格内返回结果。另外我想如果结果根据距离点的距离进行排序。 (如果可能的话。)

更新2

我试图将欧氏距离确定为真实距离的近似值,但我在SPARQL中对数字进行平方时遇到了麻烦。 (Question opened here。)当我得到有用的东西时,我会更新这个问题,但与此同时,我会感谢任何关于替代方法的建议。

更新3

最后更新。我放弃了通过DBpedia使用SPARQL。我编写了一个简单的解析器,它可以获取Wikipedia文章文本夜间数据库转储并解析所有文章以获取地理编码。它工作得很好,它允许我存储有关地理标记文章的信息,但我希望。

这可能是我将继续使用的解决方案,如果我开始创建一个很好的接口,我可能会考虑允许公共API访问和/或将源发布到解析器。

6 个答案:

答案 0 :(得分:3)

您应该能够使用SPARQL和dbpedia查询纬度/经度。一个例子(来自here):

SELECT distinct ?s ?la ?lo ?name ?country WHERE {
?s dbpedia2:latitude ?la .
?s dbpedia2:longitude ?lo .
?s dbpedia2:officialName ?name .
?s dbpedia2:country ?country .
filter (
  regex(?country, 'England|Scotland|Wales|Ireland')
  and regex(?name, '^[Aa]')
)
}

您可以运行自己的查询here

答案 1 :(得分:3)

dbpedia端点使用的OpenLink Virtuoso服务器具有多个查询功能。我发现http://docs.openlinksw.com/virtuoso/rdfsparqlgeospat.html上的信息对类似问题很有用。

我最终得到了一个这样的查询:

SELECT ?page ?lat ?long (bif:st_distance(?geo, bif:st_point(15.560278, 58.394167)))
WHERE{
    ?m foaf:page ?page.
    ?m geo:geometry ?geo.
    ?m geo:lat ?lat.
    ?m geo:long ?long.
    FILTER (bif:st_intersects (?geo, bif:st_point(15.560278, 58.394167), 30))
}
ORDER BY ASC 4 LIMIT 15

此示例检索距离原点位置30公里内的地理标记位置。

答案 2 :(得分:1)

Tools and applications based on coordinates from Wikipedia上列出了几种工具。我不确定这是不是你想要的,但是Geosearch.py工具看起来很酷。

答案 3 :(得分:1)

不是API,但您也可以下载所有地理标记的维基百科文章,并直接在本地数据库中查询: http://www.google.com/fusiontables/DataSource?dsrcid=423292

答案 4 :(得分:1)

free GeoNames.org FindNearbyWikipedia service可以获取地理标记文章以获取邮政编码或坐标(纬度,经度)

它为每个应用程序提供30,000个学分的每日限制(由参数'username'标识),每小时限制为2000学分。信用是大多数服务的Web服务请求。超出限制时会抛出异常。

答案 5 :(得分:0)

我对SPARQL不够熟悉,但如果它可以在其滤波器中使用功率,那么使用毕达哥拉斯定理很容易计算给定物品与给定点的距离(a ^ 2 + b ^ 2 = c ^ 2)这将为你提供半径范围内的所有文章。

另一种选择是获得一个Wikipedia data dump并自己处理 - 这就是我在维基百科文章中需要做一些语言分析时所做的。