Pregunta

Wikipedia es geoetiquetado a lot de < a href = "http://en.wikipedia.org/wiki/Kent%27s_Cavern" rel = "nofollow noreferrer"> su artículos . (Mire en la esquina superior derecha de la página).

¿Hay alguna API para consultar todas las páginas geoetiquetadas dentro de un radio especificado de posición geográfica?

Actualizar

Bien, entonces, en base a la respuesta de la teoría perdida, intenté esto (en DBpedia query 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

Esto está muy cerca de lo que quiero, excepto que devuelve resultados dentro de un ( local ) cuadrado alrededor del punto y no un círculo. También me gustaría que los resultados estuvieran ordenados en función de la distancia desde el punto. (Si es posible)

Actualización 2

Estoy tratando de determinar la distancia euclidiana como una aproximación de la distancia verdadera, pero tengo problemas para cuadrar un número en SPARQL. ( Pregunta abierta aquí .) Cuando obtenga algo útil, actualizaré la pregunta, pero mientras tanto agradeceré cualquier sugerencia sobre enfoques alternativos.

Actualización 3

Una actualización final. Dejé de usar SPARQL a través de DBpedia. He escrito un analizador simple que recupera el volcado nocturno de la base de datos del texto del artículo de Wikipedia y analiza todos los artículos para códigos geográficos. Funciona bastante bien y me permite almacenar información sobre artículos geoetiquetados como lo desee.

Esta es probablemente la solución que seguiré usando, y si consigo crear una interfaz agradable, podría considerar permitir el acceso público a la API y / o publicar la fuente en el analizador.

¿Fue útil?

Solución

El servidor OpenLink Virtuoso utilizado por el punto final dbpedia tiene varias características de consulta. Encontré la información en http://docs.openlinksw.com/virtuoso/rdfsparqlgeospat.html útil para un problema similar.

Terminé con una consulta como esta:

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

Este ejemplo recupera las ubicaciones geoetiquetadas dentro de los 30 km de la posición de origen.

Otros consejos

Debería poder consultar la latitud / longitud usando SPARQL y dbpedia . Un ejemplo (de aquí ):

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

Puede ejecutar sus propias consultas aquí .

Hay un par de herramientas enumeradas en Herramientas y aplicaciones basadas en coordenadas de Wikipedia . No estoy seguro de si es lo que estás buscando, pero Geosearch.py la herramienta se ve muy bien.

No es una API, pero también puede descargar este bonito conjunto de todos los artículos de wikipedia etiquetados geográficamente y consultarlo directamente en una base de datos local: http://www.google.com/fusiontables/DataSource?dsrcid=423292

El gratis GeoNames.org El servicio FindNearbyWikipedia puede buscar artículos geoetiquetados para un código postal o coordenadas (latitud, longitud)

Proporciona un límite diario de 30,000 créditos por aplicación (identificado por el parámetro 'nombre de usuario'), el límite por hora es de 2000 créditos. Un crédito es un éxito de solicitud de servicio web para la mayoría de los servicios. Se produce una excepción cuando se supera el límite.

No estoy lo suficientemente familiarizado con SPARQL, pero si puede usar la potencia en su filtro, entonces es fácil calcular la distancia de un artículo determinado desde un punto dado usando el teorema de Pitágoras (a ^ 2 + b ^ 2 = c ^ 2) y eso te daría todos los artículos en un radio.

Otra opción sería obtener un volcado de datos de Wikipedia y procesarlo usted mismo. es lo que hice cuando necesitaba hacer un análisis lingüístico en el artículo de Wikipedia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top