国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記錄--仿貝殼地圖畫圈找房功能實現(xiàn)(高德地圖)

這篇具有很好參考價值的文章主要介紹了記錄--仿貝殼地圖畫圈找房功能實現(xiàn)(高德地圖)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

這里給大家分享我在網(wǎng)上總結(jié)出來的一些知識,希望對大家有所幫助

記錄--仿貝殼地圖畫圈找房功能實現(xiàn)(高德地圖)

?

仿貝殼地圖畫圈找房功能實現(xiàn)(高德地圖)

前言

在最近租房時,看到貝殼找房上線了一個地圖畫圈找房的功能,感覺很是新奇。接觸地圖開發(fā)也有很長一段時間了,以前大部分都是基于web pc端開發(fā),所以一般遇到這種圈選,繪制多邊形圓形都是直接基于官方API直接修改使用的,對于PC端鼠標(biāo)操作來說,現(xiàn)有的交互用起來已經(jīng)很不錯了,但是對于H5移動端來說,只能通過手指觸摸來模擬鼠標(biāo)滑動,直接使用現(xiàn)有的API對于移動端交互體驗來說并不是特別好。因此,看到了貝殼找房上這一新穎的功能,確實讓我眼前一亮。話不多說,直接開搞,自己手動實現(xiàn)一個看看。有需要的小伙伴可以直接查看源碼demo:gitee.com/fcli/map-ed…

效果圖如下:

記錄--仿貝殼地圖畫圈找房功能實現(xiàn)(高德地圖)

實現(xiàn)思路

剛看到這個功能時,腦海里閃過一個想法,點成線、線成面。既然是線,那肯定是由一堆點組成的,那最終的圈選的面,也是由線包圍起來的。然后一頓噼里啪啦操作,當(dāng)我在PC端模擬的時候發(fā)現(xiàn),并沒有那么絲滑,這不經(jīng)讓我思考如此絲滑的滑動體驗是怎么實現(xiàn)的,難道是通過畫板canvas之類的,然后通過獲取繪制的圈范圍再和地圖經(jīng)緯度重合計算。事實證明,我完全想多了,當(dāng)我把它放到H5上時,發(fā)現(xiàn)操作起來很絲滑,繪制的線段也是平滑的,這讓我醍醐灌頂。一頓測試發(fā)現(xiàn)PC端監(jiān)聽 mouseMove事件并沒有移動端的touchmove事件的觸發(fā)的那么頻繁,像是瀏覽器有節(jié)流之類的操作。

主要代碼

地圖初始化

首先,我使用vue3腳手架,所以在引入地圖時與官方demo不太一樣,通過createElement將地圖API加載到頁面上,并在地圖加載完畢后再觸發(fā)對應(yīng)的地圖操作。

onMounted(() => {
  //創(chuàng)建了一個回調(diào)函數(shù),高德地圖加載完畢會調(diào)用
  window.onload = () => {
    // 所有關(guān)于地圖的邏輯全部都要寫在這個回調(diào)里面
    // 保證高德地圖加載完畢
    myMap.value = new AMap.Map('map', { resizeEnable: true, center: [121.429516, 31.151997], zoom: 13 });
    drawMap();
  };
  // key是申請的值
  let url = 'https://webapi.amap.com/maps?v=2.0&key=0cc611512938634634bac0969fdef3c1';
  //創(chuàng)建一個 script dom元素
  let jsapi = document.createElement('script');
  //設(shè)定script標(biāo)簽屬性
  jsapi.src = url;
  //將API文件引入頁面中,加載完畢以后會調(diào)用函數(shù)
  document.head.appendChild(jsapi);
})

監(jiān)聽繪開始制地圖

當(dāng)開始繪制地圖時,先將地圖固定,即:不可縮放、不可拖動... 同時將之前繪制的圖層remove

myMap.value.on('touchstart', () => {
    myMap.value.setStatus({
      showIndoorMap: false,
      dragEnable: false,
      keyboardEnable: false,
      doubleClickZoom: false,
      zoomEnable: false,
      rotateEnable: false
    });
    if (lastPolyLine.value) {
      myMap.value.remove(lastPolyLine.value)
    }

    if (polygonAfterDraw.value) {
      myMap.value.remove(polygonAfterDraw.value)
    }
    lastPolyLine.value = null;
    polyPointArray.value = [];
    isMouseDown.value = true;
  });

監(jiān)聽繪制過程

當(dāng)開始繪制時,監(jiān)聽touchmove事件,記錄每次move觸發(fā)的點并保存,通過這些點的集合繪制多邊形,每次繪制多邊形之前清除之前繪制的線段,在視覺上就能看到一條連續(xù)的線。

