如何添加图标以动态切换mapboxgl样式?

问题描述 投票:0回答:2

我想在mapboxgl视图中添加如下图标。使用Angular2

enter image description here

当我点击图标时,它会自动切换样式(streets-v9,satellite-v9)

我关注链接mapboxgl example

mapbox mapbox-gl-js mapbox-gl mapbox-marker
2个回答
1
投票

你看到这个API方法了吗? https://www.mapbox.com/mapbox-gl-js/api/#map#setstyle

有了它,你可以为你设置一个新的地图样式,例如单击图标或按下按钮或您想要的任何内容。

以此为基础:

https://jsfiddle.net/andi_lo/706pot8L/

mapboxgl.accessToken = 'pk.eyJ1IjoiZmFyYWRheTIiLCJhIjoiTUVHbDl5OCJ9.buFaqIdaIM3iXr1BOYKpsQ';
let map = new mapboxgl.Map({
  container: 'map',
  style: 'mapbox://styles/mapbox/streets-v9', 
  center: [-1.77, 52.73],
  zoom: 3,
});

let icon = document.getElementById('icon');

icon.addEventListener('click', function(e) {
	map.setStyle('mapbox://styles/mapbox/light-v9');
}, false)
#icon {
  position: absolute;
  top: 15px;
  left: 15px;
  color: black;
}

#map {
  height: 500px;
}
<link href="https://api.tiles.mapbox.com/mapbox-gl-js/v0.38.0/mapbox-gl.css" rel="stylesheet"/>
<script src="https://api.tiles.mapbox.com/mapbox-gl-js/v0.38.0/mapbox-gl.js"></script>

<div id="map"></div>

<button id="icon">
Switch layers
</button>

1
投票

你想要的是一个切换层的“控制”。 Mapbox-GL-JS不包含这样的东西,也没有列为plugin(尚未)。

您应该使用Mapbox-GL-JS的iControl类来创建控件,然后按照Mapbox的说明添加样式和行为:

function LayerSwitchControl() { }

LayerSwitchControl.prototype.onAdd = function(map) {
    this._map = map;
    this._container = document.createElement('div');
    this._container.className = 'mapboxgl-ctrl';
    // change this next line to include a layer-switching icon
    this._container.textContent = 'Hello, world';
    return this._container;
};

HelloWorldControl.prototype.onRemove = function () {
     this._container.parentNode.removeChild(this._container);
     this._map = undefined;
};

然后,您需要将代码添加到:

  1. 添加控件
  2. 酌情回应click事件。
© www.soinside.com 2019 - 2024. All rights reserved.