ЗДЕСЬ Карты: динамическое добавление слоя в MapSettingsControl - PullRequest
1 голос
/ 10 октября 2019

Динамически добавляйте слои в MapSettingsControl, чтобы я мог переключать видимость там. Когда я пытался добавить слой в mapSettingControl, он был отключен.

Фон:

У меня есть веб-приложение, разработанное с использованием листовки. У меня есть 5 слоев, как показано на рисунке-1. Работает нормально в листовке. Сейчас я использую Havas Maps API для разработки того же веб-приложения.

Как я это сделал в Leaflet:

Я добавляю их как наложения карты при добавлении элемента управления слоями, т.е.

let layerControl = L.control.layers(baseMaps, overlayMaps).addTo(map);

, когда мне нужно добавитьОверлей в слое управления динамически Я использую следующее:

layerControl.addOverlay(somelayer, "layer name");

Это прекрасно работает.

showing layer control in leaflet: figure-1

Как я делаюиспользуя Here Maps js api:

Поскольку у меня есть пять слоев, два слоя кластера, а два слоя маркера и один геойсон. Я попытался применить тот же подход, создав GROUP для пяти слоев и добавив их в слои элементов управления настройками карты.

  public clusterGroup1 = new H.map.Group();  
  public clusterGroup2 = new H.map.Group();
  public markerGroup1 = new H.map.Group();
  public markerGroup2 = new H.map.Group();
  public boundary = new H.map.Group();

создал пользовательский интерфейс настройки карты:

this.customizedMapSetting = new H.ui.MapSettingsControl({
      baseLayers: [{
        label: "Normal", layer: defaultLayers.vector.normal.map
      }],
      layers: [{
        label: "Cluster-1",
        layer: this.clusterGroup1
      },
      {
        label: "Cluster-2",
        layer: this.clusterGroup2
      },
      {
        label: "Marker-1",
        layer: this.markerGroup1
      },
      {
        label: "Marker-2",
        layer: this.markerGroup2
      },
      {
        label: "Geojson",
        layer: this.boundary
      }]
    });
    this.customizedMapSetting.setAlignment('top-right');
    ui.addControl("customized", this.customizedMapSetting);

Heremap mapsetting

Я добавляю маркеры в такую ​​группу:

dataArray.forEach(data=> {
            let lat = data.latlng[0];
            let lng = data.latlng[1];
            var marker = new H.map.Marker({ lat: lat, lng: lng }, { icon: icon});
            this.markerGroup1.addObject(marker);
          });

Постановка задачи
Я не могу получить эту картуНастройкаUI работает для моих слоев.

Как я могу добавить кластерные слои в MapSettingControl, чтобы я мог переключать (показывать / скрывать) их? (Я думаю, что я не использую правильный подход группы) Когда я добавляю их как map.addLayer (clusterLayer), все работает нормально.

Как мне динамически добавлять слой в MapSettingControl? Возможная альтернатива листовки:

layerControl.addOverlay(somelayer, "layer name");

1 Ответ

3 голосов
/ 17 октября 2019

Глядя на API, кажется, MapSettingsControl.Options имеет

layers: {
    label: 'test',
    layer: instance of H.map.layer.Layer
}

Ошибка, которую мы получаем при переключении, InvalidArgumentException с DataModel.add относительно первого аргумента. Я полагаю, это означает, что при переключении вызывается DataModel.add и передается H.map.Group, который устанавливается в MapSettingsControl, но DataModel.add ожидает H.map.layer.Layer, но получает H.map.Group.

Я не уверен, возможно ли просто добавить H.map.Group в MapSettingsControl. Я думаю, что мы должны как-то добавить H.map.Group как provider для H.map.layer.Layer и добавить объект Layer к MapSettingsControl.

EDIT

Что касается добавления кластера. Когда я пытаюсь добавить новый слой для кластера, он становится серым. Поставщик кластера создан и ObjectLayer также создан, но я думаю, что после того, как вы создали MapSettingsControl и определили переменную, которая будет действовать как H.map.layer.Layer, обновление переменной не повлияет на поведение переключателя.

...