myMap.value.on('touchmove', (e: any) => {
    if (isMouseDown.value) {
      const point = [e.lnglat.lng, e.lnglat.lat]
      polyPointArray.value.push(point);
      if (lastPolyLine.value) {
        myMap.value.remove(lastPolyLine.value)
      }

      const polyline = new AMap.Polyline({
        path: polyPointArray.value, //多邊形輪廓
        isOutline: true,
        strokeColor: "#3366FF",
        strokeOpacity: 1,
        strokeWeight: 2,
        // 折線樣式還支持 'dashed'
        strokeStyle: "solid",
        // strokeStyle是dashed時有效
        strokeDasharray: [15, 5],
        lineJoin: 'round',
        lineCap: 'round',
        zIndex: 50,
      });
      myMap.value.add([polyline])
      lastPolyLine.value = polyline;
    }
  })

繪制結(jié)束

繪制結(jié)束,使用線段的點生成一個面的范圍,通過這個范圍就能獲取到范圍內(nèi)的信息了,最后恢復(fù)地圖正常狀態(tài)。

document.addEventListener('touchend', () => {
    if (isMouseDown.value) {
      // 退出畫線狀態(tài)
      isMouseDown.value = false;
      // 添加多邊形覆蓋物,設(shè)置為禁止點擊
      polygonAfterDraw.value = new AMap.Polygon({
        fillOpacity: 0.5,
        fillColor: '#7bccc4',
        strokeOpacity: 1,
        strokeColor: '#3366FF',
        strokeWeight: 4,
        strokeStyle: 'solid',
        strokeDasharray: [5, 5],
        //多邊形數(shù)據(jù)
        path: polyPointArray.value //多邊形輪廓
      });

      myMap.value.add(polygonAfterDraw.value);
      if (lastPolyLine.value) {
        myMap.value.remove(lastPolyLine.value)
      }

      myMap.value.setStatus({
        showIndoorMap: true,
        dragEnable: true,
        keyboardEnable: true,
        doubleClickZoom: true,
        zoomEnable: true,
        rotateEnable: true
      });

    }
  });

本文轉(zhuǎn)載于:

https://juejin.cn/post/7306146705971085350

如果對您有所幫助,歡迎您點個關(guān)注,我會定時更新技術(shù)文檔,大家一起討論學(xué)習(xí),一起進步。

?記錄--仿貝殼地圖畫圈找房功能實現(xiàn)(高德地圖)文章來源地址http://www.zghlxwxcb.cn/news/detail-747383.html

