2008-11-23 12 views
6

Tengo algunos problemas con la API de Google Maps; Quiero determinar un LatLong para un lugar determinado (por ejemplo, desde el nombre de una ciudad) y luego centrar mi mapa en él. La parte LatLong está funcionando, y también está centrando el mapa en ese punto. Sin embargo, no puedo encontrar la forma de determinar qué tan bueno puede ser el nivel de zoom cuando solo tengo ese único punto. No puedo ir a un nivel de zoom estándar que se vea bien la mayor parte del tiempo, porque ¿qué sucede cuando el usuario ingresa "Rusia" en lugar de "Amsterdam", por ejemplo? Alguna ayuda sería apreciada :)Determinación del nivel de zoom desde un único LatLong en la API de Google Maps

Respuesta

1

Tuve la misma pregunta, y la respuesta de Nick Retallack fue lo que funcionó para mí. Para proporcionar más detalles, el nombre de la propiedad no documentada es "ExtendedData", y dentro de eso tiene "LatLonBox" que contiene los límites norte, sur, este y oeste del nivel de zoom apropiado.

Por ejemplo, si tuviera que hacer una búsqueda de "90210", aquí está la salida (que he formateado para facilitar la lectura):

{ 
    "id":"p1", 
    "address":"Beverly Hills, CA 90210, USA", 
    "AddressDetails":{ 
     "Accuracy":5, 
     "Country":{ 
      "AdministrativeArea":{ 
       "AdministrativeAreaName":"CA", 
       "SubAdministrativeArea":{ 
        "Locality":{ 
         "LocalityName":"Beverly Hills", 
         "PostalCode":{"PostalCodeNumber":"90210"} 
        }, 
        "SubAdministrativeAreaName":"Los Angeles" 
       } 
      }, 
      "CountryName":"USA", 
      "CountryNameCode":"US" 
     } 
    }, 
 // This is what you're looking for 
    "ExtendedData":{ 
     "LatLonBox":{ 
      "north":34.13919, 
      "south":34.067018, 
      "east":-118.38971, 
      "west":-118.442796 
     } 
    }, 
"Point":{ 
     "coordinates":[-118.4104684,34.1030032,0] 
    } 
} 

Este Sin embargo, no está documentado, por lo que no estoy seguro de si sobrevivirá a los cambios de API. Lo mejor es no asumir que siempre estará ahí, y definir algún valor de zoom predeterminado razonable.

1

A su pregunta le falta un parámetro de entrada. Está diciendo LatLon point, pero en realidad necesita LatLonBounds para enfocar el tamaño de ventana de mapa disponible. Supongo que quieres imitar el comportamiento oficial del mapa de Google. Además de la geocodificación, dependen de otros datos a los que no tiene acceso la API de Gmap. Entonces debes proporcionar la tuya.

1

La siguiente llamada le dará el nivel de zoom si se puede proporcionar con un objeto límites rectangulares apropiado:

GMap2.getBoundsZoomLevel(bounds) 

Pero la forma de calcular los límites?

Puede anotar manualmente cada registro fuente con un rectángulo determinado "a ojo" utilizando un mapa y que alguien escriba los valores.

Lo ideal es que desee datos, y por suerte hay una gran cantidad de datos sobre DBPedia.

Mi geometría y álgebra están un poco oxidadas, pero con un poco de ambas estoy seguro de que puede calcular un rectángulo dado el área de la ubicación que desea ver. (Tal vez comenzar con la raíz cuadrada, si asumiendo una ciudad cuadrada, o reorganizar πr si se supone que uno circular)

Try out esta consulta para extraer las áreas de las regiones.

PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX dbpedia2: <http://dbpedia.org/property/> 
SELECT ?url, ?label, ?lat, ?long, ?area WHERE { 
    ?url geo:lat ?lat . 
    ?url geo:lat ?long . 
    ?url rdfs:label ?label . FILTER (lang(?label) = 'en') . 
    ?url dbpedia2:area ?area . FILTER (datatype(?area) = xsd:double) 
} LIMIT 10 

Usted necesitará para almacenar en caché los resultados o cargarlos en una fuente de datos más rápida y local, como es la búsqueda DBPedia millones de triples de datos no estructurados (así datos RDF). Puede download the Titles, Infobox and coordinates data sets de DBPedia y cargarlos en, por ejemplo, Jena. Recuerde desactivar todas las opciones de validación durante la carga :-)

También puede acceder a estos datos utilizando un RESTful API que tiene un formulario web bastante utilizable, y es posible extraer la URL generando usando "Copiar botón de enlace de descarga" en la ventana de descargas de firefox, o establecer el formato de salida a HTML. También genera XML y JSON.

No se olvide de añadir un margen para las ciudades en forma tambaleante ...

2

simplemente hice esta pregunta en el Google IO. Esta característica existe, pero no está documentada y aún no tiene acceso para ella. Lo que quiere hacer es obtener el Structured Address. Inspecciona la estructura JSON que recuperas y busca estos nuevos parámetros. Publicaré más información cuando tenga la oportunidad de probar esto.

0

¿Obtiene sus puntos de ubicación del Geocoder? Si es así, puede tomar la precisión del punto y basar su zoom en eso (mayor precisión = mayor zoom).

0

que tenían el mismo problema here, pero con una versión de la API más reciente. La nueva solución es map.fitBounds(autocomplete.getPlace().geometry.viewport);.

Cuestiones relacionadas