我一直在遵循我在这里看到的使用addBaseLayer和addOverlayLayer函数添加图层控件的建议,但是生成的对象似乎无法被地图正确识别。我没有得到任何控件,当我试图点击地图控件时,我得到一个闪烁的光标和没有控制面板。我使用了ngx-leaflet演示,并修改了代码以匹配我在应用程序中所做的工作,并获得了相同的结果。
我的html看起来像这样:
<div leaflet style="height: 300px;"
[leafletOptions]="options"
[leafletLayersControl._layers]="layers"
[leafletLayersControl]="layersControl">
</div>我的.ts看起来像这样:
layersControl = new Control.Layers();
...
this.layersControl.addBaseLayer(this.LAYER_OSM.layer, 'Open Street Map');
this.layersControl.addBaseLayer(this.LAYER_OCM.layer, 'Open Cycle Map');
this.layersControl.addOverlay(this.circle.layer, "Circle");
this.layersControl.addOverlay(this.square.layer, "Square");
this.layersControl.addOverlay(this.polygon.layer, "Polygon");
this.layersControl.addOverlay(this.marker.layer, "Marker");这将产生以下layersControl对象:

相比之下,这是演示中的代码:
layersControl = {
baseLayers: {
'Open Street Map': this.LAYER_OSM.layer,
'Open Cycle Map': this.LAYER_OCM.layer
},
overlays: {
Circle: this.circle.layer,
Square: this.square.layer,
Polygon: this.polygon.layer,
Marker: this.marker.layer,
GeoJSON: this.geoJSON.layer
}
};这就产生了这个layersControl对象:

这仅仅是我的使用问题,还是一个bug?
谢谢!
发布于 2020-12-08 09:56:11
这是你的使用上的一个问题。
ngx-leaflet不期望将Leaflet层控制实例绑定到其[leafletLayersControl]属性,而是绑定到带有baseLayers和overlays字典的普通对象,如您提到的示例中所示。
如果你真的需要使用Leaflet Layers控件实例,你应该检索底层的mapObject,然后按照Leaflet API使用它,而不是试图将它提供给ngx-leaflet wrapper。
但另一种更像Angular的方法是简单地向普通对象添加数据(以防您想要动态添加基础层/覆盖层),并且Angular和ngx-leaflet将负责跟踪这些更改并相应地更新地图(及其图层控件)。
https://stackoverflow.com/questions/65189035
复制相似问题