• vue中使用高德地图


    1.安装

    cnpm install vue-amap --save

    2.main.js 中引入

    import VueAMap from 'vue-amap'
    Vue.use(VueAMap)
    VueAMap.initAMapApiLoader({
      key: '3ebdb3c7a684a4e64f39ddd306056522',
      plugin: ['AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType', 'AMap.PlaceSearch', 'AMap.Geolocation', 'AMap.Geocoder'],
      v: '1.4.4',
      uiVersion: '1.0'})
    '''
    key: 高德的key(自己申请)
    
    plugin: 引用的插件(根据需要引入)
    
    v: 高德SDK 版本
    
    uiVersion:UI库 版本
    '''

    3.在map.vue中引用

    <template>
        <div class="container">
            <div class="search-box">
                <input
                        v-model="searchKey"
                        type="search"
                        id="search">
                <button @click="searchByHand">搜索</button>
                <div class="tip-box" id="searchTip"></div>
            </div>
            <!--
              amap-manager: 地图管理对象
              vid:地图容器节点的ID
              zooms: 地图显示的缩放级别范围,在PC上,默认范围[3,18],取值范围[3-18];在移动设备上,默认范围[3-19],取值范围[3-19]
              center: 地图中心点坐标值
              plugin:地图使用的插件
              events: 事件
            -->
            <el-amap class="amap-box"
                     :amap-manager="amapManager"
                     :vid="'amap-vue'"
                     :zoom="zoom"
                     :plugin="plugin"
                     :center="center"
                     :events="events"
            >
                <!-- 标记 -->
                <el-amap-marker v-for="(marker, index) in markers" :position="marker" :key="index"></el-amap-marker>
            </el-amap>
        </div>
    
    
    </template>
    
    <style>
    
        .container {
            width: 700px;
            height: 500px;
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate3d(-50%, -50%, 0);
            border: 1px solid #999;
        }
    
        .search-box {
            position: absolute;
            z-index: 5;
            width: 70%;
            left: 13%;
            top: 10px;
            height: 30px;
        }
    
        .search-box input {
            float: left;
            width: 80%;
            height: 100%;
            border: 1px solid #30ccc1;
            padding: 0 8px;
            outline: none;
        }
    
        .search-box button {
            float: left;
            width: 20%;
            height: 100%;
            background: #30ccc1;
            border: 1px solid #30ccc1;
            color: #fff;
            outline: none;
        }
    
        .tip-box {
            width: 100%;
            max-height: 260px;
            position: absolute;
            top: 30px;
            overflow-y: auto;
            background-color: #fff;
        }
    </style>
    
    <script>
    
        import {AMapManager, lazyAMapApiLoaderInstance} from 'vue-amap'
    
        let amapManager = new AMapManager()
        export default {
            data() {
                let self = this
                return {
                    address: null,
                    searchKey: '',
                    amapManager,
                    markers: [],
                    searchOption: {
                        city: '全国',
                        citylimit: true
                    },
                    center: [121.329402, 31.228667],
                    zoom: 17,
                    lng: 0,
                    lat: 0,
                    loaded: false,
                    events: {
                        init() {
                            lazyAMapApiLoaderInstance.load().then(() => {
                                self.initSearch()
                            })
                        },
                        // 点击获取地址的数据
                        click(e) {
                            // console.log(e)
                            self.markers = []
                            let {lng, lat} = e.lnglat
                            self.lng = lng
                            self.lat = lat
                            self.center = [lng, lat]
                            self.markers.push([lng, lat])
                            // 这里通过高德 SDK 完成。
                            let geocoder = new AMap.Geocoder({
                                radius: 1000,
                                extensions: 'all'
                            })
                            geocoder.getAddress([lng, lat], function (status, result) {
                                if (status === 'complete' && result.info === 'OK') {
                                    if (result && result.regeocode) {
                                        console.log(result.regeocode.formattedAddress)
                                        self.address = result.regeocode.formattedAddress
                                        self.searchKey = result.regeocode.formattedAddress
                                        self.$nextTick()
                                    }
                                }
                            })
                        }
                    },
                    // 一些工具插件
                    plugin: [
                        // {
                        //   pName: 'Geocoder',
                        //   events: {
                        //     init (o) {
                        //       console.log(o.getAddress())
                        //     }
                        //   }
                        // },
                        {
                            // 定位
                            pName: 'Geolocation',
                            events: {
                                init(o) {
                                    // o是高德地图定位插件实例
                                    o.getCurrentPosition((status, result) => {
                                        if (result && result.position) {
                                            // 设置经度
                                            self.lng = result.position.lng
                                            // 设置维度
                                            self.lat = result.position.lat
                                            // 设置坐标
                                            self.center = [self.lng, self.lat]
                                            self.markers.push([self.lng, self.lat])
                                            // load
                                            self.loaded = true
                                            // 页面渲染好后
                                            self.$nextTick()
                                        }
                                    })
                                }
                            }
                        },
                        {
                            // 工具栏
                            pName: 'ToolBar',
                            events: {
                                init(instance) {
                                    console.log(instance);
                                }
                            }
                        },
                        {
                            // 鹰眼
                            pName: 'OverView',
                            events: {
                                init(instance) {
                                    console.log(instance);
                                }
                            }
                        },
                        {
                            // 地图类型
                            pName: 'MapType',
                            defaultType: 0,
                            events: {
                                init(instance) {
                                    console.log(instance);
                                }
                            }
                        },
                        {
                            // 搜索
                            pName: 'PlaceSearch',
                            events: {
                                init(instance) {
                                    console.log(instance)
                                }
                            }
                        }
                    ]
                }
            },
            methods: {
                initSearch() {
                    let vm = this
                    let map = this.amapManager.getMap()
                    AMapUI.loadUI(['misc/PoiPicker'], function (PoiPicker) {
                        var poiPicker = new PoiPicker({
                            input: 'search',
                            placeSearchOptions: {
                                map: map,
                                pageSize: 10
                            },
                            suggestContainer: 'searchTip',
                            searchResultsContainer: 'searchTip'
                        })
                        vm.poiPicker = poiPicker
                        // 监听poi选中信息
                        poiPicker.on('poiPicked', function (poiResult) {
                            // console.log(poiResult)
                            let source = poiResult.source
                            let poi = poiResult.item
                            if (source !== 'search') {
                                poiPicker.searchByKeyword(poi.name)
                            } else {
                                poiPicker.clearSearchResults()
                                vm.markers = []
                                let lng = poi.location.lng
                                let lat = poi.location.lat
                                let address = poi.cityname + poi.adname + poi.name
                                vm.center = [lng, lat]
                                vm.markers.push([lng, lat])
                                vm.lng = lng
                                vm.lat = lat
                                vm.address = address
                                vm.searchKey = address
                            }
                        })
                    })
                },
                searchByHand() {
                    if (this.searchKey !== '') {
                        this.poiPicker.searchByKeyword(this.searchKey)
                    }
                }
            }
        }
    
    
    </script>

    4.在.eslintrc.js 中引入 globals

    globals: {
            'AMap': false,
            'AMapUI': false
        }
  • 相关阅读:
    51 Nod 1086 多重背包问题(单调队列优化)
    51 Nod 1086 多重背包问题(二进制优化)
    51 Nod 1085 01背包问题
    poj 2559 Largest Rectangle(单调栈)
    51 Nod 1089 最长回文子串(Manacher算法)
    51 Nod N的阶乘的长度 (斯特林近似)
    51 Nod 1134 最长递增子序列(经典问题回顾)
    51 Nod 1020 逆序排列
    PCA-主成分分析(Principal components analysis)
    Python中cPickle
  • 原文地址:https://www.cnblogs.com/zhouze/p/11431553.html
Copyright © 2020-2023  润新知