当前位置: 首页 > java >正文

让 Deepseek GPS测速

下面是一个简单的微信小程序GPS测速功能的实现代码,包括前端页面和后端逻辑。

1. 页面结构 (index.wxml)

<view class="container"><view class="speed-display"><text class="speed-value">{{speed}}</text><text class="speed-unit">km/h</text></view><view class="info-section"><view class="info-item"><text>经度:</text><text>{{longitude}}</text></view><view class="info-item"><text>纬度:</text><text>{{latitude}}</text></view><view class="info-item"><text>精度:</text><text>{{accuracy}}米</text></view></view><button bindtap="startGPS" type="primary" disabled="{{isRunning}}">开始测速</button><button bindtap="stopGPS" type="warn" disabled="{{!isRunning}}">停止测速</button>
</view>

2. 页面样式 (index.wxss)

.container {display: flex;flex-direction: column;align-items: center;padding: 20px;
}.speed-display {display: flex;align-items: baseline;margin: 40px 0;
}.speed-value {font-size: 60px;font-weight: bold;
}.speed-unit {font-size: 20px;margin-left: 5px;
}.info-section {width: 100%;margin: 30px 0;
}.info-item {display: flex;justify-content: space-between;margin: 10px 0;padding: 10px;background-color: #f5f5f5;border-radius: 5px;
}button {width: 80%;margin: 10px 0;
}

3. 页面逻辑 (index.js)

Page({data: {speed: '0.00',longitude: '--',latitude: '--',accuracy: '--',isRunning: false,gpsWatchId: null,lastPosition: null,lastUpdateTime: null},startGPS: function() {const that = this;// 检查是否已经授权wx.getSetting({success(res) {if (!res.authSetting['scope.userLocation']) {// 未授权,请求授权wx.authorize({scope: 'scope.userLocation',success() {that._startWatching();},fail() {wx.showToast({title: '需要位置权限',icon: 'none'});}});} else {// 已授权,开始监听that._startWatching();}}});},_startWatching: function() {const that = this;this.setData({isRunning: true,speed: '0.00'});// 开始监听位置变化const watchId = wx.startLocationUpdate({type: 'gcj02',success: () => {wx.onLocationChange(function(res) {that._updatePosition(res);});},fail(err) {console.error('启动位置监听失败', err);wx.showToast({title: '启动失败',icon: 'none'});that.setData({ isRunning: false });}});this.setData({ gpsWatchId: watchId });},_updatePosition: function(position) {const now = Date.now();let speed = 0;if (this.data.lastPosition && this.data.lastUpdateTime) {// 计算距离(米)const distance = this._calculateDistance(this.data.lastPosition.latitude, this.data.lastPosition.longitude,position.latitude,position.longitude);// 计算时间差(小时)const timeDiff = (now - this.data.lastUpdateTime) / 1000 / 3600;// 计算速度(公里/小时)if (timeDiff > 0) {speed = distance / 1000 / timeDiff;}}this.setData({speed: speed.toFixed(2),longitude: position.longitude.toFixed(6),latitude: position.latitude.toFixed(6),accuracy: position.accuracy.toFixed(0),lastPosition: position,lastUpdateTime: now});},// 计算两个坐标点之间的距离(米)_calculateDistance: function(lat1, lon1, lat2, lon2) {const R = 6371000; // 地球半径,单位米const dLat = (lat2 - lat1) * Math.PI / 180;const dLon = (lon2 - lon1) * Math.PI / 180;const a = Math.sin(dLat/2) * Math.sin(dLat/2) +Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) * Math.sin(dLon/2) * Math.sin(dLon/2);const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));return R * c;},stopGPS: function() {if (this.data.gpsWatchId) {wx.stopLocationUpdate({success: () => {wx.offLocationChange();this.setData({ isRunning: false,gpsWatchId: null});},fail(err) {console.error('停止位置监听失败', err);}});}},onUnload: function() {// 页面卸载时停止监听this.stopGPS();}
});

4. 配置文件 (app.json)

确保在app.json中声明了位置权限:

{"pages": ["pages/index/index"],"permission": {"scope.userLocation": {"desc": "你的位置信息将用于测速功能"}},"requiredPrivateInfos": ["getLocation", "onLocationChange", "startLocationUpdate"]
}

http://www.xdnf.cn/news/9405.html

相关文章:

  • 电脑革命家测试版:硬件检测,6MB 轻量无广告 清理垃圾 + 禁用系统更新
  • Oracle Linux 9 安装 EMCC 13.5:避坑细节与实战经验汇总!
  • GO——内存逃逸分析
  • Flutter、React Native、Unity 下的 iOS 性能与调试实践:兼容性挑战与应对策略(含 KeyMob 工具经验)
  • 云服务器是什么,和服务器有什么区别?
  • 系统赛数据库的一些记录
  • 【华为开发者空间 x DeepSeek】服务器运行Ollama并在本地调用
  • flutter简单自定义跟随手指滑动的横向指示器
  • Django数据库连接报错 django.db.utils.NotSupportedError: MySQL 8 or later is required
  • 代码输出题:异步事件循环
  • Spring boot 策略模式
  • YOLOv5 详解:从原理到实战的全方位解析
  • 35. 自动化测试开发之使用oracle连接池实现oracle数据库操作
  • 34. 自动化测试开发之使用mysql异步连接池实现mysql数据库操作
  • 碰一碰系统源码搭建
  • DH加密详解
  • 什么是PLM系统?PLM主要功能有哪些?2025主流PLM系统介绍
  • 第五十五节:综合项目实践-实时人脸美化滤镜
  • 三轴云台之积分分离PID控制算法篇
  • 【通关文件操作(上)】--文件的意义和概念,二进制文件和文本文件,文件的打开和关闭,文件的顺序读写
  • 鸿蒙运动开发实战:打造 Keep 式轨迹播放效果
  • Java Stream API 终止操作的详细解析
  • QML之Canvas
  • 数组名的大小理解
  • <b> 与 <span> 等行内元素添加 margin-top 或 margin-bottom 不生效问题
  • CarPropertyService 介绍
  • 【FAQ】spring boot 3 集成 nacos
  • pgsql 查看每张表大小
  • 创建vue项目
  • 3D Web轻量化引擎HOOPS Communicator实时协作功能深度解析