1. 程式人生 > >VUE——自動定位+拖拽選址+搜尋選址

VUE——自動定位+拖拽選址+搜尋選址

地圖載入完成後,進行自動定位到裝置當前所在位置(顯示當前周邊),拖拽地圖進行選擇地址,點選搜尋按鈕,搜尋框內輸入時會提示相關點,通過搜尋結果進行搜尋選擇地址

元件部分:

<template> <div> <button @click="addRadius">增加範圍</button> <button @click="startSearch">搜尋</button> <p>{{address}}</p> <hr> <div class="amap-page-container"
> <input v-if="toSearch" type="text" class="search-input" id="search"> <el-amap vid="amap" :zoom="zoom" class="amap-demo" :center="center" :amapManager="amapManager" :events="events" > <el-amap-circle vid
="circle" :center="center" :radius="radius" fill-opacity="0.2" strokeColor="#38f" strokeOpacity="0.8" strokeWeight="1" fillColor="#38f" > </el-amap-circle> </el-amap> </div> <ul> <
li v-for="item in result" :key="item.id">{{item.name}}</li> </ul> </div></template>

注:el-amap-circle只是為了更直觀的看到效果,可以省略。

<style scoped> .amap-page-container { height: 300px; position: relative; } .search-input{ border: 1px solid red; position: absolute; z-index: 5; width: 80%; left: 10%; padding: 5px; } .toolbar{ margin-top: 15px; }</style>

js部分:

