前端vue地圖定位並測算當前定位離目標位置距離可用於簽到打卡

来源:https://www.cnblogs.com/ccVue/archive/2023/06/10/17470725.html
-Advertisement-
Play Games

📝背景 公司高級表單組件ProForm高階組件都建立在jsx的運用配置上,項目在實踐落地過程中積累了豐富的經驗,也充分感受到了jsx語法的靈活便捷和可維護性強大,享受到了用其開發的樂趣,獨樂樂不如眾樂樂,為了幫助大家更好的運用jsx,開發提效,特此總結分享。 💎效果對比 以前 以往我們開發一個列 ...



前端vue地圖定位並測算當前定位離目標位置距離可用於簽到打卡, 下載完整代碼請訪問uni-app插件市場地址: https://ext.dcloud.net.cn/plugin?id=12974

效果圖如下:

 


 
 

#

#### 使用方法

```使用方法

<!--

// 騰訊地圖key註冊地址(針對H5端,manifest.json中web配置,配置定位與地圖 若是微信小程式只需配置微信小程式許可權配置):

  https://lbs.qq.com/dev/console/application/mine

-->

<!-- scale縮放級別,取值範圍為3-20 longitude:地圖中心精度 latitude:地圖中心緯度 markers:覆蓋物 show-location:是否顯示定位-->

<map class="mapV" :latitude="infoDict.lat"

:longitude="infoDict.lon" scale='6' :markers="covers" show-location=false>

</map>

<!--

        page.json配置以下

// 許可權設置

"permission": {

"scope.userLocation": {

"desc": "您的位置信息將用於該活動簽到"

}

}

-->

```

#### HTML代碼部分

```html

<template>

<view class="content">

<scroll-view class="scrollV" scroll-y="true">

<view class="inputView">

<text class="leftTitle">活動內容</text>

</view>

<view class="inputView">

{{"去清遠古龍峽漂流"}}

</view>

<view class="inputView">

<text class="leftTitle">簽到須知</text>

</view>

<view class="inputView">

{{'距離活動地10km內可簽到成功'}}

</view>

<!--

// 騰訊地圖key註冊地址(針對H5端,manifest.json中web配置,配置定位與地圖 若是微信小程式只需配置微信小程式許可權配置):

  https://lbs.qq.com/dev/console/application/mine

-->

<!-- scale縮放級別,取值範圍為3-20 longitude:地圖中心精度 latitude:地圖中心緯度 markers:覆蓋物 show-location:是否顯示定位-->

<map class="mapV" :latitude="infoDict.lat" :longitude="infoDict.lon" scale='6' :markers="covers"

show-location=false>

</map>

</scroll-view>

<view class="btnview" @tap="goSignIn">{{'簽到' + distanceStr}}</view>

</view>

</template>

```

#### JS代碼 (引入組件 填充數據)

```javascript

<script>

import Vue from 'vue'

export default {

data() {

return {

// 覆蓋物

covers: [],

// 目標經緯度信息

infoDict: {

'lon': '113.17',

'lat': '23.8'

},

// 我的定位經緯度信息

myPinInfo: {},

// 預設距離為負數

distance: -9999,

distanceStr: ''

}

},

onShow() {

// 獲取當前位置

this.getlocation();

},

methods: {

getlocation() {

let myThis = this;

console.log('獲取位置開始');

uni.getLocation({

type: 'gcj02',

success: function(res) {

myThis.myPinInfo = res;

console.log('當前位置的經度:' + res.longitude);

console.log('當前位置的緯度:' + res.latitude);

myThis.covers = [{

latitude: myThis.infoDict.lat,

longitude: myThis.infoDict.lon,

width: 30,

height: 30,

id: 20000,

iconPath: '../../static/activity_pin.png'

},

{

latitude: myThis.myPinInfo.latitude,

longitude: myThis.myPinInfo.longitude,

width: 30,

height: 30,

id: 20001,

iconPath: '../../static/people_pin.png'

}

];

myThis.distance = myThis.getDistance(myThis.infoDict.lat, myThis.infoDict.lon, myThis

.myPinInfo.latitude, myThis.myPinInfo.longitude)

myThis.distanceStr = '(當前距離' + myThis.distance + '米)';

}

});

},

// 計算兩點距離

getDistance(lat1, lng1, lat2, lng2) {

let EARTH_RADIUS = 6378.137;

let radLat1 = this.rad(lat1);

let radLat2 = this.rad(lat2);

let a = radLat1 - radLat2;

let b = this.rad(lng1) - this.rad(lng2);

let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +

Math.cos(radLat1) * Math.cos(radLat2) *

Math.pow(Math.sin(b / 2), 2)));

s = s * EARTH_RADIUS;

//s = Math.round(s * 10000d) / 10000d;

s = Math.round(s * 10000) / 10000;

s = s * 1000; //乘以1000是換算成米

return s;

},

// 弧度計算

rad(d) {

return d * Math.PI / 180.0;

},

// 立即簽到

goSignIn(e) {

if (this.distance > 10000) {

uni.showModal({

title: '溫馨提示',

content: '您的當前位置距離活動目的地太遠, 無法簽到',

showCancel: false

})

return;

} else if (this.distance < 0) {

uni.showModal({

title: '溫馨提示',

content: '您的定位許可權未打開, 請點擊小程式右上角···菜單按鈕, 然後點擊設置,打開定位許可權',

showCancel: false

})

return

}

},

}

}

</script>

```

