У меня есть массив координат, с которым я рисую путь. Затем я хочу переместить маркер в позицию на этом пути, когда пользователь нажимает на карту в новую позицию на этом пути.
У меня есть карта и путь, и у меня есть маркер на первой позиции пути. Я не могу понять, как переместить этот маркер. Я не понимаю, как получить доступ к положению этого первого маркера, изменить координаты на другие в массиве, а затем переместить его туда.
Функция 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>```
Вы должны получить доступ к геометрии объекта, который вы уже создали, и обновить его координаты.
function movemarker(markernumber) {
markericon.getSource().getFeatures()[0].getGeometry().setCoordinates(coordinates[markernumber]);
}
Вот и все. Я возился с линиями, близкими к этому, но, должно быть, всегда делал что-то не так. Спасибо!