<script> import {AMapManager} from "vue-amap" let amapManager=new AMapManager(); export default { data() { let vm = this; return { zoom:16, center: [121.329402,31.228667], result:[], address:"", radius:100, toSearch:false, amapManager, map:null, events:{ init(o){ vm.map=o; //方法一 // AMapUI.loadUI(['misc/PositionPicker'], function(PositionPicker) { // var positionPicker = new PositionPicker({ // mode: 'dragMap', // map: o // }); // positionPicker.on('success', function(positionResult){ // vm.result=positionResult.regeocode.pois; // vm.address=positionResult.regeocode.formattedAddress; // vm.center=[positionResult.position.lng,positionResult.position.lat] // }) // positionPicker.start(); // }) } } }; }, watch:{ map:function(){ if(this.map!=null){ this.startDrag(); } } }, methods:{ startDrag(){//方法二 let vm=this; let map=this.amapManager.getMap(); AMapUI.loadUI(['misc/PositionPicker'], function(PositionPicker) { var positionPicker = new PositionPicker({ mode: 'dragMap', map: map }); //定位 let geolocation; map.plugin('AMap.Geolocation', function () { geolocation=new AMap.Geolocation({ showButton: true, //顯示定位按鈕,預設:true showMarker: false, //定位成功後在定位到的位置顯示點標記,預設:true extensions:'all' }) map.addControl(geolocation); geolocation.getCurrentPosition(); AMap.event.addListener(geolocation, 'complete', function(data){ positionPicker.start(); });//返回定位資訊 }) positionPicker.on('success', function(positionResult){ vm.result=positionResult.regeocode.pois; vm.address=positionResult.regeocode.formattedAddress; vm.center=[positionResult.position.lng,positionResult.position.lat] }) positionPicker.on('fail', function(failResult){ console.log(failResult) }) // positionPicker.start(); }) }, addRadius(){ this.radius+=10; }, startSearch() { let vm=this; let map=this.amapManager.getMap(); this.toSearch=true; AMapUI.loadUI(['misc/PoiPicker'], function(PoiPicker) { var poiPicker = new PoiPicker({ input: 'search', //輸入框id }); //監聽poi選中資訊 poiPicker.on('poiPicked', function(poiResult) { //使用者選中的poi點資訊 vm.center=[poiResult.item.location.lng,poiResult.item.location.lat] }); }); }, } };</script>

說明:

    拖拽選點使用的是UI元件裡面的misc/PositionPicker,new一個positionPicker例項,對拖拽進行配置,可以選擇拖拽地圖還是marker,具體配置請自行參照參考手冊點選開啟連結,此處以拖拽地圖為例,

positionPicker例項有success方法和fail方法,分別對應拖拽選址成功和失敗,返回的引數為拖拽後的地址以及周邊,失敗資訊。
定義好後,positionPicker.start(),則可以開始拖拽(若不呼叫開始方法,則無法進行拖拽)
有兩種寫法(JS中已經給註釋)
1,地圖載入完成後,即在init方法中,直接進行定義
2,地圖init完成後  記錄當前map例項,監控map例項,若map初始化完成,則呼叫方法,進行相關操作
此處以第2中為例

監控map例項,當map例項存在時,將中心點定位到當前裝置所在地點,定位成功後啟動拖拽選擇功能

拓展:

若只使用定位功能

可以在el-amap上繫結plugin屬性,

:plugin="plugin"

在data中進行定位外掛繫結,配置定位的引數

// plugin: [{ //方法一 // pName: 'Geolocation', // events: { // init(o) { // // o 是高德地圖定位外掛例項 // o.getCurrentPosition((status, result) => { // console.log(status); // console.log(result); // if (result && result.position) { // self.lng = result.position.lng; // self.lat = result.position.lat; // self.center = [self.lng, self.lat]; // self.loaded = true; // self.$nextTick(); // } // }); // } // } // }]

搜尋

此處使用的是UI元件裡面的'misc/PoiPicker' new一個PoiPicker例項並繫結搜尋框,選中的搜尋出來的某一條結果,講改結果的經緯路設為中心點,即可實現搜尋選擇地址的效果

效果如下:


此案例的git地址:前往git

相關推薦

VUE——自動定位+選址+搜尋選址

地圖載入完成後,進行自動定位到裝置當前所在位置(顯示當前周邊),拖拽地圖進行選擇地址,點選搜尋按鈕,搜尋框內輸入時會提示相關點,通過搜尋結果進行搜尋選擇地址元件部分:<template> <div> <button @click="add

高德地圖 自動定位+選址 +搜尋選址

功能:使用高德地圖實現自動定位,以及客戶拖拽選址和搜尋指定地址的功能條件:引入高德地圖及相關js檔案效果:           js:    var lat,lng    AMapUI.loadUI(['misc/PositionPicker','misc/PoiPicker

vue draggable 火狐搜尋問題

最近在使用vuedraggable做導航時候,谷歌拖拽是沒問題的,但是在火狐測試時候,拖拽時候是可以成功,但是火狐還是打開了一個新的tab,並且搜尋了,一開始想著是阻止預設行為,但是在@end時間中阻止了預設行為,使用vue的.prevent.stop也是不行, 後來各種搜

vue 自定義指令

win input app ctrl off title nbsp ini sca <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <t

vue-draggable-resizable 縮放插件

default () fault sel ali call ets bsp tor 安裝: npm install --save vue-draggable-resizable 使用: <template> <div style="height: 5

基於Vue實現可以排序的樹形表格

專案需要一個可以拖拽排序的樹形表格,github上搜了一下,併為找到,大部分都不支援拖拽,所以自己實現了一個簡單的元件,已開源 原始碼在這裡,併發布到npm上,如果有類似需求可以試一下,chrome上沒有任何問題 效果圖如下: drag-tree-table 使用方式

基於Vue實現可以的樹形表格(原創)

  因業務需求,需要一個樹形表格,並且支援拖拽排序,任意未知插入,github搜了下,真不到合適的,大部分樹形表格都沒有拖拽功能,所以決定自己實現一個。這裡分享一下實現過程,專案原始碼請看github,外掛已打包封裝好,釋出到npm上  本博文會分為兩部分,第一部分為使用方式,第二部分為實現方式 安裝方式

vue實現div互換位置

template模板 <transition-group tag="div" class="container"> <div class="item" v-for="(item,index) in items" :key="item.key" :style="{ba

解決VUE自定義指令時 onmouseup 與 click事件衝突

功能描述: 如圖,右側懸浮選單按鈕,只支援上下方向拖動,點選時展開或關閉選單。 BUG說明: 滑鼠上下方向拖拽,如果鬆開時滑鼠位於懸浮按鈕上會預設執行click事件,經驗證,click事件與mouse事件的執行順序為onmousedown =》onmouseup =》on

vue模塊實現示例代碼

off lan 現在 簡單 comm etl nbsp xhtml www 正巧在之前面試中遇到問實現拖拽效果 當時面試的時候簡單回答了實現的方式與邏輯。 現在閑來無事,把這個東西實現了一下。 原理很簡單,寫的很方便。 數據驅動,建立一個數組,數組初始長度為1 拖

vue中實現百度地圖地圖定位功能

.com 元素 偏移量 locals 進行 函數 nco 查看 page 效果如果所示,拖動地圖。中間圖標不動,並且自動獲取地圖當前中心點的經緯度。然後就可以用經緯度做其他的操作了。。。首先查看了百度地圖的api。能實現這個功能最貼近的就是marker。marker

Vue實現浮動按鈕元件 - 頁面滾動時自動隱藏 - 可

效果圖 說明 本文可能有點囉嗦了... 元件難點 如何監聽滾動完成事件 移動端如何監聽拖拽事件 前置條件 為了充分發揮vue的特性,我們不應該通過ref來直接操作dom,而是應該通過修改資料項從而讓vue自動更新dom。因此,我們這樣編寫template。 <templa

Android 自定義可View,界面渲染刷新後不會自動回到起始位置

AD att starty attrs floating blog body .get dmi 以自定義ImageView為例: /** * 可拖拽ImageView * Created by admin on 2017/2/21. */ public class

Vue 組件總結 (一、組件 Vue-draggable)

Vue-draggable vue 一、vue-draggable 安裝使用npm地址: https://www.npmjs.com/package/vuedraggable 二、表格拖拽使用, 舉例: <table class="table table-co

vue的移動app項目中,自定義指令的問題

喜歡 end direct 需要 不支持 rect 兼容 left dir 使用vue的都知道vue有一個自定義指令,我比較喜歡的就是拖拽的自定義指令,感覺挺方便的! //組件內的拖拽指令 directives: { //組建內自定義指令 drag: {

JavaScript--百度地圖定位,可

event 控件 int pla location view api 事件 ont <html> <head> <meta http-equiv="Content-Type" content="text/html; char

vue視頻: 自定義指令 && && 自定義鍵盤信息

dfa 數據 top sta option box -s con v-for v-textv-forv-html 指令: 擴展html語法 自定義指令:1. 自定義屬性指令: Vue.directive(指令名稱,function(參數){ this.el

VueDraggable外掛

Draggable為基於Sortable.js的vue元件,用以實現拖拽功能。 具體說明,請參考:https://www.npmjs.com/package/vuedraggable npm官方演示: vuedraggable特性: 支援觸控裝置 支援拖拽和選擇

vue下使用echarts折線圖及其橫座標功能

vue頁面中使用折線圖,並且有時間段篩選。因此就需要用到橫座標的拖拽功能。 介面效果如下: 現在來看這個效果的實現程式碼: drawLine() { let that = this, lineDate = [], dispatchCount = [

vue下使用echarts折線圖及其橫坐標功能

旋轉 tip pos 需要 頁面 技術 too ger draw vue頁面中使用折線圖,並且有時間段篩選。因此就需要用到橫坐標的拖拽功能。 界面效果如下: 現在來看這個效果的實現代碼: drawLine() { let that = this,