美文网首页web端学习
高德地图 闪烁圆形标记

高德地图 闪烁圆形标记

作者: 不见当年三月花 | 来源:发表于2018-12-28 10:44 被阅读792次
image.png

全国地图上图标闪烁 基于经纬度

  • 目前网上关于这方面的描述不是特别的详细
  • 可以有红、黄、绿来表示不同状态下的网关
  • 基于高德地图Web API
  • 后台提供经纬度直接http访问获得数据
  • 直接上前端代码(一下代码摘选自高德地图API 有删改)
  • 需要设置AK(设置之后可以直接运行数据为高德地图官方提供数据)
<script type="text/javascript"
        src="https://webapi.amap.com/maps?v=1.4.11&key=你的AK"></script>
<script src="//webapi.amap.com/ui/1.0/main.js?v=1.0.11"></script>
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <title>默认点标记</title>
    <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css"/>
    <style>
        html, body, #container {
            height: 100%;
            width: 100%;
        }

        .amap-icon img,
        .amap-marker-content img{
            width: 25px;
            height: 34px;
        }

        .marker {
            position: absolute;
            top: -20px;
            right: -118px;
            color: #fff;
            padding: 4px 10px;
            box-shadow: 1px 1px 1px rgba(10, 10, 10, .2);
            white-space: nowrap;
            font-size: 12px;
            font-family: "";
            background-color: #25A5F7;
            border-radius: 3px;
        }

        .input-card{
            width: 32rem;
            z-index: 170;
        }

        .input-card .btn{
            margin-right: .8rem;
        }

        .input-card .btn:last-child{
            margin-right: 0;
        }
    </style>
</head>
<body>
<div id="container"></div>
<div class="input-card">
    <label style="color:grey">点标记操作</label>
    <div class="input-item">
        <input id="addMarker" type="button" class="btn" onclick="addMarker()" value="添加点标记覆盖物">
        <input id="updateMarker" type="button" class="btn" onclick="updateMarker()" value="更新点标记覆盖物">
        <input id="clearMarker" type="button" class="btn" onclick="clearMarker()" value="删除点标记覆盖物">
    </div>
</div>
<script type="text/javascript"
        src="https://webapi.amap.com/maps?v=1.4.11&key=你的AK"></script>
