Обратный поиск геотегов в Википедии - PullRequest
13 голосов
/ 09 сентября 2009

Википедия - это геотаггинг a лот из ее статей . (Посмотрите в верхнем правом углу страницы.)

Есть ли API для запроса всех страниц с геотегами в пределах указанного радиуса географического положения?

Обновление

Ладно, поэтому, основываясь на ответе утерянной теории, я попробовал это (на Исследователь запросов DBpedia ):

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 и / или публикации исходного кода для анализатора.

Ответы [ 6 ]

3 голосов
/ 01 июля 2011

Сервер 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 км от исходной позиции.

3 голосов
/ 09 сентября 2009

Вы должны иметь возможность запрашивать широту / долготу, используя 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]')
)
}

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

1 голос
/ 05 ноября 2012

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

Предоставляет суточный лимит в 30 000 кредитов на приложение (определяется параметром «имя пользователя»), ежечасный лимит составляет 2000 кредитов. Кредит является запросом веб-службы для большинства служб. Исключение выдается при превышении лимита.

1 голос
/ 13 января 2012

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

1 голос
/ 09 сентября 2009

Есть пара инструментов, перечисленных в Инструменты и приложения, основанные на координатах из Википедии . Я не уверен, что это то, что вы ищете, но инструмент Geosearch.py ​​ выглядит довольно круто.

0 голосов
/ 09 сентября 2009

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

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

...