前端数据可视化之高德地图

仙人指路,才高八斗

Gaud map在手,做啥都不愁

区域掩模和遮罩一起使用

先来搭建盒子模型和引入高德地图
盒子模型和引入高德地图
然后在body里面放入你申请的key(注意2.0版本不在支持object3D,故本次实验在1.4版本下进行)
宁波市区域掩模&wall
接着使用GeoJSON根据标注你的GeoJSON配置在地图上对应覆盖物(就是用GeoJSON做遮罩,而不是用行政区域查询,因为更加方便)
附上一个获取各省市GeoJSON数据格式的网站
http://datav.aliyun.com/tools/atlas/#&lat=30.35828173619863&lng=106.7222742206687&zoom=3.5
然后就是按照高德地图官网ctrl+c&ctrl+v
在这里插入图片描述
好了,到此为止就完成了,让我们来看一看效果
效果1
效果2
最后附上全部代码

<!DOCTYPE HTML>
<html>

<head>
    <meta name="viewport" content="width=device-width initial-scale=1.0 maximum-scale=1.0 user-scalable=0">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>区域掩模和遮罩</title>
    <style>
        body,
        html,
        #container {
            margin: 0;
            width: 100%;
            height: 100%
        }
    </style>
    <link rel="stylesheet" href="//a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css" />>
    <script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script>
</head>

<body>
    <div id="container"></div>
    <script language="javascript"
        src="https://webapi.amap.com/maps?v=1.4.15&key=你申请的key&plugin=Map3D,AMap.DistrictSearch">
    </script>
    <script language="javascript">
        var opts = {
            subdistrict: 0,
            extensions: 'all',
            level: 'district'
        };
        //利用行政区查询获取边界构建mask路径
        //也可以直接通过经纬度构建mask路径
        var district = new AMap.DistrictSearch(opts);
        district.search('宁波市', function (status, result) {
            var bounds = result.districtList[0].boundaries;
            var mask = []
            for (var i = 0; i < bounds.length; i += 1) {
                mask.push([bounds[i]])
            }
            var map = new AMap.Map('container', {
                mask: mask,
                center: [121.54816, 29.607034],
                disableSocket: true,
                viewMode: '3D',
                showLabel: false,
                resizeEnable: true, //是否监控地图容器尺寸变化,默认值为false
                rotateEnable: true, //地图是否可旋转,3D视图默认为true,2D视图默认false
                pitchEnable: true, //是否允许设置俯仰角度,3D视图下为true,2D视图下无效
                labelzIndex: 130,
                pitch: 40,
                zoom: 9,
                // skyColor: '#41A863', //指定天空颜色
                mapStyle: 'amap://styles/grey', //添加自定义样式
                layers: [
                    // new AMap.TileLayer.RoadNet({
                    //     rejectMapMask: true
                    // }),
                    // new AMap.TileLayer.Satellite({
                    // rejectMapMask: true
                    // }),
                ]
            });
            //点标记
            var maskerIn1 = new AMap.Marker({
                position: [121.871889, 29.871452],
                map: map
            })
            var maskerIn2 = new AMap.Marker({
                position: [121.333733, 30.272161],
                map: map
            })
            var maskerIn3 = new AMap.Marker({
                position: [121.337988, 29.617074],
                map: map
            })
            var maskerIn4 = new AMap.Marker({
                position: [121.837988, 29.417074],
                map: map
            })

            //添加高度面
            var object3Dlayer = new AMap.Object3DLayer({
                zIndex: 1
            });
            map.add(object3Dlayer)
            var height = -50000;
            var color = '#0088ffcc';
            // var color = '#030a52'; //rgba
            var wall = new AMap.Object3D.Wall({
                path: bounds,
                height: height,
                color: color
            });
            wall.transparent = true
            object3Dlayer.add(wall)
            //添加描边
            for (var i = 0; i < bounds.length; i += 1) {
                new AMap.Polyline({
                    path: bounds[i],
                    strokeColor: '#99ffff',
                    strokeWeight: 4,
                    map: map
                })
            }
            //使用GeoJSON根据标注你的GeoJSON配置在地图上对应覆盖物
            ajax('https://geo.datav.aliyun.com/areas_v2/bound/330200_full.json', function (err, geoJSON) {
                if (!err) {
                    var geojson = new AMap.GeoJSON({
                        geoJSON: geoJSON,
                        // 还可以自定义getMarker和getPolyline
                        getPolygon: function (geojson, lnglats) {
                            // 计算面积
                            // var area = AMap.GeometryUtil.ringArea(lnglats[0])
                            var polygon = new AMap.Polygon({
                                bubble: true,
                                path: lnglats,
                                // fillOpacity: 1 - Math.sqrt(area /
                                //     8000000000), // 面积越大透明度越高
                                fillOpacity: 0.3,
                                fillColor: '#80d8ff',
                                strokeColor: '#0091ea',
                            })
                            map.add(polygon);
                            // polygon.setMap(map);
                            polygon.on('mouseover', () => {
                                polygon.setOptions({
                                    fillOpacity: 0.7,
                                    fillColor: '#7bccc4'
                                })
                            });
                            polygon.on('mouseout', () => {
                                polygon.setOptions({
                                    fillOpacity: 0.3,
                                    fillColor: '#80d8ff'
                                })
                            });
                        }
                    });

                    geojson.setMap(map);

                    log.success('GeoJSON 数据加载完成')
                } else {
                    log.error('GeoJSON 服务请求失败')
                }
            })
        });
    </script>
</body>

</html>

喜欢的兄弟多多点赞咯,唯世俗长存!

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值