Измените стиль рисования наложения, если курсор наложен на другой объект - PullRequest
0 голосов
/ 16 июня 2020

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

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 даже ложно, потому что координаты события - это координаты перед привязкой элемента наложения. С уважением, Тим

1 Ответ

0 голосов
/ 16 июня 2020

Взаимодействие с привязкой не меняет положение указателя, но меняет то, что сообщается взаимодействию рисования, поэтому вам, вероятно, потребуется протестировать функцию стиля для рисования

  style: function(feature) {
    var entryDrawColor = '#FF0000';
    var geometry = feature.getGeometry();
    if (geometry.getType() = 'Point') {
      var coordinates = geometry.getCoordinates();
      var pixel = getPixelFromCoordinate(coordinate);

      ...

    }
    return 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
        })
      })
    })
  }
...