2010-04-13 9 views
8

Je viens d'acheter un smartphone Google Nexus One, et je veux écrire une petite application Android pour le plaisir. Supposons que je puisse obtenir mes coordonnées GPS actuelles, alors comment puis-je trouver par programmation des points de repère à proximité ou des points d'intérêt dans un rayon? Existe-t-il une API pour obtenir des repères GPS géolocalisés, comme dans la base de données de Google Earth? Par exemple, si je suis au centre-ville de Chicago, mon programme m'indiquerait toutes les choses «touristiques» à visiter dans cette ville.Compte tenu des coordonnées GPS, comment trouver des points de repère ou des points d'intérêt à proximité?

Idéalement, tout fonctionnerait sur mon smartphone, mais si nécessaire, je peux demander au smartphone d'interroger un serveur Web, ce qui entraînerait plus de requêtes.

+0

Avez-vous regardé les cartes google api? – Jay

+0

Vous avez déjà été battu au coup de poing; il y a une application appelée "Répertoire des lieux" écrite par Google qui fait exactement ce que vous décrivez. –

+0

@Daniel Lew Je n'ai pas l'intention d'écrire ma propre application pour la distribution. Je veux juste essayer différentes API. – stackoverflowuser2010

Répondre

3

dépend où vous obtenez vos données historiques à partir. Si vous souhaitez effectuer une requête Web, vous pouvez exécuter l'une des opérations ci-dessus.

Alternativement - si vous avez vos propres données, vous pouvez les stocker dans la base de données avec les valeurs lat et lon, puis former un rectangle de délimitation pour une requête. Cette question vous indique comment calculer un cadre de sélection qui couvre un rayon donné autour de votre point courant (ce sera une boîte, il sera plus grand qu'un cercle ....

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

Utilisation de la délimitation boîte, vous pouvez maintenant faire une requête à partir de votre db where lat < maxlat and lat > minlat and lon > minlon and lon < maxlon qui vous donnera tous vos points d'intérêt dans la boîte

Puis, en utilisant la classe Location dans l'API Android, vous pouvez l'obtenir pour calculer le relèvement et la distance à chacun des hits, vous pouvez par exemple trier par rayon à partir de votre position

+0

Ceci est une aide précieuse. Supposons que je souhaite stocker mes propres repères et implémenter mon propre service de recherche. si j'ai N points de repère, je devrais faire une recherche O (N) à travers chacun d'eux pour trouver le plus proche. Y a-t-il une structure de données ou une approche qui améliorera cette recherche? Je pensais à implanter un arbre à deux niveaux (un niveau de latitude, un autre niveau de longitude) ou un arbre kd ou un arbre quadri. Des idées? – stackoverflowuser2010

+0

L'idée serait que vous indexiez lat et long, ce qui signifie que trouver tout dans le rectangle serait assez rapide. Après avoir fait cela, vous n'avez alors qu'un ensemble limité de choses que vous devez faire travailler avec O (n). Vous pouvez également commencer avec un très petit rectangle, puis interroger vers l'extérieur (à l'exclusion de votre rectangle intérieur) pour ajouter plus de résultats que vous le jugiez nécessaire. – Fiid

+0

Incidently - Je pense que les bases de données géographiques réelles ont plus d'intelligence sur ce genre de choses. J'ai mis en place une recherche géographique sur Android en utilisant cette approche et cela fonctionne assez rapidement. Mon application trouve tous les aéroports et héliports dans un rayon de 50nm. – Fiid

2

La meilleure façon de le faire est la suivante:

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

Après geo vous mettez vos coordonnées, et après q = vous entrez votre recherche tearms, comme le tourisme + ville. Cela lancera l'application Google Maps avec les points d'intérêt.

Si vous souhaitez utiliser une vue de cartes dans votre application, vous devez obtenir les données d'un service, comme le vôtre. Cependant, vous pouvez extraire les données de la recherche ajax de Google comme ceci: http://ajax.googleapis.com/ajax/services/search/local?v=1.0&rsz=large&gl=pl&q=tourism+chicago Plus d'infos ici: http://code.google.com/apis/ajaxsearch/documentation/reference.html#_fonje_local Cela vous donnera des résultats qui ont des géo-coordonnées et vous auriez besoin de faire un moyen d'analyser les résultats et peut-être les obtenir dans un base de données.

+0

Merci. Je ne veux pas nécessairement obtenir les points d'intérêt à proximité sous la forme d'une carte. Je préférerais juste le renvoyer en XML. – stackoverflowuser2010

+0

Eh bien, l'API Ajax devrait fonctionner pour vous, mais je pense que cela ne fonctionne qu'avec JSON. –

1

Une source de données conviviale pour les développeurs que vous pouvez utiliser est http://compass.webservius.com - c'est une base de données de millions de listes d'entreprises aux États-Unis, facilement consultable avec un cadre de coordonnées à l'aide d'une API REST.

1

Foursquare a une API géniale qui vous donne les entreprises et autres lieux d'intérêt donnés coordonnées GPS. Ne nécessite pas de connexion de l'utilisateur pour accéder. La base de données de sauvegarde est constamment maintenue par les utilisateurs de foursquare.

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

+0

Rad. Merci d'avoir partagé. – Nick

Questions connexes