vue 中使用高德地图, 地图选点

功能简述: 网页版高德地图开发,主要支持地图选点(没做导航),搜索选点.(功能类似微信与好友聊天中的选择位置,发送位置,如下图)

第一步:先成为高德地图的开发者(获取高德地图的key);获取key


第二步:引入高德地图js文件

  <!-- 高德地图 -->
    <script src="https://webapi.amap.com/maps?v=1.4.14&key=你申请到高德地图开发者key&plugin=AMap.Driving"></script>
    <!-- UI组件库 -->(这个看情况引入,不要则不引入)
    <script src="//webapi.amap.com/ui/1.0/main.js?v=1.0.11"></script>

第三部:po代码

(1) html部分的:

<div class="map-container" v-if="showMapContainer">
            <div class="map-nav">
                <div class="cancel-btn" @click="cancelChooseAdress"> 取消 </div>
                <div class="map-title"> 位置 </div>
                <div class="confirm-btn" @click="confirmAdress"> 确定 </div>
                <div id="pickerBox">
                    <input id="pickerInput" placeholder="输入关键字选取地点" />
                    <div id="poiInfo"></div>
                </div>
            </div>
            <div id="container" style="width:100%;height:8rem;" class="map" tabindex="0"></div>

            <div class="adress">
                <div style="display:none">
                    <div>
                        <div class='title'>选择模式</div>
                        <input type='radio' name='mode' value='dragMap' checked>拖拽地图模式</input>
                        </br>
                        <input type='radio' name='mode' value='dragMarker'>拖拽Marker模式</input>
                    </div>
                    <div>
                        <button id='start'>开始选点</button>
                        <button id='stop'>关闭选点</button>
                    </div>
                </div>
                <div class="adress-info">
                    <div class='title'>选址结果</div>
                    <div class='c'>
                        <span class="adress-info-label">经纬度:</span>
                        <span id='lnglat' v-model="addressInfo.position"></span>
                    </div>
                    <div class='c'>
                        <span class="adress-info-label">地址:</span>
                        <span id='address'></span>
                    </div>
                    <div class='c'>
                        <span class="adress-info-label">最近的路口:</span>
                        <span id='nearestJunction'></span>
                    </div>
                    <div class='c'>
                        <span class="adress-info-label">最近的路:</span>
                        <span id='nearestRoad'></span>
                    </div>
                    <div class='c'>
                        <span class="adress-info-label">最近的POI:</span>
                        <span id='nearestPOI'></span>
                    </div>
                </div>
            </div>
        </div>

(2) ts部分的(有一些变量没有放,大家自己补充哈.注意:::::declare const AMapUI: any;
declare const AMap: any;这两句在typescript中必须写,不写功能虽然正常,但是会报语法错误 ):


declare const AMapUI: any;
declare const AMap: any;

getLocation() {
            var self = this
            AMapUI.loadUI(['misc/PositionPicker', 'misc/PoiPicker'], function (PositionPicker: any, PoiPicker: any) {

                var poiPicker = new PoiPicker({
                    input: 'pickerInput' //输入框的id
                });

                var map = new AMap.Map('container', {
                    zoom: 15,  //缩放层级
                    center: self.postionArray //[121.596739, 31.194049],//当前地图中心点
                })

                var positionPicker = new PositionPicker({
                    mode: 'dragMap',
                    map: map,
                });

                positionPicker.on('success', function (positionResult: any) {
                    document.getElementById('lnglat')!.innerHTML = positionResult.position;
                    document.getElementById('address')!.innerHTML = positionResult.address;
                    document.getElementById('nearestJunction')!.innerHTML = positionResult.nearestJunction;
                    document.getElementById('nearestRoad')!.innerHTML = positionResult.nearestRoad;
                    document.getElementById('nearestPOI')!.innerHTML = positionResult.nearestPOI;

                    self.addressInfo.address = positionResult.address;
                    self.addressInfo.position = positionResult.position;
                });
                positionPicker.on('fail', function (positionResult: any) {
                    document.getElementById('lnglat')!.innerHTML = ' ';
                    document.getElementById('address')!.innerHTML = ' ';
                    document.getElementById('nearestJunction')!.innerHTML = ' ';
                    document.getElementById('nearestRoad')!.innerHTML = ' ';
                    document.getElementById('nearestPOI')!.innerHTML = ' ';

                    self.addressInfo.address = positionResult.address;
                    self.addressInfo.position = positionResult.position;
                });
                positionPicker.start();
                map.panBy(0, 1);

                //初始化poiPicker
                poiPickerReady(poiPicker);
                // 搜索框
                function poiPickerReady(poiPicker: any) {
                    (window as any).poiPicker = poiPicker;
                    var marker = new AMap.Marker();
                    var infoWindow = new AMap.InfoWindow({
                        offset: new AMap.Pixel(0, -20)
                    });
                    //选取了某个POI
                    poiPicker.on('poiPicked', function (poiResult: any) {
                        var source = poiResult.source,
                            poi = poiResult.item,
                            info = {
                                source: source,
                                id: poi.id,
                                name: poi.name,
                                location: poi.location.toString(),
                                address: poi.address
                            };
                        infoWindow.setMap(map);
                        marker.setPosition(poi.location);
                        infoWindow.setPosition(poi.location);
                        infoWindow.open(map, marker.getPosition());
                        map.setCenter(marker.getPosition());
                    });
                }
            });
        }

