Question

Wikipedia est géolocaliser un lot sur < a href = "http://en.wikipedia.org/wiki/Kent%27s_Cavern" rel = "nofollow noreferrer"> son articles . (Regardez dans le coin supérieur droit de la page.)

Existe-t-il une API permettant d'interroger toutes les pages géomarquées dans un rayon spécifié position géographique?

Mettre à jour

D'accord, je me suis donc basé sur la réponse de la théorie perdue (sur l'explorateur de requêtes 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

Ceci est très proche de ce que je veux, sauf qu'il renvoie des résultats dans un ( local ) carré autour de la pointe et non un cercle. Aussi, j'aimerais que les résultats soient triés en fonction de la distance du point. (Si possible.)

Mise à jour 2

J'essaie de déterminer la distance euclidienne comme une approximation de la distance réelle, mais je ne parviens pas à obtenir un nombre au carré dans SPARQL. ( Question ouverte ici .) Lorsque j'aurai quelque chose d'utile, je mettrai à jour la question, mais en attendant, j'apprécierai toutes les suggestions sur des approches alternatives.

Mise à jour 3

Une dernière mise à jour. J'ai abandonné l'utilisation de SPARQL via DBpedia. J'ai écrit un analyseur syntaxique simple qui récupère le dump de base de données nocturne du texte de l'article Wikipedia et analyse tous les articles à la recherche de géocodes. Cela fonctionne plutôt bien et me permet de stocker des informations sur les articles géolocalisés comme je le souhaite.

C’est probablement la solution que je continuerai d’utiliser, et si je réussis à créer une interface agréable, je pourrais envisager d’autoriser l’accès à l’API publique et / ou de publier le code source à l’analyseur.

Était-ce utile?

La solution

Le serveur OpenLink Virtuoso utilisé par le point de terminaison dbpedia possède plusieurs fonctionnalités de requête. J'ai trouvé les informations sur http://docs.openlinksw.com/virtuoso/rdfsparqlgeospat.html utile pour un problème similaire.

Je me suis retrouvé avec une requête telle que celle-ci:

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

Cet exemple récupère les lieux géolocalisés dans un rayon de 30 km de la position d'origine.

Autres conseils

Vous devriez pouvoir demander la latitude / longitude avec SPARQL et dbpedia . Un exemple (tiré de ici . ):

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

Vous pouvez exécuter vos propres requêtes ici .

Ce n'est pas une API, mais vous pouvez également télécharger ce bel ensemble de tous les articles wikipedia géolocalisés et l'interroger directement dans une base de données locale: http://www.google.com/fusiontables/DataSource?dsrcid=423292

Le gratuit GeoNames.org Le service FindNearbyWikipedia peut récupérer des articles géolocalisés pour un code postal ou des coordonnées (latitude, longitude)

Il fournit une limite quotidienne de 30 000 crédits par application (identifiée par le paramètre 'nom d'utilisateur'), ??la limite horaire est de 2000 crédits. Un crédit est un hit de demande de service Web pour la plupart des services. Une exception est levée lorsque la limite est dépassée.

Je ne connais pas assez bien SPARQL, mais s’il peut utiliser la puissance dans son filtre, il est facile de calculer la distance d’un article donné à partir d’un point donné en utilisant le théorème de Pythagore (a ^ 2 + b ^ 2 = c ^ 2) et cela vous donnerait tous les articles dans un rayon.

Une autre option serait d’obtenir un vidage de données Wikipedia et de le traiter vous-même - ceci C'est ce que j'ai fait quand j'ai eu besoin de faire une analyse linguistique sur un article de Wikipedia.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top