У меня есть рисование для рисования точек. Эти точки разрешается рисовать только в том случае, если привязаны границы объектов другого источника. Теперь функция наложения должна изменить свой собственный стиль, если граница других функций привязана.
var snapCondition = function(evt){
var features = [];
mapEntry.forEachFeatureAtPixel(evt.pixel, function(feature, layer) {
if(layer != null && layer.get('name') === 'specialLayerName') {
features.push(feature);
}
});
if(features.length === 1 ) {
return checkBoundary(features[0], evt.coordinate);
} else {
return false;
};
};
var checkBoundary = function(feature, coords) {
var geom = feature.getGeometry();
var closestPoint = geom.getClosestPoint(coords);
console.log(closestPoint);
console.log(coords)
if((closestPoint[0] === coords[0]) && (closestPoint[1] === coords[1])) {
return true;
}
return false;
}
var drawBuildingEntry = new ol.interaction.Draw({
source: buildingEntrySource,
type: 'Point',
condition: snapCondition,
style: new ol.style.Style({
image: new ol.style.Circle({
radius: 7,
fill: new ol.style.Fill({
color: entryDrawColor,
}),
stroke: new ol.style.Stroke({
color: 'white',
width: 3
})
})
})
});
Приведенный выше код работает, но у меня возникли проблемы с изменением стиля. Я протестировал следующий код:
mapEntry.on("pointermove", function (event) {
var features = [];
mapEntry.forEachFeatureAtPixel(event.pixel, function(feature, layer) {
if(layer != null && layer.get('name') === 'specialLayerName') {
features.push(feature);
}
});
if(features.length === 1 ) {
console.log(checkBoundary(features[0], event.coordinate));
if(checkBoundary(features[0], event.coordinate) === true) {
entryDrawColor = '#40FF00'
} else {
entryDrawColor = '#FF0000';
};
} else {
entryDrawColor = '#FF0000';
};});
console.log checkBoundary даже ложно, потому что координаты события - это координаты перед привязкой элемента наложения. С уважением, Тим