Tuesday, 22 May 2018

google maps - how to get co-ordinates for drawing buildings

This will let you draw shapes on the satellite picture and then output the lat lng coordinates of each point of the line. Those co-ordinates can then be saved and used by something else to draw shapes on maps.

This needs the drawing library! Make sure it is on the end of the link to the google maps api e.g. <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=drawing">

Open up the dev tools and after drawing a rectangle, set of lines or a point it should output the co-ordinates to the console.

<body>
    <div id="map"></div>
    <script>

        function initMap() {
            var uluru = {
                lat: -39.072474,
                lng: 174.055992
            };
            var map = new google.maps.Map(document.getElementById('map'), {
                center: uluru,
                zoom: 17,
                mapTypeId: 'satellite'
            });
           
            // this creates the base options for the drawings (polygons/buildings)
            var drawingManager = new google.maps.drawing.DrawingManager({
                drawingMode: google.maps.drawing.OverlayType.MARKER,
                drawingControl: true,
                drawingControlOptions: {
                    position: google.maps.ControlPosition.TOP_CENTER,
                    drawingModes: ['marker', 'circle', 'polygon', 'polyline', 'rectangle']
                },
                markerOptions: {
                    icon: 'https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png'
                },
                rectangleOptions: {
                    fillOpacity: 0
                },
                circleOptions: {
                    //fillColor: '#ffff00',
                    fillOpacity: 1,
                    strokeWeight: 5,
                    clickable: false,
                    editable: true,
                    zIndex: 1
                }
            });
            drawingManager.setMap(map);

            // this just outputs the coordinates once a polygon is drawn on the screen
            google.maps.event.addListener(drawingManager, 'overlaycomplete', function (event) {
                console.log(event.type);
                if (event.type == 'rectangle') {
                    var ne = event.overlay.getBounds().getNorthEast();
                    var sw = event.overlay.getBounds().getSouthWest();

                    var bounds = "ne: " + ne.lat() + ", sw: " + sw.lat() + ", ne: " + ne.lng() + ", sw: " + sw.lng();
                    console.log(bounds);
                }
                if (event.type == 'polyline') {
                    //var radius = event.overlay.getRadius();
                    var coordinatesArray = event.overlay.getPath().getArray();
                    var allCoordinates = "";
                    for (var i = 0; i < coordinatesArray.length; i++) {
                        //console.log("new google.maps.LatLng(" + coordinatesArray[i].lat() + ", " + coordinatesArray[i].lng() + "),");
                        var coord = "{lat: " + coordinatesArray[i].lat() + ", lng: " + coordinatesArray[i].lng() + "},";
                        allCoordinates = allCoordinates + coord;
                    }
                    console.log(allCoordinates);
                }
                if (event.type == 'marker') {
                    var lat = event.overlay.getPosition().lat();
                    var lng = event.overlay.getPosition().lng();
                    var coord = "{lat: " + lat + ", lng: " + lng + "},";
                    console.log(coord);
                }
               
            });
        }
    </script>
    <script src="https://maps.googleapis.com/maps/api/js?key=[your key here]&libraries=drawing&callback=initMap" async defer></script>
</body>

wow. After you've got the coords and drawn some polygons based off them you can edit the lines by setting editable to true and adding a listener to the path you've created and output the new co-ordinates. This allows for fine tuning of the points of the polygon.

                // this is just used when editing the buildings - will output the new paths
                buildingDefinition.getPath().addListener('set_at', function(index, event) {
                    var coordinatesArray = this.getArray();
                    var allCoordinates = "";
                    for (var i = 0; i < coordinatesArray.length; i++) {
                        var coord = "{lat: " + coordinatesArray[i].lat() + ", lng: " + coordinatesArray[i].lng() + "},";
                        allCoordinates = allCoordinates + coord;
                    }
                    console.log(allCoordinates);
                });


No comments:

Post a Comment