BIGEMPA Js API示例中心

文字聚合效果源代码展示

代码编辑区 运行 下载 还原
<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8" />
        <meta
            name="viewport"
            content="initial-scale=1,maximum-scale=1,user-scalable=no"
        />
        <!--
        以下CSS地址请在安装软件了替换成本地的地址
        CSS地址请使用:
        http://localhost:9000/bigemap.js/v2.1.0/bigemap.css
        软件下载地址 http://www.bigemap.com/reader/download/detail201802017.html
    -->
        <link href="http://ua.bigemap.com:30081/bmsdk/bigemap.js/v2.1.0/bigemap.css" rel="stylesheet"/>
        <!--
        JS地址请使用:
        http://localhost:9000/bigemap.js/v2.1.0/bigemap.js
    -->
        <script src="http://ua.bigemap.com:30081/bmsdk/bigemap.js/v2.1.0/bigemap.js"></script>
        <script src="/offline_data/newjunbiao/bm-plot.min.js"></script>
        <script src="/offline_data/newjunbiao/turf.min.js"></script>
        <style>
            body {
                margin: 0;
                padding: 0;
            }
            #map {
                position: absolute;
                top: 0;
                bottom: 0;
                width: 100%;
            }
        </style>
        <title>Google Map Streets</title>
    </head>
    <body>
        <div id="map"></div>
        <script>
            // 软件配置信息地址,软件安装完成之后使用本地地址,如:http://localhost:9000
            BM.Config.HTTP_URL = "http://ua.bigemap.com:30081/bmsdk/"
            // 在ID为map的元素中实例化一个地图,并设置地图的ID号,ID号程序自动生成,无需手动配置 ,中心点,默认的级别和显示级别控件
            var map = BM.map("map",null, {
                center: [0, 0],
                zoom: 3,
                zoomControl: true,
                attributionControl: false,
                preferCanvas: true,
                minZoom: 3,
                // 设置地图的最大放大级别
                maxZoom:24,
            });

            let m1 = BM.tileLayer("bigemap.dc-tian-w-satellite").addTo(map)
            m1.on("loading",(e)=>{
                Object.assign(m1.options,{
                    maxZoom:24,
                     // 设置图层超过配置指定的级别后就进行地图图片的放大
                    maxNativeZoom:18
                })
            })
            // 用于保存文字的对象
            let layer = new BM.Plot.SvgLayer({
                // 配置SvgLayer属于的pane层
                pane: "tooltipPane",
                // 聚合配置
                cluster: {
                    // 是否开启聚合
                    enable: true,
                    // 聚合半径,像素距离
                    radius: 50,
                    // 设置超过多少级别,就不进行聚合
                    disableZoom:20,
                    
                },
            });
            layer.addTo(map);
            let group = BM.featureGroup();

            //发请求获取土地数据
            fetch("/offline_data/newjunbiao/tudi.geojson")
                .then((res) => {
                    return res.json();
                })
                .then((res) => {
                    console.log(res);
                    let fs = res.features;
                    fs.forEach((v, i) => {
                        // console.log("vvvv", v);
                        let pos = v.geometry.coordinates[0];
                        let polygonPosArr = pos.slice(0).map((vv) => {
                            return [vv[1], vv[0]];
                        });
                        pos.push(pos[0]);
                        // 计算多边形的质心
                        let center = turf.centerOfMass(turf.polygon([pos]));
                        // 获取质心坐标
                        let mass = center.geometry.coordinates;
                        // 创建文字标签对象
                        let text = new BM.Plot.TextOverlay(
                            `${v.properties
                            .name}`,
                            BM.latLng(mass[1], mass[0]),{
                                color:"red",
                                // backgroundColor:"white",
                                font:"16px 楷体",
                            }
                        );
                        // 将文字添加到layer中
                        layer.addLayer(text)
                        let f1 = BM.polygon(polygonPosArr, {}).addTo(map);
                        group.addLayer(f1);
                    });
                    map.fitBounds(group.getBounds())
                });
        </script>
    </body>
</html>