zoukankan      html  css  js  c++  java
  • 高德开放平台实现区域地图+云图标记

    在项目中需要使用类似GIS效果的地图,考虑到高德开放平台关于云图的便利性,便利用官网和网上的例子,进行了初步实现。

    1.带3D效果:

    2.代码:

    <!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>
        <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.14&key=760d16c25fa8ee3c547b693a6c414821&plugin=Map3D,AMap.DistrictSearch"></script>
        <style>
            html,
            body,
            #container {
                margin: 0;
                height: 100%;
            }
        </style>
    </head>
    <body>
        <div id="container"></div>
        <script>
            var mask = [];
            var map = new AMap.Map('container', {
                mask: mask,
                resizeEnable: true,
                zoom: 12,
                viewMode: '3D',
                center: [121.124178, 31.150681],
                mapStyle: 'amap://styles/5a2dbb143362de08809a8aebe25ca455',
                //layers: [
                //    new AMap.TileLayer.RoadNet({
                //        zIndex: 20
                //    })]//,
                // new AMap.TileLayer({
                //   zIndex: 6,
                // opacity: 1,
                //getTileUrl: 'https://t{1,2,3,4}.tianditu.gov.cn/DataServer?T=ter_w&x=[x]&y=[y]&l=[z]'
                //getTileUrl: 'https://t{s}.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=5ecfe4e0cecdafec9a858e37c261084c'
                //})]
            });
            map.plugin('AMap.CloudDataLayer', function () {
                var layerOptions = {
                    query: { keywords: '' },
                    clickable: true
                };
                var cloudDataLayer = new AMap.CloudDataLayer('5cbec0902376c10e3dec70d6', layerOptions); //实例化云图层类
                cloudDataLayer.setMap(map); //叠加云图层到地图
            });
            new AMap.DistrictSearch({
                extensions: 'all',
                subdistrict: 0
            }).search('青浦区', function (status, result) {
                // 外多边形坐标数组和内多边形坐标数组
                var outer = [
                    new AMap.LngLat(-360, 90, true),
                    new AMap.LngLat(-360, -90, true),
                    new AMap.LngLat(360, -90, true),
                    new AMap.LngLat(360, 90, true),
                ];
                var holes = result.districtList[0].boundaries
    
                var pathArray = [
                    outer
                ];
    
                for (var i = 0; i < holes.length; i += 1) {
                    mask.push([holes[i]])
                }
                pathArray.push.apply(pathArray, holes)
                var polygon = new AMap.Polygon({
                    pathL: pathArray,
                    strokeColor: '#00eeff',
                    strokeWeight: 1,
                    fillColor: '#71B3ff',
                    fillOpacity: 0.5
                });
                polygon.setPath(pathArray);
                map.add(polygon);
                var bounds = map.getBounds(); // 获取显示范围
                map.setLimitBounds(bounds); // 限制地图显示范围
                var object3Dlayer = new AMap.Object3DLayer({ zIndex: 1 });
                map.add(object3Dlayer)
                var height = -8000;
                var color = '#0088ffcc';//rgba
                var wall = new AMap.Object3D.Wall({
                    path: holes,
                    height: height,
                    color: color
                });
                wall.transparent = true
                object3Dlayer.add(wall)
            });
    
    
    
    
        </script>
    
    </body>
    </html>
    

    3.不带3D效果。带弹窗

    4.代码:

    <!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>
        <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.14&key=760d16c25fa8ee3c547b693a6c414821&plugin=AMap.DistrictSearch,Map3D"></script>
        <script type="text/javascript" src="https://cache.amap.com/lbs/static/addToolbar.js"></script>
        <style>
            html,
            body,
            #container {
                margin: 0;
                height: 100%;
            }
        </style>
    </head>
    <body>
        <div id="container"></div>
        <script>
            var map = new AMap.Map('container', {
                resizeEnable: true,
                zoom: 12,
                viewMode: '3D',
                center: [121.124178, 31.150681],
                mapStyle: 'amap://styles/5a2dbb143362de08809a8aebe25ca455',
                //layers: [
                //    new AMap.TileLayer.RoadNet({
                //        zIndex: 20
                //    })]//,
                // new AMap.TileLayer({
                //   zIndex: 6,
                // opacity: 1,
                //getTileUrl: 'https://t{1,2,3,4}.tianditu.gov.cn/DataServer?T=ter_w&x=[x]&y=[y]&l=[z]'
                //getTileUrl: 'https://t{s}.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=5ecfe4e0cecdafec9a858e37c261084c'
                //})]
            });
            new AMap.DistrictSearch({
                extensions: 'all',
                subdistrict: 0
            }).search('青浦区', function (status, result) {
                // 外多边形坐标数组和内多边形坐标数组
                var outer = [
                    new AMap.LngLat(-360, 90, true),
                    new AMap.LngLat(-360, -90, true),
                    new AMap.LngLat(360, -90, true),
                    new AMap.LngLat(360, 90, true),
                ];
                var holes = result.districtList[0].boundaries
    
                var pathArray = [
                    outer
                ];
                pathArray.push.apply(pathArray, holes)
                var polygon = new AMap.Polygon({
                    pathL: pathArray,
                    strokeColor: '#00eeff',
                    strokeWeight: 1,
                    fillColor: '#71B3ff',
                    fillOpacity: 0.5
                });
                polygon.setPath(pathArray);
                map.add(polygon);
                var bounds = map.getBounds(); // 获取显示范围
                map.setLimitBounds(bounds); // 限制地图显示范围
            });
            map.plugin('AMap.CloudDataLayer', function () {
                var layerOptions = {
                    query: { keywords: '' },
                    clickable: true
                };
                var cloudDataLayer = new AMap.CloudDataLayer('5cbec0902376c10e3dec70d6', layerOptions); //实例化云图层类
                cloudDataLayer.setMap(map); //叠加云图层到地图
    
                AMap.event.addListener(cloudDataLayer, 'click', function (result) {
                    var clouddata = result.data;
                    var photo = [];
                    if (clouddata._image[0]) {//如果有上传的图片
                        photo = ['<img width=240 height=100 src="' + clouddata._image[0]._preurl + '"><br>'];
                    }
                    var infoWindow = new AMap.InfoWindow({
                        content: "<font class='title'>" + clouddata._name + "</font><hr/>" + photo.join("") + "地址:" + clouddata._address + "<br />" + "联系电话:" + clouddata.telephone + "<br />" + "经纬度:" + clouddata._location,
                        size: new AMap.Size(0, 0),
                        autoMove: true,
                        offset: new AMap.Pixel(0, -25)
                    });
                    infoWindow.open(map, clouddata._location);
                    console.log(clouddata._name);
    
                });
            });
    
    
    
        </script>
    
    </body>
    </html>
    

    不足:无法实现在云图中添加文本标签,无法标记这些点的名称,而是需要设置弹窗点击事件。要是有完成这部分的烦请留言,不胜感激。

  • 相关阅读:
    Java基础-3y
    对线面试官面试系列-3y
    从零单排学Redis【青铜】
    mock官方文档
    route路由组件传递参数
    axios拦截器与vue代理设置
    Sass使用方法
    Less使用方法
    Vue-cli
    Vue-组件注册
  • 原文地址:https://www.cnblogs.com/cache-yuan/p/11041677.html
Copyright © 2011-2022 走看看