javascript - marcar - ¿Cómo obtener API de Google Maps para establecer el nivel de zoom correcto para un país?
google maps api key (4)
Para API v3, compruebe la respuesta a continuación.
Puede usar el geocodificador del lado del cliente de Google Maps para obtener el cuadro delimitador del país, como en el siguiente ejemplo:
// API version 2
var geocoder = new GClientGeocoder();
geocoder.getLocations("Russia", function (locations) {
var north = locations.Placemark[0].ExtendedData.LatLonBox.north;
var south = locations.Placemark[0].ExtendedData.LatLonBox.south;
var east = locations.Placemark[0].ExtendedData.LatLonBox.east;
var west = locations.Placemark[0].ExtendedData.LatLonBox.west;
var bounds = new GLatLngBounds(new GLatLng(south, west),
new GLatLng(north, east));
map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
});
// API version 3
// ... set north, south, east and west ...
var bounds = new google.maps.LatLngBounds(new google.maps.LatLng(south, west),
new google.maps.LatLng(north, east));
map.fitBounds(bounds);
Las capturas de pantalla a continuación muestran los resultados de la técnica anterior al buscar Rusia y Cuba:
¿Existe una necesidad de establecer automáticamente el nivel de zoom en función del tamaño del país en el que se ha centrado el mapa?
maps.google.com hace exactamente lo que necesito, así que, por ejemplo, si busco Rusia obtengo un nivel de zoom tal que Rusia solo se ajusta a la pantalla, y cuando busco Cuba obtengo un nivel de zoom más alto para que Cuba simplemente encaja.
¿Hay alguna forma de darle al Maps Api una ubicación de país y obtener un nivel de zoom apropiado?
Si no, supongo que tendría que crear manualmente (¡uf!) Mi propia tabla para esta información. ¿O esta información está disponible de forma gratuita en alguna parte?
Para V3 este código funcionó para mí:
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { ''address'': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
map.fitBounds(results[0].geometry.viewport);
}
});
Si no desea utilizar el cliente de geocoder de Google, debido a limitaciones de uso, puede usar su propia lista. Puedes obtener uno de este repositorio github .
Aquí hay un ejemplo de código que usa la función getJSON de jQuery y la API v3 de google maps:
function initialize() {
// read the list of countries
$.getJSON(''countries.json'', function (countries) {
// will use the country with index 40 (Cyprus)
var index_country = 40;
var myOptions = {
center: new google.maps.LatLng(
countries[index_country].center_lat,
countries[index_country].center_lng),
}
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
// set the bounds of the map
var bounds = new google.maps.LatLngBounds(
new google.maps.LatLng(countries[index_country].sw_lat, countries[index_country].sw_lng),
new google.maps.LatLng(countries[index_country].ne_lat, countries[index_country].ne_lng) );
map.fitBounds(bounds);
});
}
Si no utiliza la API de Google Maps y solo usa su geocodificación, puede usar esta fórmula:
var url = ''http://maps.google.com/maps/geo?q=YOUR_QUERY&output=json&oe=utf8&sensor=false&key=YOUR_KEYback=geoCodeDone'';
jQuery.getScript(url);
function geoCodeDone(data)
{
if (data.Status.code == 200)
{
lng = data.Placemark[0].Point.coordinates[0];
lat = data.Placemark[0].Point.coordinates[1];
var east = data.Placemark[0].ExtendedData.LatLonBox.east;
var west = data.Placemark[0].ExtendedData.LatLonBox.west;
var zoom = 11 - Math.round(Math.log(Math.abs(west-east))/Math.log(2));
}
}