Как я могу получить координаты нарисованного полигона в открытых слоях?

#javascript #coordinates #openlayers #openlayers-3 #openlayers-5

Вопрос:

У меня есть проект openlayers. Когда я рисую любое место на карте, я хочу получить координаты нарисованного полигона и информацию о нарисованном месте, такую как название района. Я перепробовал много решений здесь, а также другие советы, но я не могу получить нарисованную координату. Как я могу получить нарисованную многоугольную координату.

Вот мой html-код

    <div id="map" class="map"></div>
    <select id="layer-select" class="layer-select">

        <option value="AerialWithLabelsOnDemand" selected>Aerial with labels</option>

    </select>
    <form class="form-inline">
        <label for="type">Geometry type: amp;nbsp;</label>
        <select class="form-control mr-2 mb-2 mt-2" id="type">
            <option value="Point">Point</option>
            <option value="LineString">LineString</option>
            <option value="Polygon">Polygon</option>
            <option value="Circle">Circle</option>
            <option value="None">None</option>
        </select>
        <input class="form-control mr-2 mb-2 mt-2" type="button" value="Undo" id="undo">
    </form>
 

Вот код js

   "use strict";
        var TileLayer = ol.layer.Tile;
        var OSM = ol.source.OSM;
        var VectorSource = ol.source.Vector;
        var VectorLayer = ol.layer.Vector;
        var Style = ol.style.Style;
        var Fill = ol.style.Fill;
        var Stroke = ol.style.Stroke;
        var CircleStyle = ol.style.Circle;
        var View = ol.View;
        var Modify = ol.interaction.Modify;
        var Draw = ol.interaction.Draw;
        var Snap = ol.interaction.Snap;
        var Overlay = ol.Overlay;
        var toStringHDMS = ol.coordinate.toStringHDMS;
        var fromLonLat = ol.proj.fromLonLat;
        var toLonLat = ol.proj.toLonLat;

        var raster = new TileLayer({

            preload: Infinity,
            source: new ol.source.BingMaps({
                key: '------------------',
                imagerySet: 'AerialWithLabelsOnDemand',     
            })
        });
        var source = new VectorSource({ wrapX: false });

        var vector = new VectorLayer({
            source: source,

        });


        var map = new ol.Map({
            layers: [
                raster, vector
            ],
            target: 'map',
            view: new View({
                center: fromLonLat([34.9744, 39.0128]),
                zoom: 6,

            })
        });

        var typeSelect = document.getElementById('type');

        var draw; // global so we can remove it later
        function addInteraction() {
            var value = typeSelect.value;
            if (value !== 'None') {
                draw = new Draw({
                    source: source,
                    type: typeSelect.value,
                    
                });
                map.addInteraction(draw);
            }
        }

        typeSelect.onchange = function () {
            map.removeInteraction(draw);
            addInteraction();
        };

        document.getElementById('undo').addEventListener('click', function () {
            draw.removeLastPoint();

        });


        var popup = new Overlay({
            element: document.getElementById('popup'),
        });
        map.addOverlay(popup);

        map.on('click', function (evt) {
            var element = popup.getElement();
            var coordinate = evt.feature;

            var hdms = toStringHDMS(toLonLat(coordinate));

            $(element).popover('dispose');
            popup.setPosition(coordinate);
            $(element).popover({
                container: element,
                placement: 'top',
                animation: false,
                html: true,
                content: '<p>The location you clicked was:</p><code>'   hdms   '</code>',
            });
            $(element).popover('show');
        });
 

Ответ №1:

 map.on('click', function (evt) {
var feature = map.forEachFeatureAtPixel(evt.pixel, function(feature, layer) {
         return feature;
     });
if (feature) {
     var coord = feature.getGeometry().getCoordinates();
     var props = feature.getProperties();
    console.log(props.yourAttributeName);                 
    }        
});