(3)css部分:


.map-container {
        width: 100%;
        overflow: scroll;
        height: 100%;
        position: absolute;
        top: 0;
        left: 0;
        background-color: #fff;
        z-index: 10;
        overflow: hidden;

        .map-nav {
            display: flex;
            justify-content: space-between;
            align-items: center;
            flex-wrap: wrap;
            padding: 0.2rem;
            padding-bottom: 0;
            background-color: #EDEDED;
            height: 2.5rem;

            .map-title {
                font-size: 0.4rem;
                height: 0.7rem;
                font-weight: bold;
            }

            .confirm-btn {
                background-color: #57BE69;
                color: #fff;
                padding: 0.1rem 0.2rem;
                border-radius: 4px;
                font-size: 0.377rem;
            }

            .cancel-btn {
                font-size: 0.377rem;
                padding: 0.1rem 0.2rem;
                border-radius: 4px;
            }
        }
    }


最后在po一张搜索的图

整个复制我也不知道能不能跑起来,有什么问题也随时可以交流.你若是喷我,不好意思,你是小狗.

原文地址:https://www.cnblogs.com/niluiquhz/p/10755417.html

时间: 2024-10-07 13:56:05

vue 中使用高德地图, 地图选点的相关文章

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.PlaceSe

在vue中使用高德地图vue-amap

1.安装 vue-amap我安装指定版本0.5.10的版本 npm i --save [email protected] 2.main.js中的配置 key申请地址教程:https://lbs.amap.com/api/javascript-api/guide/abc/prepare // 高德离线地图 import VueAMap from 'vue-amap'; Vue.use(VueAMap); VueAMap.initAMapApiLoader({ // 高德key key: 'd6ea

vue-cli2.X中引入高德地图,将其设为全局对象

平时一般未用脚手架构建或用webpack构建的项目只要用script标签引入即可,在vue-cli 2.X构建的项目中,需要用如下方式引入高德地图: 首先在高德地图开放平台中注册开发者账号并获取key,传送门:https://lbs.amap.com/api/javascript-api/guide/abc/prepare 接下来在cli项目根目录下的index.html中的<header>标签中用script标签引入 <script type="text/javascript

在第三方应用中打开高德地图的特色功能页面

由于最近的项目中需要在第三方应用中直接打开高德地图的电子狗页面,在高德开发者论坛找了一遍无果之后,只能自己反编译高德地图来找了,现在记录下来方便大家有类似需求时可以直接找到,这样就不需要反编译了. 高德地图有一些非常方便的特色功能,我们可以直接在第三方应用中打开高德地图的这些特色功能页面方便大家使用,前提是手机上必须要安装高德地图. 首先反编译高德地图的APK得到AndroidMainfest.xml文件: <?xml version="1.0" encoding="u

vue中使用raphael.js实现地图绘制

一.效果图 二.在vue中引入raphael.js npm i raphael -S 三.封装一个名为StreetMap的组件,代码如下 1 <template> 2 <div> 3 <div id='streetMap'> 4 <div class="tips" v-show="tipsShow" :style="tipsStyle"> 5 <span v-html="tipsCo

ArcGIS Javascript API 加载高德在线地图扩展

利用ArcGIS JavaScript API加载高德在线地图的扩展 /** * Created by WanderGIS on 2015/7/15. */ define(["dojo/_base/declare", "esri/geometry/Extent", "esri/SpatialReference", "esri/geometry/Point", "esri/layers/TileInfo",

[转]在Arcmap中加载互联网地图资源的4种方法

转自http://blog.3snews.net/space.php?uid=6955280&do=blog&id=67981 前一段时间想在Arcmap中打开互联网地图中的地图数据,如影像数据.基础地图数据等,经过简单研究目前总结了四种方法,整理下与大家分享,有些内容可能理解有误,希望大家多多指教.4种方法如下: a)        如果地图支持OGC(开放地理空间信息联盟)协议的话,可以通过WMS,WMTS服务资源在Arcmap中打开,如天地图等. b)        通过相关插件打开

在Arcmap中加载互联网地图资源的4种方法

前一段时间想在Arcmap中打开互联网地图中的地图数据,如影像数据.基础地图数据等,经过简单研究目前总结了四种方法,整理下与大家分享,有些内容可能理解有误,希望大家多多指教.4种方法如下: a)        如果地图支持OGC(开放地理空间信息联盟)协议的话,可以通过WMS,WMTS服务资源在Arcmap中打开,如天地图等. b)        通过相关插件打开.如使用ArcBruTile插件等可以在arcmap中打开如Google map,openstreet,必应地图,百度地图等. c) 

flex中通过sprite在地图上画柱状图主要代码

1.主要代码: var sprite:Sprite = new Sprite();     var columnSys:ColumnSymbol = new ColumnSymbol();     var fieldArr:Array = new Array("绿标总数","黄标总数");     var colorArr:Array = new Array("0x00ff00","0xffff00");     column