studio setinfowindowadapter infowindowadapter google example custom google-maps gpolygon

setinfowindowadapter - ¿Cómo consigo que Google Maps muestre un polígono completo?



infowindowadapter example android (5)

Escribí una función para agregar a la solución de Kevin James. toma una matriz de polígonos y obtiene los límites para todos los polígonos que pueda tener en su mapa. solo necesita empujarlos en una matriz y luego puede llamar a mi función para hacer zoom automático en el mapa.

function getArrayBounds(polyArray){ var bounds = new google.maps.LatLngBounds(); var path, paths; for(var polys = 0; polys < polyArray.length; polys++) { paths = polyArray[polys].getPaths(); for (var i = 0; i < paths.getLength(); i++) { path = paths.getAt(i); for (var ii = 0; ii < path.getLength(); ii++) { bounds.extend(path.getAt(ii)); } } } return bounds; }

Tengo un conjunto de objetos GPolygon que se adjuntan a los objetos en mi modelo de dominio y se agregan a un mapa en mi página. Los objetos del dominio se muestran en una lista en la misma página y cuando el usuario hace clic en uno de ellos, quiero mostrar el polígono asociado.

Quiero que se muestre todo el polígono e idealmente quiero que el mapa se centre en el centro del polígono.

Esperaba que hubiera una llamada a la API de mapas a lo largo de las líneas de ...

myMap.makeSureYouCanSeeAllThisPolygon(aPolygon);

pero no he podido encontrar uno.

Si tengo que hacer esto manualmente, obviamente puedo averiguar el centrado fácilmente, pero ¿cómo puedo averiguar el zoom?


Esta solución funcionó para los polígonos que ya agregué con éxito al mapa. Agregar el método getBounds () para la clase google.maps.Polygon y luego usar map.fitBounds (myPolygon.getBounds ());


La API de Google Maps v3 no admite de forma nativa un método getBounds() para la clase google.maps.Polygon. Esto parece extraño dado el hecho de que la clase google.maps.Map tiene un método fitBounds() , que es exactamente lo que está buscando. Si usa la API de Google Maps con cualquier tipo de frecuencia, esto debería estar en su bolsa de trucos ::

getBounds() para la clase google.maps.Polygon

google.maps.Polygon.prototype.getBounds = function() { var bounds = new google.maps.LatLngBounds(); var paths = this.getPaths(); var path; for (var i = 0; i < paths.getLength(); i++) { path = paths.getAt(i); for (var ii = 0; ii < path.getLength(); ii++) { bounds.extend(path.getAt(ii)); } } return bounds; }

Tener este método a la mano hace que sea muy sencillo centrar y ajustar un polígono en el mapa.

Nota: si no está familiarizado con getAt() y getLength() está bien, son métodos exclusivos de la clase google.maps.MVCArray. Cuando llama al método getPaths() de un polígono, devuelve su matriz de LatLng''s como un MVCArray mutable de LatLng''s. Puede obtener información sobre MVCArrays aquí: la clase MVCArray de Google Maps v3 API .

Seguir adelante Aquí está el marco, tendrás que implementar el método prototipado anterior en algún lugar antes de este próximo bit de código.

var map = new google.maps.Map(container, opts); // I''ll spare the details on this var coords = [ new google.maps.LatLng(25.774252, -80.190262) ,new google.maps.LatLng(18.466465, -66.118292) ,new google.maps.LatLng(32.321384, -64.75737) ,new google.maps.LatLng(25.774252, -80.190262) ]; var myPolygon = new google.maps.Polygon({ paths: coords ,strokeColor: "#A80000" ,strokeOpacity: 0.8 ,strokeWeight: 1 ,fillColor: "#0b2a32" ,fillOpacity: 0.12 });

Con el escenario establecido, todo lo que tendrías que hacer para centrar y hacer zoom en este (o cualquier otro) polígono es:

map.fitBounds(myPolygon.getBounds());

Corto y dulce. Espero que ayude.

-Kevin James


Puede obtener el punto central de un polígono utilizando aPolygon.getBounds().getCenter(); y luego usar el GLatLng devuelto con el método myMap.setCenter() .

Para obtener el nivel de zoom, puede usar myMap.getBoundsZoomLevel(aPolygon.getBounds()); luego use esto con el método myMap.setZoom() .


piensa que él

map.fitBounds(myPolygon.my_getBounds());

trabaja una golosina