2010-04-13 5 views
8

Ich habe mir gerade ein Google Nexus One-Smartphone gekauft und möchte zum Spaß eine kleine Android-Anwendung schreiben. Angenommen, ich kann meine aktuellen GPS-Koordinaten abrufen. Wie kann ich programmatisch in der Nähe liegende Sehenswürdigkeiten oder Punkte in einem bestimmten Umkreis finden? Gibt es eine API, um geo-markierte GPS-Punkte zu erhalten, wie in Google Earth's Datenbank?Wie lassen sich nach GPS-Koordinaten in der Nähe liegende Sehenswürdigkeiten oder Sehenswürdigkeiten finden?

Zum Beispiel, wenn ich in der Innenstadt von Chicago bin, würde mein Programm mich auf alle "touristischen" Dinge hinweisen, die man in dieser Stadt besuchen kann.

Idealerweise würde alles auf meinem Smartphone laufen, aber wenn nötig, kann ich das Smartphone einen Webserver abfragen lassen, der dann mehr Abfragen ausführen würde.

+0

würden Sie Google Maps API aussehen? – Jay

+0

Sie sind bereits geschlagen worden; Es gibt eine App namens "Places Directory" von Google, die genau das tut, was Sie beschreiben. –

+0

@Daniel Lew Ich beabsichtige nicht, meine eigene Anwendung für den Vertrieb zu schreiben. Ich möchte einfach verschiedene APIs ausprobieren. – stackoverflowuser2010

Antwort

3

Hängt wo sind Sie Ihre Wahrzeichen von Daten aus zu bekommen. Wenn Sie eine Web-Abfrage durchführen möchten, könnten Sie mit einem der oben genannten Dinge ausführen.

Alternativ - wenn Sie Ihre eigenen Daten haben, können Sie sie in der db mit lat und lon Werten speichern und dann ein begrenzendes Rechteck für eine Abfrage bilden. Diese Frage zeigt Ihnen, wie ein Begrenzungsfeld zu berechnen, die einen bestimmten Radius um den aktuellen Punkt deckt (es wird ein Feld, so dass es größer als ein Kreis sein ....

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

die Begrenzungs Verwenden Sie können jetzt eine Abfrage von Ihrem db where lat < maxlat and lat > minlat and lon > minlon and lon < maxlon, die Ihnen alle Ihre Punkte von Interesse innerhalb der Box geben wird.

Dann mit der Location-Klasse in der Android API, können Sie es erhalten, um die Peilung und Entfernung zu berechnen zu jedem der Treffer und dann könnten Sie zum Beispiel nach Radius von Ihrer Position aus sortieren

+0

Das ist eine große Hilfe. Angenommen, ich möchte meine eigenen Landmarken speichern und meinen eigenen Suchdienst implementieren; Wenn ich N Orientierungspunkte habe, würde ich eine O (N) Suche durch alle von ihnen machen müssen, um den nächsten zu finden. Gibt es eine Datenstruktur oder einen Ansatz, der diese Suche verbessern wird? Ich dachte an die Implementierung eines zweistufigen Baumes (eine Breitengradstufe, eine andere Längengradstufe) oder einen kd-Baum oder einen Quadtree. Irgendwelche Ideen? – stackoverflowuser2010

+0

Die Idee wäre, dass Sie auf lat und long indexieren, was bedeutet, dass alles innerhalb des Rechtecks ​​ziemlich schnell zu finden wäre. Wenn Sie das getan haben, haben Sie nur noch eine begrenzte Anzahl von Dingen, mit denen Sie arbeiten müssen. Sie könnten auch mit einem wirklich kleinen Rechteck beginnen und dann nach außen suchen (mit Ausnahme Ihres inneren Rechtecks), um weitere Ergebnisse hinzuzufügen, die Sie für notwendig erachten. – Fiid

+0

Zufällig - ich denke, dass echte Geo-Datenbanken mehr Cleverness über dieses Zeug haben. Ich habe eine Geosuche auf Android mit dieser Approcdh implementiert und es funktioniert ziemlich schnell. Meine App findet alle Flughäfen und Heliports in einem Umkreis von 50nm. – Fiid

2

Der schnellste Weg, dies zu tun ist:

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

Nach geo Sie Ihre Koordinaten setzen, und nach q = Eingabe Ihrer Suche tearms, wie Tourismus + Stadt. Dadurch wird die Google Maps App mit den Sonderzielen gestartet.

Wenn Sie eine Kartenansicht innerhalb Ihrer Anwendung verwenden möchten, müssen Sie die Daten von einem Dienst abrufen, z. B. Ihrem eigenen. Allerdings könnten Sie die Daten von Google Ajax-Suche wie folgt ziehen: Weitere Informationen hier: http://code.google.com/apis/ajaxsearch/documentation/reference.html#_fonje_local Dies wird Ihnen Ergebnisse geben, die Geokoordinaten haben und müssen Sie eine Möglichkeit zum Parsen der Ergebnisse und vielleicht bekommen sie in eine Datenbank.

+0

Danke. Ich möchte nicht unbedingt die nahegelegenen Points-of-Interest in Form einer Karte bekommen. Ich möchte es lieber in XML zurückgeben. – stackoverflowuser2010

+0

Nun, dann sollte die Ajax API für Sie arbeiten, aber ich denke, es funktioniert nur mit Json. –

1

Eine entwicklerfreundliche Datenquelle, die Sie verwenden können, ist http://compass.webservius.com - eine Datenbank mit Millionen von Brancheneinträgen in den USA, die mit einer Koordinatenbegrenzungsbox mithilfe einer REST-API leicht durchsucht werden kann.

1

Foursquare hat eine große API, die Ihnen Unternehmen und andere Orte von Interesse gegeben GPS-Koordinaten gibt. Benutzer müssen sich nicht anmelden, um darauf zugreifen zu können. Die Backing-Datenbank wird ständig von viereckigen Benutzern gepflegt.

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

+0

Rad. Danke für das Teilen. – Nick

Verwandte Themen