反向***地理标记查找

Posted

技术标签:

【中文标题】反向***地理标记查找【英文标题】:Reverse wikipedia geotagging lookup 【发布时间】:2009-09-09 16:30:37 【问题描述】:

***是geotagginglotofitsarticles。 (查看页面右上角。)

有没有API可以查询某个地理位置指定半径内的所有geotagged pages?

更新

好的,根据 lost-theory 的回答,我尝试了这个(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 访问和/或将源代码发布到解析器。

【问题讨论】:

顺便说一句,在维基数据上:opendata.stackexchange.com/a/11673/16193 【参考方案1】:

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】:

您应该能够使用 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。

【讨论】:

非常有趣。我不确定这个 SPARQL 语法,以及如何对特定区域(由纬度、经度和半径定义)内的所有文章执行查询? 我不确定 SPARQL 是否支持三角函数(它似乎不支持);但是您可以将数据集过滤为正方形以获得第一次“切割”结果,然后在“客户端”进行大圆圈距离,并应用第二组过滤。【参考方案3】:

Tools and applications based on coordinates from Wikipedia 上列出了几个工具。我不确定它是否是您要找的东西,但Geosearch.py 工具看起来很酷。

【讨论】:

【参考方案4】:

不是 API,但您也可以下载这套漂亮的所有带有地理标签的***文章,并直接在本地数据库中查询: http://www.google.com/fusiontables/DataSource?dsrcid=423292

【讨论】:

【参考方案5】:

freeGeoNames.org FindNearbyWikipedia service 可以获取给定邮政编码或坐标(纬度、经度)的地理标记文章

它为每个应用程序提供每日 30,000 积分的限制(由参数“用户名”标识),每小时限制为 2000 积分。信用是大多数服务的网络服务请求命中。超出限制时抛出异常。

【讨论】:

【参考方案6】:

我对 SPARQL 不够熟悉,但如果它可以在其过滤器中使用幂,那么使用毕达哥拉斯定理 (a^2 + b^2 = c^) 很容易计算给定文章到给定点的距离2) 这会给你一个半径范围内的所有文章。

另一种选择是获取Wikipedia data dump 并自己处理它——这就是我需要对***文章进行一些语言分析时所做的。

【讨论】:

这就是我现在正在努力的工作。由于纬度和经度不是笛卡尔坐标,因此结果将接近两极或大半径,但在当地可能大致可以。但是我根本不知道如何计算 sparql 中某些东西的功率,甚至不知道在哪里查找如何计算功率。我在这里提出了一个问题:***.com/questions/1401401/… 当我找到一个令人满意的解决方案时,我会更新这个问题,但在那之前,我会很感激任何建议。 :) 在给出这个答案之前,我已经查看了 W3 上的 SPARQL 参考,并且我在那里看到的数学运算不太令人满意。话虽如此,有一些关于使用嵌入式 javascript 添加运算符的讨论,这可能是一个解决方案,但由于时间不够,我没有深入研究。 听起来我发现了什么。我猜到了有效的平方根运算符 (math:sqrt),但即便如此,W3 页面上似乎也没有记录。这不是为了在网页上显示,所以我不确定任何 javascript 解决方案将如何提供帮助(尽管我自己也注意到了这个讨论。) SPARQL 处理器很可能有一个 javascript 解析器来处理它。如果你能让math:sqrt 工作,那么math:pow 也可能工作。 math:pow 对我不起作用,也没有尝试将值自己相乘(一些关于 '(' 的语法错误的编译器错误,我不明白)。

以上是关于反向***地理标记查找的主要内容,如果未能解决你的问题,请参考以下文章

单个应用程序中的正向和反向地理编码:需要方向

谷歌反向地理编码 - 如何捕捉到最近的完整邮政编码

地理位置更改标记位置

关于地理标记视频和视频在地理信息系统方面提供的信息

仅从 Twitter API 请求地理标记状态

使用 CLGeocoder 反向地理编码查找当前位置