2010-04-13 16 views
8

Ho appena acquistato uno smartphone Google Nexus One e desidero scrivere una piccola applicazione Android per divertimento. Supponiamo di poter ottenere le mie attuali coordinate GPS, quindi come posso trovare localmente punti di riferimento o punti di interesse vicini entro un raggio? Esiste un'API per ottenere punti di riferimento GPS geo-taggati, come nel database di Google Earth?Dato coordinate GPS, come posso trovare punti di riferimento o punti di interesse vicini?

Ad esempio, se sono nel centro di Chicago, il mio programma mi indirizza a tutte le cose "turistiche" da visitare in quella città.

Idealmente, tutto funzionerebbe sul mio smartphone, ma se necessario, posso chiedere allo smartphone di interrogare un server web, che quindi eseguirà più query.

+0

Forse si guarda l'API Google Maps? – Jay

+0

Sei già stato picchiato a pugni; c'è un'app chiamata "Directory dei luoghi" scritta da Google che fa esattamente ciò che descrivi. –

+0

@Daniel Lew Non ho intenzione di scrivere la mia applicazione per la distribuzione. Voglio solo provare diverse API. – stackoverflowuser2010

risposta

3

dipende da dove stai ricevendo i dati da punto di riferimento. Se si desidera eseguire una query Web, è possibile eseguire una delle operazioni precedenti.

In alternativa, se si dispone dei propri dati, è possibile memorizzarli nel db con valori lat e lon e quindi formare un rettangolo di delimitazione per una query. Questa domanda ti dice come calcolare un rettangolo di selezione che copre un determinato raggio intorno al punto corrente (sarà una scatola, quindi sarà più grande di un cerchio ....

How to calculate the bounding box for a given lat/lng location?

Utilizzando la delimitazione casella, ora puoi effettuare una query dal tuo db where lat < maxlat and lat > minlat and lon > minlon and lon < maxlon che ti darà tutti i tuoi punti di interesse all'interno della casella

Quindi, usando la classe Location nell'API Android, puoi ottenerlo per calcolare il rilevamento e la distanza per ciascuno dei colpi e quindi è possibile, ad esempio, ordinare per raggio dalla posizione.

+0

Questo è un grande aiuto. Supponiamo che voglio memorizzare i miei punti di riferimento e implementare il mio servizio di ricerca; se ho N punti di riferimento, dovrei fare una ricerca O (N) attraverso tutti loro per trovare quello più vicino. C'è una struttura dati o un approccio che migliorerà con questa ricerca? Stavo pensando di implementare un albero a due livelli (un livello di latitudine, un altro livello per longitudine) o un albero di kd o un quadrilatero. Qualche idea? – stackoverflowuser2010

+0

L'idea sarebbe di indicizzare su lat e long, il che significa che trovare tutto all'interno del rettangolo sarebbe abbastanza veloce. Fatto ciò, hai solo un insieme limitato di cose a cui devi lavorare (n). Puoi anche iniziare con un rettangolo molto piccolo e quindi eseguire una query all'esterno (escluso il tuo rettangolo interno) per aggiungere altri risultati come ritieni necessario. – Fiid

+0

Incidentalmente - Penso che i veri e propri database geografici abbiano più intelligenza su questa roba. Ho implementato una ricerca geografica su Android usando questa approacdh e funziona abbastanza velocemente. La mia app trova tutti gli aeroporti e gli eliporti entro un raggio di 50 nm. – Fiid

2

Il modo più rapido per farlo è:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=business+near+city"); 
startActivity(intent); 

Dopo geo mettete le vostre coordinate, e dopo q = si immettono i tuoi tearms di ricerca, come il turismo + città. Questo accenderà l'app Google Maps con i punti di interesse.

Se si desidera utilizzare una vista mappe all'interno dell'applicazione, è necessario ottenere i dati da un servizio come il proprio. Tuttavia puoi estrarre i dati dalla ricerca Ajax di Google in questo modo: http://ajax.googleapis.com/ajax/services/search/local?v=1.0&rsz=large&gl=pl&q=tourism+chicago Ulteriori informazioni qui: http://code.google.com/apis/ajaxsearch/documentation/reference.html#_fonje_local Questo ti darà risultati che hanno coordinate geografiche e dovresti fare un modo di analizzare i risultati e magari farli diventare un Banca dati.

+0

Grazie. Non voglio necessariamente ottenere i punti di interesse nelle vicinanze sotto forma di una mappa. Preferirei semplicemente averlo restituito in XML. – stackoverflowuser2010

+0

Bene, allora l'ajax api dovrebbe funzionare per voi, ma penso che funzioni solo con JSON. –

1

Un'origine dati facile da sviluppare che è possibile utilizzare è http://compass.webservius.com - è un database di milioni di schede di attività commerciali negli Stati Uniti, facilmente ricercabile con un riquadro di delimitazione delle coordinate utilizzando un'API REST.

1

Foursquare dispone di un'eccellente API che offre a tutte le aziende e altri luoghi di interesse le coordinate GPS. Non richiede l'accesso dell'utente per accedere. Il database di supporto è costantemente gestito dagli utenti di Foursquare.

https://developer.foursquare.com/overview/venues

+0

Rad. Grazie per la condivisione. – Nick

Problemi correlati