Добавление фигур (полигонов и линий поли) в оверлей менеджера чертежей Google с помощью метода JavaScript - PullRequest
0 голосов
/ 03 мая 2020

Я хочу преобразовать многоугольник, нарисованный из инструментов рисования карт Google, в полигональные линии, что я и сделал, но проблема в том, что как только нарисованы полигональные линии, я не могу изменить их цвет. Есть ли способ, чтобы результирующие полилинии, сгенерированные в функции save (), являлись частью наложения диспетчера чертежей и редактировались диспетчером чертежей, т. Е. Меняли цвета и т. Д. c.

Кроме того, я sh чтобы сохранить эти многоугольники и полилинии в базе данных и добавить эти фигуры с помощью al oop в диспетчер чертежей Google.

Вот файл кода JavaScript с именем draw. js

        var drawingManager;var lines=[], polygons=[];var map;var labels=[];
        var selectedShape;
        var colors = ['#1E90FF', '#FF1493', '#32CD32', '#FF8C00', '#4B0082'];
        var selectedColor;
        var colorButtons = {};

        function clearSelection () {
            if (selectedShape) {
                if (selectedShape.type !== 'marker') {
                    selectedShape.setEditable(false);
                }

                selectedShape = null;
            }
        }

        function setSelection (shape) {
            if (shape.type !== 'marker') {
                clearSelection();
                shape.setEditable(true);
                selectColor(shape.get('fillColor') || shape.get('strokeColor'));
            }

            selectedShape = shape;
        }

        function deleteSelectedShape () {
            if (selectedShape) {
                selectedShape.setMap(null);
            }
        }




        function selectColor (color) {
            selectedColor = color;
            for (var i = 0; i < colors.length; ++i) {
                var currColor = colors[i];
                colorButtons[currColor].style.border = currColor == color ? '2px solid #789' : '2px solid #fff';
            }

            // Retrieves the current options from the drawing manager and replaces the
            // stroke or fill color as appropriate.
            var polylineOptions = drawingManager.get('polylineOptions');
            polylineOptions.strokeColor = color;
            drawingManager.set('polylineOptions', polylineOptions);

            var rectangleOptions = drawingManager.get('rectangleOptions');
            rectangleOptions.fillColor = color;
            drawingManager.set('rectangleOptions', rectangleOptions);

            var circleOptions = drawingManager.get('circleOptions');
            circleOptions.fillColor = color;
            drawingManager.set('circleOptions', circleOptions);

            var polygonOptions = drawingManager.get('polygonOptions');
            polygonOptions.fillColor = color;
            drawingManager.set('polygonOptions', polygonOptions);
        }

        function setSelectedShapeColor (color) {
            if (selectedShape) {
                if (selectedShape.type == google.maps.drawing.OverlayType.POLYLINE) {
                    selectedShape.set('strokeColor', color);
                } else {
                    selectedShape.set('fillColor', color);
                }
            }
        }

        function makeColorButton (color) {
            var button = document.createElement('span');
            button.className = 'color-button';
            button.style.backgroundColor = color;
            google.maps.event.addDomListener(button, 'click', function () {
                selectColor(color);
                setSelectedShapeColor(color);
            });

            return button;
        }

        function buildColorPalette () {
            var colorPalette = document.getElementById('color-palette');
            for (var i = 0; i < colors.length; ++i) {
                var currColor = colors[i];
                var colorButton = makeColorButton(currColor);
                colorPalette.appendChild(colorButton);
                colorButtons[currColor] = colorButton;
            }
            selectColor(colors[0]);
        }


    /// above coloring and selecting shape


        function initialize () {
                map = new google.maps.Map(document.getElementById('map'), {
                zoom: 16,
                center: new google.maps.LatLng(52.25097, 20.97114),
                mapTypeId: google.maps.MapTypeId.SATELLITE,
                disableDefaultUI: true,
                zoomControl: true
            });

            var polyOptions = {
                strokeWeight: 0,
                fillOpacity: 0.45,
                editable: true,
                draggable: false
            };
            // Creates a drawing manager attached to the map that allows the user to draw
            // markers, lines, and shapes.
            drawingManager = new google.maps.drawing.DrawingManager({
                drawingMode: google.maps.drawing.OverlayType.POLYGON,
                markerOptions: {
                    draggable: true
                },
                polylineOptions: {
                    editable: true,
                    draggable: false
                },
                rectangleOptions: polyOptions,
                circleOptions: polyOptions,
                polygonOptions: polyOptions,
                map: map
            });

            google.maps.event.addListener(drawingManager, 'overlaycomplete', function (e) {
                var newShape = e.overlay;

                newShape.type = e.type;

                if (e.type !== google.maps.drawing.OverlayType.MARKER) {
                    // Switch back to non-drawing mode after drawing a shape.
                    drawingManager.setDrawingMode(null);


                    if (newShape.type === google.maps.drawing.OverlayType.POLYGON) 
                    {
                        polygons.push(newShape);
                    }


                    if (newShape.type === google.maps.drawing.OverlayType.POLYLINE) 
                    {
                        lines.push(newShape);
                    }

                    // Add an event listener that selects the newly-drawn shape when the user
                    // mouses down on it.
                    google.maps.event.addListener(newShape, 'click', function (e) {
                        if (e.vertex !== undefined) {
                            if (newShape.type === google.maps.drawing.OverlayType.POLYGON) {
                                var path = newShape.getPaths().getAt(e.path);
                                path.removeAt(e.vertex);
                                if (path.length < 3) {
                                    newShape.setMap(null);
                                }
                            }
                            if (newShape.type === google.maps.drawing.OverlayType.POLYLINE) {
                                var path = newShape.getPath();
                                path.removeAt(e.vertex);
                                if (path.length < 2) {
                                    newShape.setMap(null);
                                }
                            }
                        }
                        setSelection(newShape);
                    });
                    setSelection(newShape);

                    //adding the overlay to the array


                }
                else {
                    google.maps.event.addListener(newShape, 'click', function (e) {
                        setSelection(newShape);
                    });
                    setSelection(newShape);
                }
            });

            // Clear the current selection when the drawing mode is changed, or when the
            // map is clicked.
            google.maps.event.addListener(drawingManager, 'drawingmode_changed', clearSelection);
            google.maps.event.addListener(map, 'click', clearSelection);
            google.maps.event.addDomListener(document.getElementById('delete-button'), 'click', deleteSelectedShape);


            buildColorPalette();
        }
        google.maps.event.addDomListener(window, 'load', initialize);





        // a simple function to add polylines from polygon vertices
        function save()
        {

           for(var j=0;j<polygons.length;j++)
           {




                var getcords=polygons[j].latLngs.i["0"].i;



                for(var k=1;k<=getcords.length;k++)
                {


                   //check if it isnt the last point
                   if(k==getcords.length)
                   {
                           var pathCoordinates = [
                           getcords[k-1],
                           getcords[0]

                         ];

                   }
                   else
                   {

                       var pathCoordinates = [
                           getcords[k],
                           getcords[k-1]

                         ];
                   }

                   var flightPath = new google.maps.Polyline({
                       path: pathCoordinates,
                       geodesic: true,
                       strokeColor: '#FF0000',
                       strokeOpacity: 1.0,
                       strokeWeight: 2,
                       editable:true
                     });



                     flightPath.setMap(map);

                    //bounds.extend(polygonCoords[i]);
                }

           }
        }

html часть

        <!DOCTYPE html>
    <html>

    <head>
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
        <meta charset="UTF-8">
        <title>Drawing Tools</title>
        <script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false&libraries=drawing"></script>
        <style type="text/css">
            #map,
            html,
            body {
                padding: 0;
                margin: 0;
                width: 960px;
                height: 700px;
            }

            #panel {
                width: 100%;
                font-family: Arial, sans-serif;
                font-size: 13px;
                float: right;
                margin: 10px;
            }

            #color-palette {
                clear: both;
            }

            .color-button {
                width: 14px;
                height: 14px;
                font-size: 0;
                margin: 2px;
                float: left;
                cursor: pointer;
            }

            #delete-button {
                margin-top: 5px;
            }

        </style>
        <script src="<?php echo base_url();?>assets/js/draw.js"></script>
    </head>

    <body>
        <div id="panel">
            <div id="color-palette"></div>
            <div>
                <button id="delete-button">Delete Selected Shape</button>
                <button id="convert" onclick="save()">Convert to Polyline</button>
            </div>
        </div>
        <div id="map"></div>
    </body>

    </html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...