Открытые Карты улиц и обратный вызов для OpenLayer - PullRequest
1 голос
/ 27 сентября 2019

У меня есть карта из olms, и я пытаюсь наложить на нее сетку 4x4.Я хочу, чтобы квадрат завис, чтобы изменить цвет. Этот код несколько работает, но он не согласован и иногда подвержен ошибкам.Как мне сделать это более последовательным?

Это мой обратный вызов перемещения мыши:

var displayFeatureInfo = function(pixel) {
  var feature = map.forEachFeatureAtPixel(pixel, function(feature) {
    return feature;
  });

  if (feature) {
    document.body.style.cursor = 'pointer';
  } else {
    document.body.style.cursor = 'default';
  }

  if (feature !== highlight) {
    if (highlight) {
      featureOverlay.getSource().removeFeature(highlight);
    }
    if (feature) {
      featureOverlay.getSource().addFeature(feature);
    }
    highlight = feature;
  }
}

И вот где я его установил:

olms('map', 'https://maps.tilehosting.com/styles/darkmatter/style.json?key=' + apiKey).then(function(mp) {
  map = mp;
  map.setView(view);
  map.addLayer(polyLayer);
  featureOverlay = new VectorLayer({
    source: new VectorSource(),
    map: map,
    style: function(feature) {
      return highlightStyle;
    }
  });
  map.on('pointermove', function(evt) {
    if (evt.dragging) {
      return;
    }
    var pixel = map.getEventPixel(evt.originalEvent);
    displayFeatureInfo(pixel);
  });
});

1 Ответ

1 голос
/ 27 сентября 2019

Поскольку у вас более одного векторного слоя, вам нужно будет использовать фильтр в forEachFeatureAtPixel

  var feature = map.forEachFeatureAtPixel(pixel, function(feature) {
    return feature;
  },{
    layerFilter: function(candidate) {
      return candidate === polyLayer
    }
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...