Подтвердить что ты не робот

Обратный поиск геотекстилей в Википедии

Википедия geotagging a lot статьи. (Посмотрите в верхнем правом углу страницы.)

Существует ли какой-либо API для запроса всех геотегированных страниц в пределах указанного радиуса географического положения?

Update

Хорошо, поэтому, основываясь на ответе теории потерь, я попробовал это (на DBpedia 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. (Вопрос открыт здесь.) Когда я получу что-то полезное, я обновлю вопрос, но пока буду благодарен за любые предложения по альтернативным подходам.

Обновление 3

Окончательное обновление. Я отказался от использования SPARQL через DBpedia. Я написал простой синтаксический анализатор, который извлекает текст в новинке базы данных в Википедии и анализирует все статьи для геокодов. Это работает довольно красиво, и это позволяет мне хранить информацию о предметах, связанных с геотегоми, но я желаю.

Это, вероятно, решение, которое я буду продолжать использовать, и, если мне удастся создать хороший интерфейс, я мог бы рассмотреть возможность доступа к публичному API и/или публикации источника для синтаксического анализатора.

4b9b3361

Ответ 1

Сервер OpenLink Virtuoso, используемый конечной точкой dbpedia, имеет несколько функций запроса. Я нашел информацию о 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. Пример (из здесь):

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]')
)
}

Вы можете запускать свои собственные запросы здесь.

Ответ 4

Не API, но вы также можете загрузить этот красивый набор всех геоинтегрированных статей wikipedia и запросить его непосредственно в локальной базе данных: http://www.google.com/fusiontables/DataSource?dsrcid=423292

Ответ 5

бесплатно Служба GeoNames.org FindNearbyWikipedia может получить геотеговые статьи для получения почтового кода или координат (широта, долгота)

Он предоставляет 30 000 дневных лимитов на каждое приложение (идентифицированное параметром "имя пользователя" ), почасовой лимит - 2000 кредитов. Кредит - это запрос на веб-службу для большинства служб. Исключение возникает при превышении лимита.

Ответ 6

Я не достаточно хорошо знаком с SPARQL, но если он может использовать силу в своем фильтре, то его легко вычислить расстояние данной статьи от данной точки, используя теорему Пифагора (a ^ 2 + b ^ 2 = c ^ 2), и это даст вам все статьи в радиусе.

Другим вариантом было бы получить дамп данных Wikipedia и обработать его самостоятельно - это то, что я сделал, когда мне нужно было сделать некоторые лингвистические анализ статьи в Википедии.