【发布时间】:2016-02-12 11:52:58
【问题描述】:
【问题讨论】:
-
没有允许您在形状内搜索的 MediaWiki API。您将必须获取所有地理编码文章,然后检查您的功能中的坐标..
标签: python openstreetmap wikipedia wikipedia-api
【问题讨论】:
标签: python openstreetmap wikipedia wikipedia-api
这真的只是一个想法的集合,太大了,无法评论。
您最好的选择可能是DBpedia。它是 Wikipedia 的语义镜像,具有比 Wikipedia 的 API 更复杂的查询可能性。正如您在this paper 中看到的,它可以处理相当复杂的空间查询,但您需要进入SPARQL。这是该论文中的一个数字:
也就是说,维基百科的 API 有一个相对较新的空间查询功能:Showing nearby wiki information。我不认为你可以在多边形中搜索,但这是一个好的开始。
这是我之前写的关于使用 mwclient 从文章中获取坐标的答案,但该用户具有获取文章列表的优势。
Geonames.org 可能有助于将搜索范围缩小到地理定位的文章。查看英文维基百科中的 806,000 篇地理定位文章也不错。
出于性能原因,并避免给 Wikipedia 的服务器带来麻烦,您可以考虑使用 Wikipedia 或 DBpedia 的转储。
【讨论】:
看起来像是 OpenStreetMap 和 Overpass API 的任务。
为了构建我们的查询,我们转到 overpass turbo(Overpass API 的一个不错的前端),打开 wizard 并输入“wikipedia=* in London”,因为我们对 wikipedia tag 感兴趣.
自动生成和执行的查询将是这个:
[out:json][timeout:25];
// fetch area “London” to search in
{{geocodeArea:London}}->.searchArea;
// gather results
(
// query part for: “wikipedia=*”
node["wikipedia"](area.searchArea);
way["wikipedia"](area.searchArea);
relation["wikipedia"](area.searchArea);
);
// print results
out body;
>;
out skel qt;
这会返回太多元素,也会给您的浏览器带来沉重负担。并且可能会因为超时时间太短而失败。
我们稍作修改。我们增加了 超时 并删除了递归步骤 (>;),因为我们只对直接结果感兴趣,而不对任何相关对象感兴趣。结果查询将是这个:
[out:json][timeout:90];
// fetch area “London” to search in
{{geocodeArea:London}}->.searchArea;
// gather results
(
// query part for: “wikipedia=*”
node["wikipedia"](area.searchArea);
way["wikipedia"](area.searchArea);
relation["wikipedia"](area.searchArea);
);
// print results
out body;
out skel qt;
您可以查看result here。
现在有多种选项可以导出它。在 overpass turbo 上,您可以转到 export 并将结果直接保存到文件或获取发送到 Overpass API 的原始查询。您现在可以直接从您的 python 脚本运行此查询。
请注意,有不同的output formats 可用:JSON、XML 和 CSV。在 Wikipedia 标签旁边,您可能还对 wikidata tag 感兴趣。
还请注意,这不会为您提供所有具有伦敦坐标的 Wikipedia 页面,而只是包含在 OSM 数据库中的那个。
【讨论】: