viernes, 31 de mayo de 2019

JavaScript Google Maps mostrar Markers con click

Como mostrar Markers en un mapa de Google Maps on click.


Hola.

Estoy colocando un mapa de Google en una sección de mi aplicación web. Estoy usando la API de Google Maps para mostrar todas las ubicaciones al usuario en un solo mapa.

La idea es crear un arreglo en javascript con todas las ubicaciones en latitud y longitud y crear markers para visualizarlos en el mapa de google.

Google Maps ofrece la oportunidad de crear Markers con JavaScript.

Mi arreglo se ve así y se encuentra en un archivo externo con extension js:

var marcadores = [[1,'Descripcion del marcador 1',-16.494213, -68.136466,2629],
[2,'Descripcion del marcador 2',-16.653139, -68.301835,3354],
[3,'Descripcion del marcador 3',-19.036393, -65.255528,2630],
[4,'Descripcion del marcador 4',-21.427691, -64.754212,2631]]

El orden del arreglo es [id, descripción, latitud, longitud, zindex]

La inclusion del mapa se ve así con un div con id definido para después asociarle un objeto Mapa de Google Maps con la función initMap :

<div id="map" class="mapa-ubicacion"></div>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=xxx&callback=initMap"></script>  

Lo siguiente es definir los marcadores y relacionarlos con el mapa con Javascript. También defino la función que mueve el mapa cuando se hace click. Esto lo hago de la siguiente manera.

<script>
        var markers = [];
        function initMap() {            
            var mapDiv = document.getElementById('map');
            var map = new google.maps.Map(mapDiv, {
                zoom: 16,
                center: { lat: -16.497789, lng: -68.125839 }
            });
            setMarkers(map);

            infoWindow = new google.maps.InfoWindow;

            // Try HTML5 geolocation.
            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(function (position) {
                    var pos = {
                        lat: position.coords.latitude,
                        lng: position.coords.longitude
                    };

                    infoWindow.setPosition(pos);
                    infoWindow.setContent('Lugar encontrado.');
                    infoWindow.open(map);
                    map.setCenter(pos);
                }, function () {
                    handleLocationError(true, infoWindow, map.getCenter());
                });
            } else {
                // Browser doesn't support Geolocation
                handleLocationError(false, infoWindow, map.getCenter());
            }

        }

        function handleLocationError(browserHasGeolocation, infoWindow, pos) {
            infoWindow.setPosition(pos);
            infoWindow.setContent(browserHasGeolocation ?
                              'Error: Ha ocurrido un error con el servicio de geolocalizacion.' :
                              'Error: El navegador no soporta el servicio de geolocalizacion.');
            infoWindow.open(map);
        }

        function setMarkers(map) {
            // Adds markers to the map.
           
            for (var i = 0; i < marcadores.length; i++) {
                var marcador = marcadores[i];                
                var marker = new google.maps.Marker({
                    position: { lat: marcador[2], lng: marcador[3] },
                    map: map,                                        
                    title: marcador[1],
                    zIndex: marcador[4],
                    id:marcador[0]
                });

                marker.addListener('click', function () {
                    
                    map.panTo(this.getPosition());
                    infoWindow.setContent(this.title);
                    infoWindow.open(map, this);
                    map.setZoom(20);                 
                });

                markers[marker.id] = marker;                               

            }//end for
        }

        function verMarcador(markerID) {
             google.maps.event.trigger(markers[markerID], 'click');             
        }

    </script>


De este código deben llamar a la última función verMarcador desde una liga externa al mapa. Esto generalmente es el listado de ligas de marcadores que viene de la base de datos y que comparte el mismo id que los marcadores. A fin de cuentas, el listado y el arreglo, deben estar relacionados por algún dato que generalmente es el ID.

Las ligas que llaman a la función verMarcador y generan el cambio en el mapa se ven así:

<a href="javascript:verMarcador(2);">Mi marcador 2</a>
<a href="javascript:verMarcador(3);">Mi marcador 3</a>

Con esto ya deben poder hacer click sobre la liga fuera del mapa y provocar que el mapa muestre la ubicación seleccionada.

Tomé la referencia de aquí:
https://stackoverflow.com/questions/49347441/javascript-google-maps-and-marker-referencing-with-id


Espero les sirva.

jueves, 30 de mayo de 2019

Rango de años con jQuery Datepicker

Como poner un rango de años en jQuery Datepicker.


Hola.

Estuve armando un formulario de captura que incluye un campo de fecha, en realidad estoy dividiendo el campo de fecha en tres combos para año, mes y día.

Como el formulario es para capturar la fecha de nacimiento del usuario, necesito establecer un rango en el combo de años permitidos para evitar datos no reales.

Estoy usando jQuery Datepicker y necesito establecer un rango para el combo de años permitidos.

En mi caso quiero mostrar desde 70 años atrás hasta el año actual.

Deben user la propiedad yearRange de jQuery Datepicker. Hay dos maneras comunes de hacerlo:

1.- Para especificar el rango de años constante.

yearRange: '1950:2020'

2.- Para especificar el rango de años relativo al año actual.

yearRange: '-70:+0'

Así es como queda mi campo cuando establezco el DatePicker al input.

$("#FECHANAC.datepicker").datepicker({dateFormat:'dd/mm/yy',changeMonth:true,changeYear:true,yearRange:'-70:+0'});


Espero les sirva.