首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这里的地图:在MapSettingsControl中动态添加层

这里的地图:在MapSettingsControl中动态添加层
EN

Stack Overflow用户
提问于 2019-10-10 06:20:14
回答 1查看 1K关注 0票数 1

动态地在MapSettingsControl中添加层,这样我就可以切换到可见性了。当我试图在mapSettingControl中添加层时,它被禁用了。

背景:

我有一个网页应用程序开发使用传单。我有5个层,如图1所示。它在传单上工作得很好。现在我在这里使用Maps javascript API来开发相同的web应用程序。

我在传单上做得如何:

当添加层控制时,我将它们作为映射覆盖添加。

代码语言:javascript
复制
let layerControl = L.control.layers(baseMaps, overlayMaps).addTo(map);

当我需要动态地在层控件中添加覆盖时,我使用以下方法:

代码语言:javascript
复制
layerControl.addOverlay(somelayer, "layer name");

这个很好用。

如何使用这里的Maps js:

因为我有五个层,两个是集群层,两个是标记层和一个geojson。我试图通过为五个层创建组并将它们添加到映射设置控件的层中来应用相同的方法。

代码语言:javascript
复制
  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();

创建自定义地图设置ui:

代码语言:javascript
复制
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);

我正在为这样一个组添加标记:

代码语言:javascript
复制
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);
          });

问题陈述

我无法让这个mapSetting ui为我的层工作。

如何在MapSettingControl中添加集群层,以便切换(显示/隐藏)它们?(我认为我没有使用正确的分组方法)当我将它们作为一个map.addLayer(clusterLayer)添加时,效果很好。

如何在MapSettingControl中动态添加层?传单法的可能替代办法:

代码语言:javascript
复制
layerControl.addOverlay(somelayer, "layer name");
EN

回答 1

Stack Overflow用户

发布于 2019-10-17 07:02:43

从API来看,MapSettingsControl.Options似乎

代码语言:javascript
复制
layers: {
    label: 'test',
    layer: instance of H.map.layer.Layer
}

我们在切换时得到的错误是关于第一个参数的InvalidArgumentException来自DataModel.add。我相信这意味着在切换时,DataModel.add被调用并传递在MapSettingsControl中设置的H.map.Group,但是DataModel.add需要H.map.layer.Layer,但接收H.map.Group

我不确定是否可以简单地在H.map.Group中添加MapSettingsControl。我认为我们必须以某种方式将H.map.Group添加为H.map.layer.Layerprovider,并将Layer对象添加到MapSettingsControl中。

编辑

至于增加集群。当我试图为集群添加一个新的层时,它就会变成灰色。集群提供程序已经创建,ObjectLayer也被创建了,但是我认为在您创建了MapSettingsControl并定义了充当H.map.layer.Layer的变量之后,更新变量将不会对切换行为产生任何影响。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58316602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档