首頁 > 軟體

Vue接入高德地圖的完整範例

2022-06-14 22:00:36

前言

Vue 使用高德地圖,實現縮放,滑鼠繪製,測距、測面積、行政區域範圍繪製、關鍵詞查詢等操作。

參考資料

高德地圖API官網:https://lbs.amap.com/

高德地圖2.0參考手冊:https://lbs.amap.com/api/jsapi-v2/documentation#pixel

高德地圖2.0範例程式碼:https://lbs.amap.com/demo/list/jsapi-v2

Vue接入高德地圖

參照

首相要在index.html檔案中引入高德地圖。

<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=您申請的key值&plugin=AMap.ToolBar"></script>

使用

在需要寫地圖的頁面中新增一個div用來展示地圖,記得為這個div設定高度和寬度,不然顯示不出來。

<div id="mapDiv"></div>

然後寫 TS 程式碼把地圖顯示出來。

	  // 載入地圖
      initMap() {
        map = new AMap.Map('mapDiv', {
          zoom: 11,//級別
          center: [116.34703902, 40.48188],//中心點座標
          viewMode: '3D'//使用3D檢視
        });
      },

然後地圖就出現了。

實現點選按鈕縮放功能

首先寫兩個靜態按鈕,縮放也很簡單,就兩行程式碼就可以了。

地圖放大

map.zoomIn()

地圖縮小

map.zoomOut()

測量距離

測量距離稍微麻煩點,但是也還好其實。

首先我們要在初始化地圖完成之後,建立一個滑鼠繪製工具。

    // 測距、測面積使用
    mouseTool = new AMap.MouseTool(map);

MouseTool 這個外掛需要在index.html檔案的script中引入一下,就是plugin引數後邊加就可以,用英文的逗號隔開。

<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=您申請的key值&plugin=AMap.ToolBar,AMap.MouseTool"></script>

然後寫一個按鈕“測距”,點選的時候就執行測距方法。

   // 開始測距
   start() {
       mouseTool.rule({
            startMarkerOptions: {//可預設
              icon: new AMap.Icon({
                size: new AMap.Size(19, 31),//圖示大小
                imageSize: new AMap.Size(19, 31),
                image: "//webapi.amap.com/theme/v1.3/markers/b/start.png"
              }),
              offset: new AMap.Pixel(-9, -31)
            },
            endMarkerOptions: {//可預設
              icon: new AMap.Icon({
                size: new AMap.Size(19, 31),//圖示大小
                imageSize: new AMap.Size(19, 31),
                image: "//webapi.amap.com/theme/v1.3/markers/b/end.png"
              }),
              offset: new AMap.Pixel(-9, -31)
            },
            midMarkerOptions: {//可預設
              icon: new AMap.Icon({
                size: new AMap.Size(19, 31),//圖示大小
                imageSize: new AMap.Size(19, 31),
                image: "//webapi.amap.com/theme/v1.3/markers/b/mid.png"
              }),
              offset: new AMap.Pixel(-9, -31)
            },
            lineOptions: {//可預設
              strokeStyle: "solid",
              strokeColor: "#FF33FF",
              strokeOpacity: 1,
              strokeWeight: 2
            }
            //同 RangingTool 的 自定義 設定,預設為預設樣式
          });
    }

    //  停止測距
    stop() {
		mouseTool.close(true)//關閉,並清除覆蓋物
	}

測量面積

測量面積和測距類似。

	// 開始測面積
	start() {
		mouseTool.measureArea({
          strokeColor: '#80d8ff',
          fillColor: '#80d8ff',
          fillOpacity: 0.3
       });
	}

	// 停止測面積
	stop() {
		mouseTool.close(true)//關閉,並清除覆蓋物
	}

很簡單吧!

行政區劃查詢渲染

這個也很簡單哈寶寶們!

首先也是走介面去獲取行政區劃的範圍啊。

需要用到這個外掛AMap.DistrictSearch,和測距一樣在index.html中引入一下。

然後在初始化地圖完成的時候範例化一下。

   // 搜尋行政區
   district = new AMap.DistrictSearch(opts);

首先寫一個輸入框,用來輸入查詢的行政區劃的名稱,比如輸入“北京”,然後點選按鈕走下面的方法來查詢北京行政區劃的範圍資訊。

	  // 行政區劃搜尋
      seachArea() {
        if (this.areaInput === "") {
          map.remove(areaPolygons)//清除上次結果
          return;
        }
        district.search(this.areaInput, (status, result) => {
          map.remove(areaPolygons)//清除上次結果
          areaPolygons = [];
          var bounds = result.districtList[0].boundaries;
          if (bounds) {
            for (var i = 0, l = bounds.length; i < l; i++) {
              //生成行政區劃polygon
              var polygon = new AMap.Polygon({
                strokeWeight: 3,
                path: bounds[i],
                fillOpacity: 0,
                fillColor: '#80d8ff',
                strokeColor: 'red'
              });
              areaPolygons.push(polygon);
            }
          }
          map.add(areaPolygons)
          map.setFitView(areaPolygons);//視口自適應
        });
      },

關鍵字搜尋

這個其實和行政區劃查詢差不多。

首先呢,需要在地圖初始化完成之後呢,建立一個關鍵字查詢的範例。

		// 關鍵字搜尋
        AMap.plugin(["AMap.PlaceSearch"], () => {
          //構造地點查詢類
          placeSearch = new AMap.PlaceSearch({
            pageSize: 50, // 單頁顯示結果條數
            pageIndex: 1, // 頁碼
            autoFitView: false // 是否自動調整地圖視野使繪製的 Marker點都處於視口的可見範圍
          });
        });

這個還有其他的引數,可根據官方檔案自己判斷挑選使用呀!

有一個輸入框,輸入要查詢的關鍵字,然後一個按鈕來走介面查詢相關的關鍵字。然後會返回給你一個列表包含著關鍵字搜尋回來的資料。

	searchKeyWord() {
	   placeSearch.search("北京", (state, data) => {
          this.total = 0
          let dataList = data
          switch (dataList.info) {
            case 'OK':
              console.log("-------->", dataList.poiList.pois)
              break;
            case 'TIP_CITIES':
              console.log("-------->", dataList.cityList)
              break;
          }
        });
	}

上邊 如果 info 為 OK,標識返回的是地點列表,如果是 TIP_CITIES,標識返回的是在下面這些城市裡面有關於搜尋鍵碼的相關資料。

比如搜尋北京,返回地點列表。

比如搜尋“動物園”,返回相關城市列表。

滑鼠繪製區域

這個簡單,就是點選一個按鈕開始繪製多邊形。

	  // 繪製區域
      startPolygon() {
        polyTool = new AMap.MouseTool(map);
        polyTool.polygon({
          strokeColor: "#1791fc",
          strokeOpacity: 1,
          strokeWeight: 1,
          fillColor: '#1791fc',
          fillOpacity: 0.4,
          strokeStyle: "solid",
          extData: {
            id: '123'
          }
        })
        polyTool.on('draw', (event) => {
          let poly = event.obj   // 繪製完多邊形實力物件
          console.log('繪製圖形頂點資訊列表--------> ', poly.getOptions())
          console.log('繪製圖形的自定義屬性--------> ', poly.getOptions().path)
          polyTool.close()
          polyTool = null
        })
      },

完成了兄弟們!

總結

到此這篇關於Vue接入高德地圖的文章就介紹到這了,更多相關Vue接入高德地圖內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com