反向***地理标记查找
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 对我不起作用,也没有尝试将值自己相乘(一些关于 '(' 的语法错误的编译器错误,我不明白)。以上是关于反向***地理标记查找的主要内容,如果未能解决你的问题,请参考以下文章