Google map Integration using JavaScript API

edited October 2023 in PHP

The provided script is an example of map integration using the Google Maps JavaScript API

It creates an interactive map with the ability to:

  1. Display the user's location using geolocation.
  2. Allow the user to drag and move the map.
  3. Update the address and location fields based on the map's center or marker's position.
  4. Provide a "Locate Me" button to center the map on the user's current location.

code:

<script src="https://maps.googleapis.com/maps/api/js?signed_in&key=AIzaSyAA2ukvrb1kWQZ2dttsNIMynLJqVCYYrhw"></script>

<script>

    var map;

    var marker;

    var geocoder;

    var locField;

    var latField;

    var lngField;

    var locateMeBtn = document.getElementById("locateMeBtn");

    var isMapMoving = false;

    var updateTimeout;




    function initMap() {

        locField = document.getElementById("loc");

        latField = document.getElementById("lat");

        lngField = document.getElementById("lng");

        locateMeBtn.addEventListener("click", locateMe);

        if ("geolocation" in navigator) {

            navigator.geolocation.getCurrentPosition(function (position) {

                var userLocation = {

                    lat: position.coords.latitude,

                    lng: position.coords.longitude

                };

                map = new google.maps.Map(document.getElementById('map'), {

                    zoom: 18,

                    center: userLocation

                });

                marker = new google.maps.Marker({

                    position: userLocation,

                    map: map,

                    title: 'Your Location',

                    animation: google.maps.Animation.DROP,

                    draggable: true

                });

                geocoder = new google.maps.Geocoder();

                geocoder.geocode({

                    'location': userLocation

                }, function (results, status) {

                    if (status === google.maps.GeocoderStatus.OK && results[0]) {

                        var formattedAddress = results[0].formatted_address;

                        locField.value = formattedAddress;

                        updateLocationFields(results[0].geometry.location);

                    } else {

                        locField.value = 'Geocoding failed: ' + status;

                        console.log("Geocoding failed: " + status);

                    }

                });

                google.maps.event.addListener(map, 'dragstart', function () {

                    isMapMoving = true;

                });

                google.maps.event.addListener(map, 'dragend', function () {

                    isMapMoving = false;

                    clearTimeout(updateTimeout);

                    updateTimeout = setTimeout(updateAddress, 200);

                });

                google.maps.event.addListener(marker, 'dragend', function () {

                    clearTimeout(updateTimeout);

                    updateTimeout = setTimeout(updateAddress, 200);

                });

                google.maps.event.addListener(map, 'drag', function () {

                    marker.setPosition(map.getCenter());

                });

            }, function (error) {

                console.error("Geolocation error: " + error.message);

                setDefaultLocation();

            });

        } else {

            setDefaultLocation();

        }

    }




    function updateAddress() {

        if (!isMapMoving && marker) {

            var markerPosition = marker.getPosition();

            var geocoder = new google.maps.Geocoder();

            geocoder.geocode({

                'location': markerPosition

            }, function (results, status) {

                if (status === google.maps.GeocoderStatus.OK && results[0]) {

                    var formattedAddress = results[0].formatted_address;

                    locField.value = formattedAddress;

                } else {

                    console.log("Geocoding failed: " + status);

                }

            });

        }

    }




    function locateMe() {

        if ("geolocation" in navigator) {

            navigator.geolocation.getCurrentPosition(function (position) {

                var userLocation = {

                    lat: position.coords.latitude,

                    lng: position.coords.longitude

                };

                map.setCenter(userLocation);

                marker.setPosition(userLocation);

                updateAddress();

            }, function (error) {

                console.error("Geolocation error: " + error.message);

                setDefaultLocation();

            });

        } else {

            alert("Geolocation is not supported in this browser.");

        }

    }




    function setDefaultLocation() {

        var defaultLocation = {

            name: 'Main branch',

            lat: 17.4386235,

            lng: 78.4387877,

            info: 'Move the map to adjust your location'

        };

        locField = document.getElementById("loc");

        map = new google.maps.Map(document.getElementById('map'), {

            zoom: 18,

            center: {

                lat: defaultLocation.lat,

                lng: defaultLocation.lng

            },

            draggable: true

        });

        marker = new google.maps.Marker({

            position: {

                lat: defaultLocation.lat,

                lng: defaultLocation.lng,

            },

            map: map,

            title: defaultLocation.name,

            animation: google.maps.Animation.DROP,

            draggable: true

        });

        google.maps.event.addListener(map, 'drag', function () {

            marker.setPosition(map.getCenter());

        });

        google.maps.event.addListener(map, 'dragend', function () {

            updateAddress();

        });

        google.maps.event.addListener(marker, 'dragend', function () {

            updateAddress();

        });

        updateLocationFields(new google.maps.LatLng(defaultLocation.lat, defaultLocation.lng));

    }




    function updateLocationFields(location) {

        latField.value = location.lat();

        lngField.value = location.lng();

        var geocoder = new google.maps.Geocoder();

        geocoder.geocode({

            'location': location

        }, function (results, status) {

            if (status === google.maps.GeocoderStatus.OK && results[0]) {

                var formattedAddress = results[0].formatted_address;

                locField.value = formattedAddress;

                var postalCode = extractPostalCode(results[0].address_components);

                document.getElementById("pincode").value = postalCode;

            } else {

                locField.value = 'Geocoding failed: ' + status;

                console.log("Geocoding failed: " + status);

            }

        });

    }

    (function () {

        initMap();

    })();

</script>
Sign In or Register to comment.