<script src="//webapi.amap.com/ui/1.0/main.js?v=1.0.11"></script>
<script type="text/javascript">
    var marker, map = new AMap.Map("container", {
        mapStyle: 'amap://styles/dark',
        resizeEnable: true,
        center: [113.23, 23.16  ],
        zoom: 11
    });

    // 实例化点标记
    function addMarker() {
        marker = new AMap.Marker({
            icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",
            position: [113.231, 23.1116 ],
            offset: new AMap.Pixel(-13, -30),
            period:50
        });
        marker.setMap(map);
    }

    function updateMarker() {

        if (!marker) {
            return;
        }

        // 自定义点标记内容
        var markerContent = document.createElement("div");

        // 点标记中的图标
        var markerImg = document.createElement("img");
        markerImg.className = "markerlnglat";
        markerImg.src = "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-red.png";
        markerContent.appendChild(markerImg);

        // 点标记中的文本
        var markerSpan = document.createElement("span");
        markerSpan.className = 'marker';
        markerSpan.innerHTML = "Hi,我被更新啦!";
        markerContent.appendChild(markerSpan);

        marker.setContent(markerContent); //更新点标记内容
        marker.setPosition([116.391467, 39.927761]); //更新点标记位置
    }

    // 清除 marker
    function clearMarker() {

        if (marker) {
            marker.setMap(null);
            marker = null;
        }
    }




    //just some colors
    var colors = [
        '#0cc2f2',
        '#4fd2b1',
        '#90e36f',
        '#ffe700',
        '#ff9e00',
        '#ff6700',
        '#ff1800'
    ];

    AMapUI.load(['ui/misc/PointSimplifier', 'lib/$'], function(PointSimplifier, $) {

        if (!PointSimplifier.supportCanvas) {
            alert('当前环境不支持 Canvas!');
            return;
        }

        var pointSimplifierIns = new PointSimplifier({
            zIndex: 115,
            autoSetFitView: false,
            map: map, //所属的地图实例

            getPosition: function(item) {
                if (!item) {
                    return null;
                }

                var parts = item.split(',');

                return [parseFloat(parts[0]), parseFloat(parts[1])];
            },
            getHoverTitle: function(dataItem, idx) {
                return '序号: ' + idx;
            },
            //使用GroupStyleRender
            renderConstructor: PointSimplifier.Render.Canvas.GroupStyleRender,
            renderOptions: {
                eventSupport: false, //禁止事件,对性能更友好
                //点的样式
                pointStyle: {
                    fillStyle: null,
                    width: 5,
                    height: 5
                },
                topNAreaStyle: null,
                getGroupId: function(item, idx) {

                    //随机返回一个组ID
                    return Math.ceil(colors.length * Math.random());
                },
                groupStyleOptions: function(gid) {

                    //随机设置大小
                    var radius = 2 + 10 * Math.random();

                    return {

                        pointStyle: radius > 0 ? {
                            content: function(ctx, x, y, width, height) {

                                var p = {
                                    x: x + width / 2,
                                    y: y + height / 2,
                                    radius: radius
                                };

                                ctx.beginPath();
                                var gradient = ctx.createRadialGradient(p.x, p.y, 0, p.x, p.y, p.radius);
                                gradient.addColorStop(0, "rgba(111,120,249,0.8)");
                                gradient.addColorStop(1, "rgba(222,120,249,0.1)");
                                ctx.fillStyle = gradient;
                                ctx.arc(p.x, p.y, p.radius, Math.PI * 2, false);
                                ctx.fill();

                            },

                            //fillStyle: colors[gid % colors.length],
                            width: radius * 2,
                            height: radius * 2
                        } : null,
                        pointHardcoreStyle: {
                            width: radius * 2 + 3,
                            height: radius * 2 + 3
                        }
                    };
                }

            }
        });


        //重复render
        setInterval(function() {
            pointSimplifierIns.render();
        }, 500)


        $('<div id="loadingTip">加载数据,请稍候...</div>').appendTo(document.body);
        $.get('https://a.amap.com/amap-ui/static/data/10w.txt', function(csv) {

            var data = csv.split('\n');
            /**
             * 加载数据 直接后台http生成  可以查看这个txt的文件格式
             * 我分成三个加载 刚好三种颜色
             * */
           // pointSimplifierIns.setData(data.slice(0, 5000));

            pointSimplifierIns1.setData(data.slice(0, 5000));

            $('#loadingTip').remove();
        });



        //重复render
        setInterval(function() {
            pointSimplifierIns1.render();
        }, 500)


        /*pointSimplifierIns1
        * 作为一个全局的闪烁的标志
        * 一个颜色我实例化一个
        * 只是为了方便
        * 读者可以自己优化
        * */
        var pointSimplifierIns1 = new PointSimplifier({
            zIndex: 115,
            autoSetFitView: false,
            map: map, //所属的地图实例

            getPosition: function(item) {
                if (!item) {
                    return null;
                }

                var parts = item.split(',');

                return [parseFloat(parts[0]), parseFloat(parts[1])];
            },
            getHoverTitle: function(dataItem, idx) {
                return '序号: ' + idx;
            },
            //使用GroupStyleRender
            renderConstructor: PointSimplifier.Render.Canvas.GroupStyleRender,
            renderOptions: {
                eventSupport: false, //禁止事件,对性能更友好
                //点的样式
                pointStyle: {
                    fillStyle: null,
                    width: 5,
                    height: 5
                },
                topNAreaStyle: null,
                getGroupId: function(item, idx) {

                    //随机返回一个组ID
                    return Math.ceil(colors.length * Math.random());
                },
                groupStyleOptions: function(gid) {

                    //随机设置大小
                    var radius = 2 + 10 * Math.random();

                    return {

                        pointStyle: radius > 0 ? {
                            content: function(ctx, x, y, width, height) {

                                var p = {
                                    x: x + width / 2,
                                    y: y + height / 2,
                                    radius: radius
                                };

                                ctx.beginPath();
                                var gradient = ctx.createRadialGradient(p.x, p.y, 0, p.x, p.y, p.radius);
                               // gradient.addColorStop(0, "rgba(0,238,118,0.8)");
                                // gradient.addColorStop(1, "rgba(0,238,110,0.1)");
                                //这里控制图标闪烁颜色 rgb
                                gradient.addColorStop(0, "rgba(255,255,0,0.8)");
                                gradient.addColorStop(1, "rgba(255,255,0,0.1)");
                                ctx.fillStyle = gradient;
                                ctx.arc(p.x, p.y, p.radius, Math.PI * 2, false);
                                ctx.fill();

                            },

                            //fillStyle: colors[gid % colors.length],
                            width: radius * 2,
                            height: radius * 2
                        } : null,
                        pointHardcoreStyle: {
                            width: radius * 2 + 3,
                            height: radius * 2 + 3
                        }
                    };
                }

            }
        });

    });


</script>
</body>
</html>

相关文章

网友评论

    本文标题:高德地图 闪烁圆形标记

    本文链接:https://www.haomeiwen.com/subject/fycslqtx.html