高德地图使用规范一:地图初始化

1,610 阅读1分钟

前言

本文采用以下技术栈:

1.vue-cli3.x+less

2.高德官方文档

3.vant

地图初始化

首先我们采用script方式引入高德api。

<script src="https://webapi.amap.com/maps?v=1.3&key=高德key"></script>

其中高德key可以去高德官网申请,具体怎么申请就自己去问度娘了。

我们将使用AMap.Map类创建和展示地图对象:

data中的代码

data(){
    return {
        map:null
    }
}

mounted中的代码

this.initMap()

methods方法中定义initMap

var that = this; //避免使用this时指向不明
that.map = new AMap.Map("map-container",{
    resizeEnable:true,//是否监控地图容器尺寸变化,默认是false
    zoom: 16,//初始化地图层级
    center:[113.325,23.137],
    lang:'zh_cn' //地图语言1.en,2.zh_en,3.zh_cn
})

效果如图:

自定义地图风格

在initMap方法中加入两行代码

that.map = new AMap.Map("map-container",{
    resizeEnable:true,//是否监控地图容器尺寸变化,默认是false
    zoom: 16,//初始化地图层级
    center:[113.325,23.137],
    lang:'zh_cn', //地图语言1.en,2.zh_en,3.zh_cn
    mapStyle:'amap://styles/macaron', //地图底图的风格    features: ['bg', 'road', 'building', 'point'] //地图要素})

更改地图底图的风格

that.map.setMapStyle('amap://styles/fresh')

更改地图要素

that.map.setFeatures(['bg','road','building']);

自定义地图风格:链接

 具体代码如下:

<template>  
    <div class="home noLogo">
        <div class="title">高德地图DEMO</div>
        <div class="container" id="map-container"></div>    
        <div class="tools">      
            <div class="mapStyle toolList" @click="setMap('mapStyle')">主题</div>
            <div class="mapFeatures toolList" @click="setMap('mapFeatures')">要素</div>
        </div>    
        <div class="mapDialog" v-if="isShow">      
            <div class="header"></div>      
            <div class="mapBox" v-if="type === 'mapStyle'">
                <van-radio-group v-model="mapRadio" @change="changeMapStyle">
                  <van-radio name="dark">幻影黑</van-radio>
                  <van-radio name="light">月光银</van-radio>
                  <van-radio name="whitesmoke">远山黛</van-radio>
                  <van-radio name="'fresh">草色青</van-radio>
                  <van-radio name="grey">雅士灰</van-radio>
                  <van-radio name="graffiti">涂鸦</van-radio>
                  <van-radio name="macaron">马卡龙</van-radio>
                  <van-radio name="blue">靛青蓝</van-radio>
                  <van-radio name="darkblue">极夜蓝</van-radio> 
                  <van-radio name="wine">酱籽</van-radio>
                  <van-radio name="normal">标准</van-radio>
               </van-radio-group>
          </div>      
          <div class="mapBox" v-else-if="type === 'mapFeatures'">
             <van-checkbox-group v-model="features" @change="changeMapFeatures">
                  <van-checkbox name="bg">区域面(bg)</van-checkbox>
                  <van-checkbox name="road">道路(road)</van-checkbox>
                  <van-checkbox name="building">建筑物(building)</van-checkbox>
                  <van-checkbox name="point">标注(point)</van-checkbox>
             </van-checkbox-group>      
          </div>    
        </div>  
    </div>
</template>
<script>
export default {  
    name: "home",  
    data() {    
        return {      
            map: null,     
            isShow: false,      
            type: "",      
            mapRadio: "macaron",      
            features: ["bg", "road", "building", "point"],    
        };  
    },  
    mounted() {    
        this.initMap();  
    },  
    methods: {    
        initMap() {      
            var that = this;      
            that.map = new AMap.Map("map-container", {        
                resizeEnable: true, //是否监控地图容器尺寸变化        
                zoom: 16, //初始化地图层级        
                center: [113.325, 23.137],        
                lang: "zh_cn", //中文底图        
                mapStyle: "amap://styles/macaron",        
                features: ["bg", "road", "building", "point"],      
            });    
        },    
        setMap(type) {      
            this.isShow = true;      
            this.type = type;    
        },    
        changeMapStyle(name) {      
            var styleName = "amap://styles/" + name;
            this.map.setMapStyle(styleName);      
            this.isShow = false;    
        },    
        changeMapFeatures(arr) {      
            this.map.setFeatures(arr);      
            this.isShow = false;    
        },  
    },
};
</script>
<style lang="less" scoped>
    .home {  
        width: 100%;  
        height: 100%;  
        position: relative;  
        .title {    
            position: fixed;    
            top: 0;    
            left: 0;    
            text-align: center;    
            height: 32px;    
            line-height: 32px;    
            background: rgba(255, 255, 255, 0.5);    
            z-index: 999;    
            width: 100%;    
            color: #333;    
            font-size: 16px;    
            font-weight: bold;  
        }  
        .container {    
            width: 100%;    
            height: 100vh;  
        }  
         .tools {    
            position: absolute;    、
            right: 0;    
            top: 50%;    
            transform: translate(0, -50%);    
            .toolList {      
                background: #ffffff;      
                box-shadow: 0 4px 8px 0 rgba(113, 108, 98, 0.25);      
                width: 45px;      
                height: 45px;      
                border-radius: 50%;      
                margin-bottom: 20px;      
                text-align: center;      
                line-height: 45px;      
                font-family: PingFangSC-Regular;      
                font-size: 14px;      
                color: #333333;      
                letter-spacing: 0;    
            }  
        }  
        .mapDialog {    
            position: fixed;    
            width: 192px;    
            left: 0;    
            bottom: 0;    
            background: #fff;    
            border-radius: 5px;    
            box-shadow: 0 2px 6px 0 rgb(114 124 245 / 50%);    
            z-index: 999;    
            .mapBox {      
                padding-left: 20px;      
                padding-top: 12px;      
                .van-radio {        
                    margin-bottom: 12px;      
                }      
                .van-checkbox{        
                    margin-bottom: 12px;      
                }    
            }  
        }
    }
</style>

注:vant的组件都需自己单独引入,可自行参考vant文档。这里是H5布局,没有做任何布局兼容。请在移动端下调试样式。