Перемещение точки в Openlayers 6

#javascript #openlayers-6

#javascript #openlayers-6

Вопрос:

У меня есть массив координат, с помощью которого я рисую путь. Затем я хочу переместить маркер в позицию на этом пути, когда пользователь нажимает на карту, в новую позицию вдоль этого пути.

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

Функция movemarker — это та, с которой я борюсь. Я играл с getCoordinates и setCoordinates, но из этого ничего не получилось, поэтому в настоящее время он просто устанавливает второй маркер. Буду признателен за любую помощь! Спасибо!

   <head>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.4.3/css/ol.css" type="text/css">
    <script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.4.3/build/ol.js"></script>
  </head>
  <body>
      <div id="map-canvas" onClick="movemarker(3)"></div>

    <script type="text/javascript">
    var coordinates = [
        ol.proj.fromLonLat([-3, 0]),
        ol.proj.fromLonLat([-5, 4]),
        ol.proj.fromLonLat([-6, 4]),
        ol.proj.fromLonLat([-7, 0]),
        ol.proj.fromLonLat([-9, 8])
    ];

    <!-- Initialize path -->
    var layerLines = new ol.layer.Vector({
        source: new ol.source.Vector({
            features: [new ol.Feature({
                geometry: new ol.geom.LineString(coordinates),
                name: 'Line'
            })]
        }),
        style: new ol.style.Style({
            stroke: new ol.style.Stroke({
                color: '#ff0000',
                width: 3
            })
        })
    });

    <!-- Initialize map -->
    var map = new ol.Map({
        target: 'map-canvas',
        layers: [
            new ol.layer.Tile({
                source: new ol.source.OSM()
            })
        ],
        view: new ol.View({
        center: [0, 0],
        zoom: 1
      })
    });
    map.addLayer(layerLines);

    <!-- set initial marker -->
    var markericon = new ol.layer.Vector({
        source: new ol.source.Vector({
            features: [
                new ol.Feature({
                    geometry: new ol.geom.Point(coordinates[0])
                })
            ]
        })
    });
    map.addLayer(markericon);

    <!-- move marker -->
    function movemarker(markernumber) {
        var markericon = new ol.layer.Vector({
            source: new ol.source.Vector({
                features: [
                    new ol.Feature({
                        geometry: new ol.geom.Point(coordinates[3])
                    })
                ]
            })
        });
        map.addLayer(markericon);
    }

    </script>

    </div>
  </body>
</html>```
 

Ответ №1:

Вы должны получить доступ к геометрии объекта, который вы уже создали, и обновить его координаты

 function movemarker(markernumber) {
    markericon.getSource().getFeatures()[0].getGeometry().setCoordinates(coordinates[markernumber]);
}
 

Комментарии:

1. Вот и все. Я возился со строками, близкими к этому, но, должно быть, всегда делал что-то не так. Спасибо!