2010-04-13 12 views
8

Acabo de comprar un teléfono inteligente Google Nexus One, y quiero escribir una pequeña aplicación de Android para divertirme. Supongamos que puedo obtener mis coordenadas de GPS actuales, entonces ¿cómo puedo encontrar lugares de interés o puntos de interés en algún radio dentro de un radio? ¿Hay una API para obtener puntos de referencia geo-etiquetados de GPS, como en la base de datos de Google Earth?Dadas las coordenadas GPS, ¿cómo encuentro lugares de interés cercanos o puntos de interés?

Por ejemplo, si estoy en el centro de Chicago, mi programa me indicaría todas las cosas "turísticas" para visitar en esa ciudad.

Idealmente, todo funcionaría en mi teléfono inteligente, pero si es necesario, puedo hacer que el teléfono inteligente consulte un servidor web, que luego ejecutará más consultas.

+0

No te ves en la API de Google Maps? – Jay

+0

Ya has sido golpeado al golpe; hay una aplicación llamada "Places Directory" escrita por Google que hace exactamente lo que describes. –

+0

@Daniel Lew No tengo la intención de escribir mi propia aplicación para su distribución. Solo quiero probar diferentes API. – stackoverflowuser2010

Respuesta

3

depende de dónde está obteniendo los datos de punto de referencia a partir. Si desea hacer una consulta web, puede ejecutar con una de las cosas anteriores.

Alternativamente, si tiene sus propios datos, puede esconderlos en el archivo db con valores lat y lon y luego formar un rectángulo delimitador para una consulta. Esta pregunta le indica cómo calcular un cuadro delimitador que cubre un radio determinado alrededor de su punto actual (que será una caja, por lo que será más grande que un círculo ....

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

Utilizando el delimitador caja, ahora se puede hacer una consulta desde su base de datos where lat < maxlat and lat > minlat and lon > minlon and lon < maxlon que le dará todos sus puntos de interés dentro de la caja.

Luego, utilizando la clase ubicación en la API de Android, lo puede conseguir para calcular el rumbo y la distancia a cada uno de los éxitos y luego podría, por ejemplo, ordenar por radio desde su posición.

+0

Esto una gran ayuda. Supongamos que quiero almacenar mis propios puntos de referencia e implementar mi propio servicio de búsqueda; si tengo N puntos de referencia, tendría que hacer una O (N) búsqueda a través de todos ellos para encontrar el más cercano. ¿Hay una estructura o enfoque de datos que mejorará con esta búsqueda? Estaba pensando en implementar un árbol de dos niveles (un nivel de latitud, otro nivel de longitud) o un kd-tree o un quadtree. ¿Algunas ideas? – stackoverflowuser2010

+0

La idea sería indexar en lat y long, lo que significa que encontrar todo dentro del rectángulo sería bastante rápido. Una vez hecho esto, solo tienes un conjunto limitado de cosas que tienes que hacer O (n) trabajar. También podría comenzar con un rectángulo realmente pequeño y luego consultar hacia afuera (excluyendo su rectángulo interno) para agregar más resultados según lo considere necesario. – Fiid

+0

Incidentemente - Creo que las bases de datos geográficas reales tienen más inteligencia sobre estas cosas. Implementé una búsqueda geográfica en Android usando este documento pero funciona razonablemente rápido. Mi aplicación encuentra todos los aeropuertos y helipuertos en un radio de 50 nm. – Fiid

2

La forma más rápida de hacerlo es:

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

Después de geo poner sus coordenadas, y después de q = Ha ingresado la búsqueda tearms, como el turismo + ciudad. Esto activará la aplicación Google Maps con los puntos de interés.

Si desea utilizar una vista de mapas dentro de su aplicación, deberá obtener los datos de algún servicio, como el suyo. Sin embargo, podría extraer los datos de la búsqueda de Ajax de Google de la siguiente manera: http://ajax.googleapis.com/ajax/services/search/local?v=1.0&rsz=large&gl=pl&q=tourism+chicago Más información aquí: http://code.google.com/apis/ajaxsearch/documentation/reference.html#_fonje_local Esto le dará resultados que tienen coordenadas geográficas y tendría que hacer una forma de analizar los resultados y quizás obtenerlos en una base de datos.

+0

Gracias. No quiero necesariamente obtener los puntos de interés cercanos en la forma de un mapa. Prefiero simplemente devolverlo en XML. – stackoverflowuser2010

+0

Bueno, entonces la api ajax debería funcionar para usted, pero creo que solo funciona con json. –

1

Una fuente de datos amigable para desarrolladores que puede usar es http://compass.webservius.com - es una base de datos de millones de listados de negocios en los EE. UU., Fácilmente se puede buscar con un cuadro delimitador de coordenadas utilizando una API REST.

1

Foursquare tiene una gran API que le proporciona negocios y otros lugares de interés gracias a las coordenadas de GPS. No requiere que el usuario inicie sesión para acceder. La base de datos de respaldo es constantemente mantenida por usuarios de foursquare.

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

+0

Rad. Gracias por compartir. – Nick

Cuestiones relacionadas