Hoy me ha tocado montar un administrador de áreas de actuación de una empresa para lo que tenemos una serie de geolocalizaciones y rango de kilómetros de influencia. Como el cliente no se sabe la longitud y latitud de las zonas, primero ha tocado gracias a la API de Google maps el calcular esas coordenadas.
var geocoder = new google.maps.Geocoder(); geocoder.geocode({ address : ' La dirección a buscar, España', region: 'no' }, function(results, status) { if (status.toLowerCase() == 'ok') { var _latitud = results[0]['geometry']['location'].lat(); var _longitud = results[0]['geometry']['location'].lng(); }else{ alert('La dirección especificada no se ha podido encontrar'); } } );
Y me he montado un objeto de JavaScript para dibujar un mapa de Google maps y permitir dibujar o eliminar círculos sobre él.
var obj_mapa = { mapa:null, circulos:[], init:function(){ var mapOptions = { zoom: 5, center: new google.maps.LatLng(39, -4) }; // cargamos el mapa en la capa #mapazonas this.mapa = new google.maps.Map(document.getElementById('mapazonas'), mapOptions); /* en caso de tener que cargar círculos desde el principio */ var _self = this; $('input[name="longitud[]"]').each(function(index){ var _long = $(this).val(); var _lat = $('input[name="latitud[]"]:eq('+index+')').val(); var _km = $('input[name="km_accion[]"]:eq('+index+')').val(); _self.add(_lat, _long, _km); }); }, add:function(latitud, longitud, km){ var populationOptions = { strokeColor: '#12805b', strokeOpacity: 0.8, strokeWeight: 1, fillColor: '#12805b', fillOpacity: 0.35, map: this.mapa, center: new google.maps.LatLng(latitud, longitud), radius: km * 1000 }; this.circulos.push(new google.maps.Circle(populationOptions)); }, del:function(index){ this.circulos[index+1].setMap(null); this.circulos.splice(index+1, 1); } };
Y para interactuar con la clase:
// para iniciar el mapa obj_mapa.init() // para añadir un nuevo circulo (se guardará dentro del array obj_mapa.circulos) obj_mapa.add(_latitud, _longitud, _kilometros_de_radio); // y por ultimo para borrarlo (el parmámetro _index sería la posición del mapa en el array obj_mapa.circulos) obj_del(_index)
Y por supuesto, incluir la API de google porque si no complicado esta que funcione…..
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
0 Comentarios.