【问题标题】:Find link of the place which contain Coordinates in Wikipedia using C#使用 C# 在 Wikipedia 中查找包含坐标的位置的链接
【发布时间】:2016-05-30 13:16:38
【问题描述】:

对于我的项目,我需要列出城市中许多有趣的地方。比如柏林维基百科页面https://en.wikipedia.org/wiki/Berlin有很多有趣的地方链接,比如柏林国家歌剧院链接https://en.wikipedia.org/wiki/Berlin_State_Opera、柏林动物园链接https://en.wikipedia.org/wiki/Berlin_Zoological_Garden等等。而这一切的右上角都有这样的坐标 52°30′30″N 13°20′15″E坐标:52°30′30″N 13°20′15″E。所以我想要做的是,我只想从包含坐标信息的维基百科文章中获取链接。好吧,我已经阅读了一些文章,但有任何 api 来提取包含地理坐标信息的链接。所以我想获取所有包含地理信息的地点链接的方法是什么。

【问题讨论】:

标签: c# hyperlink wikipedia wikipedia-api mediawiki-api


【解决方案1】:

维基百科有一个不错的Geo Search API,可以让你搜索附近的页面:

https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=10000&gspage=Berlin&gslimit=500&gsprop=type|name|dim|country|region|globe&format=json

{
"batchcomplete": "",
"query": {
    "geosearch": [
        ...
        {
            "pageid": 391156,
            "ns": 0,
            "title": "Berlin State Opera",
            "lat": 52.516666666667,
            "lon": 13.395,
            "dist": 789.4,
            "primary": "",
            "type": "landmark",
            "name": "",
            "dim": 1000,
            "country": "DE",
            "region": "BE"
        },
        ...
        {
            "pageid": 1005900,
            "ns": 0,
            "title": "Berlin Zoological Garden",
            "lat": 52.508333333333,
            "lon": 13.3375,
            "dist": 3237.1,
            "primary": "",
            "type": "landmark",
            "name": "",
            "dim": 500,
            "country": "DE",
            "region": "BE"
        },
        ...

您可以使用gspage 使用任何维基百科文章的标题with geographic coordinates 进行搜索。您会看到一些带有地理标记的历史事件、地标和其他功能,因此您可以添加 gsprop=type 来添加属性,以帮助您过滤您不感兴趣的文章。

几点说明:

  • API (目前)最多只能返回 500 个在您正在搜索的点半径 10,000 米范围内的项目。如果您没有得到所需的一切,您可能需要尝试一系列更窄的搜索或使用一个小的边界框(带有gsbbox 参数)。

  • 维基百科的每种语言都有自己的 API 端点。您可以尝试same query on the German language Wikipedia,您可能会看到略有不同的结果。

  • Wikidata 具有跨语言的大量数据,SPARQL interface,但它不支持地理坐标搜索 (yet)。有一天,您或许可以使用 Wikidata 来根据位置 (P625) 查找项目。

【讨论】:

    【解决方案2】:

    您可以使用 API 获取所有链接页面,为每个页面获取坐标。然后,您可以通过忽略所有没有任何坐标的链接页面来处理它。

    查询将如下所示:

    https://en.wikipedia.org/w/api.php?action=query&generator=links&titles=Berlin&prop=coordinates&gpllimit=max&colimit=max

    请注意,链接页面包括与柏林完全不相关的页面,例如亚琛。

    更好的方法可能是搜索坐标在柏林某个点附近的页面。

    【讨论】:

    • 谢谢。我看到了你的链接。你是对的,有一些地方在柏林不是一个感兴趣的地方。但是有没有其他的api呢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多