2011-03-02 15 views
21

Creé un mapa donde un usuario ingresa un código postal y un radio (millas) y quiero que el mapa se centre en el punto creado a partir del código postal y solo muestre (más o menos) el área que estaría dentro de ese radio. Estoy creando un círculo con el radio e intentando que el mapa se ajuste a ese círculo. En este momento se centra correctamente, pero el área que se muestra es mucho más que el radio dado.Google Maps API v3 ¿estableció el nivel de zoom para mostrar un radio dado?

me.center_map = function(latlng, r) 
{ 
    // latlng is the point of the zipcode 
    var circ = new google.maps.Circle(); 
    circ.setRadius(r * 1609.0); 
    circ.setCenter(latlng); 
    map.setCenter(latlng); 
    map.fitBounds(circ.getBounds()); 

    // updates markers 
    google.maps.event.trigger(map,'dragend'); 
}; 

EDIT: dibujó el círculo que estoy usando. Idealmente, el mapa se acercaría al área dentro del radio.

enter image description here

Respuesta

21

La llamada a fitBounds() el zoom al nivel de zoom más pequeño que contiene plenamente los límites. Si tuviera que acercar un nivel de zoom más, el radio no estaría completamente contenido dentro del mapa.

+0

+1 Yeap.The problema es una función de zoom no continua –

+3

Sí que se necesita algo que puede representar un nivel de zoom parcial, por ejemplo en lugar de z = 11 necesitaría z = 11.5 – Alex

+0

Alex: el valor del zoom es un número entero, no coma flotante ... –

3
map.setZoom(map.getZoom() + 1); 

Por supuesto, esto depende de lo bien que el radio de ajuste en particular (en caso de que no siempre es el mismo)

para mostrar el área dentro del círculo que uno necesita para construir un rectángulo que tiene su esquinas de la el perímetro del círculo y ajustar la ventana gráfica del mapa a sus límites.

E.g. dibujando un círculo visible y un rectángulo transparente con el mismo punto central debería funcionar como se describe en la op.

0

Desde junio de 2017, el método fitBounds tiene un segundo parámetro que representa el tamaño del relleno. Para aquellos que quieren eliminarlo, sólo tiene que pasar a 0.

Map.map.fitBounds(bounds, 0); 

Nueva firma del método:

fitBounds(bounds:LatLngBounds|LatLngBoundsLiteral, padding?:number) 
Cuestiones relacionadas