#### CSS

```CSS

<style>

.content {

display: flex;

flex-direction: column;

height: 100%;

}

.scrollV {

width: 100vw;

}

.mapV {

width: calc(100vw);

height: 320px;

margin-top: 14px;

}

.leftTitle {

width: 284px;

height: 44px;

line-height: 44px;

font-size: 14px;

color: #333333;

}

.inputView {

flex-direction: row;

display: flex;

height: auto;

align-items: center;

margin-left: 13px;

width: calc(100vw - 30px);

padding: 2px 0px;

font-size: 13px;

color: #666666;

}

.btnview {

display: flex;

 

justify-content: center;

align-items: center;

color: #ffffff;

width: 100%;

height: 50px;

margin-top: 20px;

}

</style>

```

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # kafka 都有哪些特點? 高吞吐量,低延遲 可以熱擴展 併發度高 具有容錯性(掛的只剩1台也能正常跑) 可靠性高 # 在哪些場景下會選擇 kafka? kafka的一些應用 - 日誌收集:一個公司可以用kafka可以收集各種服務的log,通過kafka以統一介面服務的方式開放給各種consum ...
  • 一、資料庫連接 1、獲取資料庫實例連接數 select count(*) from pg_stat_activity; 2、獲取資料庫最大連接數 show max_connections 3、查詢當前連接數詳細信息 select * from pg_stat_activity; 4、查詢資料庫中各個 ...
  • MySQL資料庫安全評估工具MySQL Database Security Assessment Tool MySAT執行多項測試以分析資料庫配置和安全策略。MySAT可以幫助評估並因此提高MySQL資料庫的安全性。MySAT是一個簡單的SQL腳本,它易於理解,易於維護。MySAT的結果是一份HTM ...
  • 隨著數據量和數據複雜性的不斷增加,越來越多的企業開始使用OLAP(聯機分析處理)引擎來處理大規模數據並提供即時分析結果。在選擇OLAP引擎時,性能是一個非常重要的因素。 因此,本文將使用TPC-DS基準測試的99個查詢語句來對比開源的ClickHouse、Doris、Presto以及ByCon... ...
  • ## 懶人篇(搞機工具箱) 官網地址:[晨鐘網路科技 - 致力於開發小眾實用軟體 (jamcz.com)](http://jamcz.com/) 工具箱是一個GUI界面,集成abd環境,開箱即用,不用再折騰環境之類的,懶人必備,安裝包一共不到7MB。 ![image-2023052823061003 ...
  • # CSS三大特性 ## 1、繼承性 [CSS_特性繼承和層疊 - Bublly - 博客園 (cnblogs.com)](https://www.cnblogs.com/ZWeva/p/17471809.html) ## 2、層疊性 [CSS_特性繼承和層疊 - Bublly - 博客園 (cnb ...
  • # CSS特性 ## 1、繼承性 ##### 特性: 1、子元素有預設繼承父元素樣式的特點(**子承父業**) 2、可以繼承的常見屬性(文字控制屬性都可以繼承) 1.color 2.font-style、font-weight、font-size、font-family 3.text-indent, ...
  • # 一、顯示模塊 ## 1、塊級元素 #### 特點: 1.獨占一行(一行只能顯示一個) 2.寬度預設是父元素的寬度,高度預設由內容撐開 3.可以設置寬高 #### 例如: ``` div、p、h系列、ul、li、dl、dt、dd、form、header、.nav、footer. ``` ## 2、 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...