案例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<title>创建样式聚类</title>
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
<script src='https://api.tiles.mapbox.com/mapbox-gl-js/v1.1.1/mapbox-gl.js'></script>
<link href='https://api.tiles.mapbox.com/mapbox-gl-js/v1.1.1/mapbox-gl.css' rel='stylesheet' />
<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 = '<your access token here>';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/dark-v10',
center: [-103.59179687498357, 40.66995747013945],
zoom: 3
});
map.on('load', function() {
// Add a new source from our GeoJSON data and set the
// 'cluster' option to true. GL-JS will add the point_count property to your source data.
map.addSource("earthquakes", {
type: "geojson",
// Point to GeoJSON data. This example visualizes all M1.0+ earthquakes
// from 12/22/15 to 1/21/16 as logged by USGS' Earthquake hazards program.
data: "https://docs.mapbox.com/mapbox-gl-js/assets/earthquakes.geojson",
cluster: true,
clusterMaxZoom: 14, // Max zoom to cluster points on
clusterRadius: 50 // Radius of each cluster when clustering points (defaults to 50)
});
map.addLayer({
id: "clusters",
type: "circle",
source: "earthquakes",
filter: ["has", "point_count"],
paint: {
// Use step expressions (https://docs.mapbox.com/mapbox-gl-js/style-spec/#expressions-step)
// with three steps to implement three types of circles:
// * Blue, 20px circles when point count is less than 100
// * Yellow, 30px circles when point count is between 100 and 750
// * Pink, 40px circles when point count is greater than or equal to 750
"circle-color": [
"step",
["get", "point_count"],
"#51bbd6",
100,
"#f1f075",
750,
"#f28cb1"
],
"circle-radius": [
"step",
["get", "point_count"],
20,
100,
30,
750,
40
]
}
});
map.addLayer({
id: "cluster-count",
type: "symbol",
source: "earthquakes",
filter: ["has", "point_count"],
layout: {
"text-field": "{point_count_abbreviated}",
"text-font": ["DIN Offc Pro Medium", "Arial Unicode MS Bold"],
"text-size": 12
}
});
map.addLayer({
id: "unclustered-point",
type: "circle",
source: "earthquakes",
filter: ["!", ["has", "point_count"]],
paint: {
"circle-color": "#11b4da",
"circle-radius": 4,
"circle-stroke-width": 1,
"circle-stroke-color": "#fff"
}
});
// inspect a cluster on click
map.on('click', 'clusters', function (e) {
var features = map.queryRenderedFeatures(e.point, { layers: ['clusters'] });
var clusterId = features[0].properties.cluster_id;
map.getSource('earthquakes').getClusterExpansionZoom(clusterId, function (err, zoom) {
if (err)
return;
map.easeTo({
center: features[0].geometry.coordinates,
zoom: zoom
});
});
});
map.on('mouseenter', 'clusters', function () {
map.getCanvas().style.cursor = 'pointer';
});
map.on('mouseleave', 'clusters', function () {
map.getCanvas().style.cursor = '';
});
});
</script>
</body>
</html>
map.addLayer:
id: 必选 string. 全局唯一的图层名称。
type:可选的值有 fill, line, symbol, circle, raster, background.heatmap.hillshade.fill-extrusion图层的渲染类型。
fill:可填充的多边形,可带描边。
line:绘制线。
symbol:图标或者文本标注。
circle:可填充的圆。
raster:栅格地图例如卫星影像。
background:地图的背景色或者填充图案。
heatmap:
热力图(用于绘制成热力图的效果)。
hillshade:坡面阴影。
fill-extrusion:三维填充(用于给三维多边形进行填充和描边)。
source:源提供要在地图上显示的数据。
type:源的类型,必须是vector、raster、raster-dem、geojson、image、video之一。
vector:矢量瓦片数据源,必须为Mapbox矢量瓦片格式。
raster:栅格瓦片数据源。
raster-dem:栅格化的数字高程模型(相比 raster
多了一个属性 encoding
)。
geojson:Geojson数据源,数据通过一个”data”属性指定,值可以为url,也可以为geojson对象。
image:图片数据源。
video:视频数据源,url是一个字符串数组,为了保证不同浏览器的兼容性,每个url都会创建一个视频元素的数据源。
filter:起到的是过滤作用,返回符合条件表达式的数组。主要有以下几种形式:
["==", key, value] 等于: key = value
["!=", key, value] 不等于: key ≠ value
[">", key, value] 大于: key > value
[">=", key, value] 大于等于: key ≥ value
["<", key, value] 小于: key < value
["<=", key, value] 小于等于: key ≤ value
["in", key, v0, ..., vn] 包含关系: key ∈ {v0, ..., vn}
["!in", key, v0, ..., vn] 不包含关系: key ∉ {v0, ..., vn}
["all", f0, ..., fn] 逻辑与: f0 ∧ ... ∧ fn
["any", f0, ..., fn] 逻辑或: f0 ∨ ... ∨ fn
["none", f0, ..., fn] 逻辑非: ¬f0 ∧ ... ∧ ¬fn
layout:图层的布局属性。
text-field:文本域。
text-font:文字字体。
text-size:字体大小。
paint:
circle-color:圆形颜色。
circle-radius:圆形宽度。
map.on(type,layerld,listener):通过on方法绑定的监听事件,通过off方法取消绑定不起作用。
map.easeTo(options,eventData):使用动态转换,将中心点、缩放级别、方位角和倾斜度组合的原有数值改为新数值。地图将保留 options
没有指定的当前值。
map.queryRenderedFeatures ([geometry], [parameters]):返回满足查询条件并且能够可视化的Geojson特性对象数组,查询条件可以是layers或者filter,如果是layers,则在这些layer之内的特性能够返回。
get:
从当前feature的属性中检索属性值,如果提供第二个参数,则从另一个对象中检索属性值。
["get", string]: value
["get", string, object]: value