到了這里,關(guān)于記錄--仿貝殼地圖畫圈找房功能實現(xiàn)(高德地圖)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Android中集成高德地圖SDK實現(xiàn)地圖定位和導(dǎo)航功能(二)

    Android中集成高德地圖SDK實現(xiàn)地圖定位和導(dǎo)航功能(二)

    我們接著上一篇文章開始繼續(xù)實現(xiàn)android中集成高德地圖的SDK實現(xiàn)地圖 定位,搜索,導(dǎo)航的功能 可以參考官方文檔 android6.0以后需要動態(tài)申請權(quán)限 這里我就不做詳細(xì)解釋了 在androidMainfest文件的appliation 標(biāo)簽中添加之前在高的開發(fā)者平臺上的key,代碼如下 我的key是ba63b… 首先要

    2024年02月09日
    瀏覽(26)
  • Android中集成高德地圖SDK實現(xiàn)地圖定位和導(dǎo)航功能(一)

    Android中集成高德地圖SDK實現(xiàn)地圖定位和導(dǎo)航功能(一)

    名稱和應(yīng)用類型隨便填 1.添加key 2.獲取SHA1值 2.1.使用windwos+R 輸入cmd 打開控制窗口 輸入 where keytool 獲取keytool的路徑 2.2.在環(huán)境變量中配置keytools 的路徑 2.3 然后接著cmd窗口中輸入 keytool -v -list -keystore 后面是你簽名證書的我的是keytool -v -list -keystore C:Users86181.androiddebug.keystor

    2024年02月12日
    瀏覽(30)
  • Android高德地圖定位實現(xiàn)簽到打卡功能(全網(wǎng)最詳細(xì)+收藏)

    Android高德地圖定位實現(xiàn)簽到打卡功能(全網(wǎng)最詳細(xì)+收藏)

    前言 ? ? ? ? 本章根據(jù)高德地圖API,實現(xiàn)打卡簽到功能。用到了定位SDK 和地圖SDK、覆蓋物。打卡范圍圖形可以支持多種形狀,如: 圓形 、 長方形 、 多邊形。 核心邏輯: ? ? 獲取當(dāng)前定位信息,然后通過Marker繪制小圖標(biāo)進行展示,并在onLocationChanged回調(diào)方法中不斷重新繪

    2024年02月03日
    瀏覽(25)
  • flutter實現(xiàn)調(diào)用原生安卓的高德地圖導(dǎo)航功能(插件化)

    flutter實現(xiàn)調(diào)用原生安卓的高德地圖導(dǎo)航功能(插件化)

    查看了高德地圖flutter插件的文檔,都沒有能支持導(dǎo)航的功能,并且flutter的高德插件支持的功能特別少,沒辦法,只能使用安卓原生的導(dǎo)航,flutter去調(diào)用了,具體實現(xiàn)方式如下: 創(chuàng)建 Flutter 插件 使用--template=plugin 聲明創(chuàng)建的是同時包含了 iOS 和 Android 代碼的 plugin; 使用--o

    2024年02月16日
    瀏覽(20)
  • vue3使用高德地圖實現(xiàn)點擊獲取經(jīng)緯度以及搜索功能

    vue3使用高德地圖實現(xiàn)點擊獲取經(jīng)緯度以及搜索功能

    ?話不多說直接上干活 在此之前你需要有高德地圖的 key,這個自己去申請即可 1,首先需要在終端安裝 2,準(zhǔn)備一個容器 3,在需要使用的頁面引入剛才安裝的 4, 5,綁定input框 最后附上css代碼 ???????這個時候就已經(jīng)可以了

    2024年02月12日
    瀏覽(25)
  • 微信小程序使用高德地圖實現(xiàn)檢索定位附近周邊的POI功能示例

    微信小程序使用高德地圖實現(xiàn)檢索定位附近周邊的POI功能示例

    ? ? ? ?解壓下載的文件得到 amap-wx.js ,在創(chuàng)建的項目中,新建一個名為 libs 目錄,將 amap-wx.js 文件拷貝到 libs 的本地目錄下。 登錄微信公眾平臺,在 \\\"設(shè)置\\\" → \\\"開發(fā)設(shè)置\\\" 中設(shè)置 request 合法域名,將? https://restapi.amap.com ?中添加進去,如下圖所示: ? ?

    2024年02月03日
    瀏覽(110)
  • 記錄--手把手教你Vue+ECharts+高德地圖API實現(xiàn)天氣預(yù)報數(shù)據(jù)可視化

    記錄--手把手教你Vue+ECharts+高德地圖API實現(xiàn)天氣預(yù)報數(shù)據(jù)可視化

    所謂數(shù)據(jù)可視化,我們可以理解為從宏觀角度來看一眼就能看出來整個數(shù)據(jù)的占比,走向。對于數(shù)據(jù)可視化,很多互聯(lián)網(wǎng)公司是很看重這一塊的,包括大廠;就比如阿里的淘寶,雙十一的時候往往就需要將消費者的一些數(shù)據(jù)通過圖的形式展現(xiàn)出來。接下來我們就來實現(xiàn)一個天

    2024年02月07日
    瀏覽(23)
  • vue 使用高德地圖實現(xiàn)自定義選取起點和終點功能,支持搜索地址跳轉(zhuǎn)定位(保姆級教程)

    vue 使用高德地圖實現(xiàn)自定義選取起點和終點功能,支持搜索地址跳轉(zhuǎn)定位(保姆級教程)

    1. 起點終點選擇 ?2. 地址搜索 ? 1. 獲取高德地圖key 1.1? 訪問高德地圖官網(wǎng)注冊完成后登錄,進入控制臺 ?1.2? 左側(cè) 應(yīng)用管理-我的應(yīng)用,點擊創(chuàng)建新應(yīng)用 1.3 點擊添加 ? 1.4 選擇 Web端(JS API)? 1.5 創(chuàng)建完成,得到key和安全密鑰 ? 2. 引入高德地圖npm包 提示:以下代碼全部在*.vu

    2024年02月04日
    瀏覽(19)
  • 申請高德地圖API【流程記錄】

    申請高德地圖API【流程記錄】

    現(xiàn)在我們需要使用高德地圖的api進行功能的實現(xiàn),這就需要我們申請一個高德地圖的key 1.進入官網(wǎng) 登錄賬號 點擊高德開放平臺 | 高德地圖API (amap.com)。進行登錄 選擇控制臺 注冊為開發(fā)者 填寫郵箱獲取驗證碼后,進行支付寶掃碼進行實名認(rèn)證 注冊完成 點擊確認(rèn)即可 2.申請

    2024年01月17日
    瀏覽(21)
  • web JS高德地圖標(biāo)點、點聚合、自定義圖標(biāo)、自定義窗體信息、換膚等功能實現(xiàn)和高復(fù)用性組件封裝教程

    web JS高德地圖標(biāo)點、點聚合、自定義圖標(biāo)、自定義窗體信息、換膚等功能實現(xiàn)和高復(fù)用性組件封裝教程

    突然發(fā)現(xiàn)官方更新點聚合調(diào)用方式多包一層mapObj.plugin([“AMap.MarkerClusterer”],fn)來加載聚合功能,之前直接通過new方式不生效,具體可以看下第6點和示例代碼已做更新,感謝讀者反饋。 本文將講述如何利用高德地圖JS API實現(xiàn)地圖標(biāo)點、聚合點、自定義圖標(biāo)、點擊窗體信息展

    2024年02月04日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包