创建样式聚类

 案例代码:

<!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

                        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值