如何使用javascript在地图中监听不同的点击事件?

mx_*_*ode 3 javascript

如何使用 JavaScript 在 mapbox 中监听不同的点击事件?以下是使用地图框显示地图的代码。

有人可以建议如何收听区分土地和水体的点击事件吗?

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Display a map on a webpage</title>
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
<link href="https://api.mapbox.com/mapbox-gl-js/v2.2.0/mapbox-gl.css" rel="stylesheet">
<script src="https://api.mapbox.com/mapbox-gl-js/v2.2.0/mapbox-gl.js"></script>
<style>
body { margin: 0; padding: 0; }
#map { position: absolute; top: 0; bottom: 0; width: 100%; }
</style>
</head>
<body>
<div id="map"></div>
<script>
    mapboxgl.accessToken = 'pk.eyJ1IjoiZGphZWJvIiwiYSI6ImNrbzJoYjhodTAxeDUyb211eTF2anZ0bmQifQ.62m9LNQhEPZNCwqxEW9pPQ';
var map = new mapboxgl.Map({
container: 'map', // container id
style: 'mapbox://styles/mapbox/streets-v11', // style URL
center: [-74.5, 40], // starting position [lng, lat]
zoom: 9 // starting zoom
});
</script>
 
</body>
</html>

Run Code Online (Sandbox Code Playgroud)

我可以使用以下代码收听点击事件:

     map.on('click', (e) => {
        console.log(e.lngLat)
      })

Run Code Online (Sandbox Code Playgroud)

但是有没有办法区分坐标陆地和水体?

小智 5

如果你试试这个:

map.on('load', function () {
    let style = map.getStyle();
})
Run Code Online (Sandbox Code Playgroud)

然后您可以看到有关样式的所有详细信息,例如来源、图层、字形等。另外为了监听不同层上的点击事件,你可以使用:

 map.on('click', 'land', function (e) {
     // some code
 });
Run Code Online (Sandbox Code Playgroud)

或者您可以通过以下代码查询多个图层中的渲染特征:

map.on('click', function (e) {
    let featureSelected = map.queryRenderedFeatures(e.point, {layers: ['land', 'water']
    });
});
Run Code Online (Sandbox Code Playgroud)