使用 C# 查找包含维基百科坐标的地方的链接

本文关键字:坐标 百科 链接 查找 包含维 使用 | 更新日期: 2023-09-27 18:35:07

对于我的项目,我需要列出城市中许多有趣的地方。比如在柏林维基百科页面 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"ECoordinates:52°30′30"N 13°20′15"E。所以我想做的是,我只想从维基百科文章中获取包含坐标信息的链接。好吧,我已经阅读了一些文章,但是有任何api来提取包含地理坐标信息的链接。所以我想有什么方法可以获取包含地理信息的所有地点链接。

使用 C# 查找包含维基百科坐标的地方的链接

维基百科有一个很好的地理搜索API,可以让你搜索附近的页面:

https://en.wikipedia.org/w/api.php?action=query&list=geosearch&gsradius=10000&gspage=Berlin&gslimit=500&gsprop=type|名称|暗淡|国家|地区|全球&格式=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使用带有地理坐标的任何维基百科文章的标题进行搜索。您将看到一些带有地理标记的历史事件、地标和其他要素,因此您可以添加gsprop=type以添加属性,以帮助您筛选不感兴趣的文章。

一些注意事项:

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

  • 维基百科的每种语言都有自己的API端点。您可以在德语维基百科上尝试相同的查询,您可能会看到略有不同的结果。

  • 维基数据通过SPARQL界面拥有跨语言的大量数据,但它(尚不支持地理坐标搜索)。有一天,您可以使用维基数据根据项目的位置查找项目(P625)。

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

查询将如下所示:

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

请注意,链接的页面

包括与柏林完全无关的页面,例如亚琛。

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