Как я могу изменить видимость слоя при увеличении карты? - PullRequest
1 голос
/ 06 апреля 2020

Я думал, что это должно быть очень просто или иметь какой-то пример с Azure Карты ...

Так что у меня есть 3 слоя на карте, 2 точки и 1 многоугольник, добавленный к моей карте. Сначала я хочу, чтобы слои точек были включены, а затем, если пользователь увеличит масштаб карты, отключите слои точек и включите полигон. Это также может произойти в обратном порядке, если пользователь уменьшит масштаб, когда полигон выключится, а точки снова включатся.

Мне удалось отключить слой в 1 пункт одним нажатием кнопки и повернуть кнопку. многоугольник, но слой с 1 точкой, который является htmlMarker, поэтому я могу использовать его для эффектов.

Также не работает документация по добавлению слоя за другим 1. Полигон находится поверх обоих точечных слоев, если я оставлю все включено?

   htmlMarkerLayer = new atlas.layer.SymbolLayer(dataSource, null, {
     filter: ['any', ['==', ['geometry-type'], 'Point'], ['==', ['geometry-type'], 'MultiPoint']], // Only render Point or MultiPoint in this layer.
     name: 'htmlMarkerLayer'
   });
   map.layers.add(htmlMarkerLayer, 'poiPointLayer');

   poiPointLayer = new atlas.layer.SymbolLayer(dataSource, null, {
     filter: ['any', ['==', ['geometry-type'], 'Point'], ['==', ['geometry-type'], 'MultiPoint']], // Only render Point or MultiPoint in this layer.
     name: 'poiPointLayer'
   });
   map.layers.add(poiPointLayer, 'htmlMarkerLayer');

polygonLayer = new atlas.layer.PolygonLayer(dataSource, null, {
        filter: ['any', ['==', ['geometry-type'], 'Polygon'], ['==', ['geometry-type'], 'MultiPolygon']], // Only render Point or MultiPoint in this layer.
        name: 'facilityLayer',
        fillColor: 'gray',
        fillOpacity: 0.5
    });
    map.layers.add(polygonLayer, 'poiPointLayer');

// Does not work on htmlMarker layer with pulse?
      var opts = htmlMarkerLayer.getOptions();
      opts['visible'] = false;
      htmlMarkerLayer.setOptions(opts);

// Works
   opts = poiPointLayer .getOptions();
   opts['visible'] = false;
   poiPointLayer .setOptions(opts);

// Works
   opts = polygonLayer.getOptions();
   opts['visible'] = true;
   polygonLayer.setOptions(opts);

Есть какие-нибудь мысли о том, как я могу получить любое масштабирование взаимодействия с картой? Как я могу отключить слой htmlMarker?

1 Ответ

1 голос
/ 06 апреля 2020

Все слои имеют параметры minZoom и maxZoom. Используйте их, чтобы указать свои лимиты, и он сделает то, что вы просите. Кроме того, имя не является опцией слоев. Второй параметр при инициализации функции (нуль в вашем коде) - это то, где вы можете передать идентификатор. Я сделал это изменение в приведенном ниже коде.

polygonLayer = new atlas.layer.PolygonLayer(dataSource, 'facilityLayer', {
    minZoom: 10,
    maxZoom: 24,    
    fillColor: 'gray',
    fillOpacity: 0.5,
    filter: ['any', ['==', ['geometry-type'], 'Polygon'], ['==', ['geometry-type'], 'MultiPolygon']], // Only render Point or MultiPoint in this layer.
});
map.layers.add(polygonLayer, 'poiPointLayer');

poiPointLayer = new atlas.layer.SymbolLayer(dataSource, 'poiPointLayer', {
    minZoom: 0,
    maxZoom: 10,
    filter: ['any', ['==', ['geometry-type'], 'Point'], ['==', ['geometry-type'], 'MultiPoint']], // Only render Point or MultiPoint in this layer.
});
map.layers.add(poiPointLayer, 'htmlMarkerLayer');

Для ясности, вот как работают значения minZoom / maxZoom:

  • minZoom -> появляется на этом уровне масштабирования.
  • maxZoom -> исчезает на этом уровне (появляется в maxZoom - 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...