Domanda

Wikipedia è geotagging a lotto di < a href = "http://en.wikipedia.org/wiki/Kent%27s_Cavern" rel = "nofollow noreferrer"> its articoli . (Guarda nell'angolo in alto a destra della pagina.)

Esiste un'API per eseguire query su tutte le pagine geotaggate entro un raggio specificato di un posizione geografica?

Aggiornamento

Ok, quindi sulla base della risposta della teoria perduta ho provato questo (su 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

Questo è molto vicino a quello che voglio, tranne per il fatto che restituisce risultati in un ( local ) quadrato attorno al punto e non un cerchio. Inoltre vorrei che i risultati fossero ordinati in base alla distanza dal punto. (Se possibile.)

Aggiornamento 2

Sto cercando di determinare la distanza euclidea come approssimazione della distanza reale, ma ho problemi a quadrare un numero in SPARQL. ( Domanda aperta qui .) Quando ottengo qualcosa di utile, aggiornerò la domanda, ma nel frattempo apprezzerò qualsiasi suggerimento su approcci alternativi.

Aggiornamento 3

Un aggiornamento finale. Ho rinunciato a utilizzare SPARQL tramite DBpedia. Ho scritto un semplice parser che recupera il dump del database notturno del testo dell'articolo di Wikipedia e analizza tutti gli articoli per i geocodici. Funziona piuttosto bene e mi consente di archiviare informazioni sugli articoli con tag geografici come desidero.

Questa è probabilmente la soluzione che continuerò a usare, e se vado in giro a creare un'interfaccia piacevole, potrei prendere in considerazione la possibilità di consentire l'accesso all'API pubblica e / o pubblicare la fonte sul parser.

È stato utile?

Soluzione

Il server OpenLink Virtuoso utilizzato dall'endpoint dbpedia ha diverse funzionalità di query. Ho trovato le informazioni su http://docs.openlinksw.com/virtuoso/rdfsparqlgeospat.html utile per un problema simile.

Ho finito con una query come questa:

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

In questo esempio vengono recuperate le posizioni geotaggate entro 30 km dalla posizione di origine.

Altri suggerimenti

Dovresti essere in grado di eseguire query per latitudine / longitudine utilizzando SPARQL e dbpedia . Un esempio (da qui ):

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

Puoi eseguire le tue query qui .

Ci sono un paio di strumenti elencati su Strumenti e applicazioni basati su coordinate da Wikipedia . Non sono sicuro che sia quello che stai cercando, ma il Geosearch.py lo strumento sembra piuttosto interessante.

Non un'API, ma puoi anche scaricare questo simpatico set di tutti gli articoli di Wikipedia geo-taggati e interrogarlo direttamente in un database locale: http://www.google.com/fusiontables/DataSource?dsrcid=423292

Il gratuito GeoNames.org Il servizio FindNearbyWikipedia può recuperare articoli geotaggati per un codice postale o coordinate (latitudine, longitudine)

Fornisce un limite giornaliero di 30.000 crediti per applicazione (identificato dal parametro "nome utente"), il limite orario è di 2000 crediti. Un credito è un hit della richiesta del servizio Web per la maggior parte dei servizi. Viene generata un'eccezione quando viene superato il limite.

Non ho abbastanza familiarità con SPARQL, ma se può usare la potenza nel suo filtro, allora è facile calcolare la distanza di un determinato articolo da un determinato punto usando il teorema di Pitagora (a ^ 2 + b ^ 2 = c ^ 2) e questo ti darebbe tutti gli articoli in un raggio.

Un'altra opzione sarebbe quella di ottenere un Dump dei dati di Wikipedia ed elaborarlo tu stesso - questo è quello che ho fatto quando avevo bisogno di fare alcune analisi linguistiche sull'articolo di Wikipedia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top