Очень интересные источники - Wikipedia и его собрат Wikidata. Размещаем "энциклопедические" данные на карте не без помощи Excel. Все решения собраны по кусочкам, системного подхода предложить не могу. Чаще всего ответы находятся либо в примерах, либо на форумах с похожими вопросами.
Все запросы я отправляю через браузер - для новичков, включая меня, это вполне подходящий вариант.
Wikipedia и пространственный поиск
В случае Wikipedia есть справка по пространственному поиску статей, в которых даны координаты, и парочка готовых примеров, их можно посмотреть по ссылке на одну из страниц MediaWiki API.
Главное в этом запросе - это координаты точки, вокруг которой с заданным радиусом ggsradius собираются статьи.
Важно: можно задать максимальный радиус поиска в 10 км, но в крупном городе лучше ставить куда меньше (в радиус 10 км могут попросту не попасть все объекты из-за ограничения на 500 объектов). Для центра Москвы неплохо сработал 1 км.
Если поменяем en на ru, то получим поиск в русскоязычном сегменте Википедии.
https://ru.wikipedia.org/w/api.php?action=query&generator=geosearch&redirects=1&prop=coordinates|langlinkscount|info&ggslimit=500&ggsradius=1000&ggscoord=55.75|37.55&colimit=500&format=jsonВ запросе выше поиск статей ведется на русском языке, точка взята в Москве, ggslimit = 500 - то есть мы запрашиваем максимум статей, формат json. Важное добавление langlinkscount - количество статей на других языках, что позволит нам как-то определить значимость статьи. Чаще всего с высокими показателями (если отбросим названия региона или города) окажутся местные достопримечательности и спортивные объекты.
Вместо точки ggscoord можно указать рамку для поиска gsbbox=широта верхнего левого угла|долгота верхнего левого угла|широта нижнего правого угла|долгота нижнего правого угла. В принципе, оптимально территорию разбить на квадраты и по ним создавать множество запросов.
Ну и напоследок пример с добавлением количества просмотров статьи (получено таким же методом поиска подобных решений):
https://ru.wikipedia.org/w/api.php?action=query&generator=geosearch&redirects=1&prop=coordinates|pageviews|langlinkscount|info&ggslimit=500&ggsradius=1000&ggscoord=55.75|37.55&colimit=500&format=json&pvipmetric=pageviews&pvipcontinue=JSON в Excel и в QGIS
Поиск в Wikidata
Wikidata - это база знаний (подробнее можно почитать здесь), которая в первую очередь дает нам объект (будь-то здание, человек, город или историческое событие) и его описание на основе утверждений. В том числе страница Викидаты часто содержит и ссылки на Википедию.
Запрос выполняется на языке SPARQL, похожем на SQL.
Длинные и размеренные видео в таких случаях очень полезны, советую для понимания базы https://youtu.be/kJph4q0Im98 Помимо этого, конечно, можно изучить большое количество примеров https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/queries/examples
А вот и несколько вариантов запросов, которые составил я для своих нужд.
Вариант с точкой и радиусом (адрес запроса https://w.wiki/nC2 )
WHERE
{
SERVICE wikibase:around {
?place wdt:P625 ?location .
bd:serviceParam wikibase:center "Point(37.55 55.75)"^^geo:wktLiteral.
bd:serviceParam wikibase:radius "10". # kilometers
bd:serviceParam wikibase:distance ?distance.
}
?place wikibase:sitelinks ?fame .
OPTIONAL { ?place wdt:P571 ?period }.
# FILTER NOT EXISTS {
# {?place wdt:P31 wd:Q123705 .}
# UNION
# { ?place wdt:P31 wd:Q7553685 .}
# }
SERVICE wikibase:label {
bd:serviceParam wikibase:language "ru" .
}
}
Вариант с охватом по рамке(https://w.wiki/nBr):
WHERE
{
SERVICE wikibase:box {
?place wdt:P625 ?location .
bd:serviceParam wikibase:cornerSouthWest "Point(37.55 55.70)"^^geo:wktLiteral.
bd:serviceParam wikibase:cornerNorthEast "Point(37.70 55.80)"^^geo:wktLiteral.
}
?place wikibase:sitelinks ?fame .
OPTIONAL { ?place wdt:P571 ?period }.
SERVICE wikibase:label {
bd:serviceParam wikibase:language "ru" .
}
}
Больше информации о пространственных запросах можно прочесть в статье Geospatial search for Wikidata Query Service и в справке Wikidata