【微信小程序】地址逆编码,根据经纬度计算直线距离

地址逆编码

复制代码
getLatLngByAddress(address) {
    // 校验地址是否为空
    if (!address) {
      wx.showModal({
        title: '提示',
        content: '请输入有效的地址',
      })
      return;
    }

    // 高德地图地理编码接口配置
    const amapKey = '替换成你自己的Key!';
    const url = `https://restapi.amap.com/v3/geocode/geo?address=${encodeURIComponent(address)}&key=${amapKey}`;

    wx.showLoading({ title: '获取中...' });

    // 发起请求
    wx.request({
      url,
      method: 'GET',
      success: (res) => {
        wx.hideLoading();
        const { status, info, geocodes } = res.data;
        // 接口调用成功且返回有效地址解析结果
        if (status === '1' && geocodes && geocodes.length > 0) {
          const [locationInfo] = geocodes;
          const [longitude, latitude] = locationInfo.location.split(','); // 高德返回格式:经度,纬度
          this.calculateDistance(longitude, latitude);
        } else {
          app.toast(info || '未查询到该地址的经纬度');
        }
      },
      fail: (err) => {
        wx.hideLoading();
        this.setData({ errorMsg: '网络错误,请稍后重试' });
        console.error('请求失败:', err);
      }
    });
  },

根据经纬度计算直线距离

复制代码
// 核心:计算两个经纬度之间的距离(Haversine公式)
  calculateDistance(lon, lat) {
    const { longitude, latitude } = this.data;
    // 提取经纬度并转数字
    const lat1 = Number(lat);
    const lng1 = Number(lon);
    const lat2 = Number(latitude);
    const lng2 = Number(longitude);

    // 角度转弧度(Math.sin/cos需要弧度值)
    const radLat1 = Math.PI * lat1 / 180;
    const radLat2 = Math.PI * lat2 / 180;
    const radLng1 = Math.PI * lng1 / 180;
    const radLng2 = Math.PI * lng2 / 180;

    // 计算纬度差、经度差
    const deltaLat = radLat1 - radLat2;
    const deltaLng = radLng1 - radLng2;

    // Haversine公式核心计算
    let distance = 2 * Math.asin(
      Math.sqrt(
        Math.pow(Math.sin(deltaLat / 2), 2) +
        Math.cos(radLat1) * Math.cos(radLat2) *
        Math.pow(Math.sin(deltaLng / 2), 2)
      )
    );
    // 地球平均半径6371公里,计算最终距离(保留2位小数)
    distance = distance * 6371;
    distance = Math.round(distance * 100) / 100;
    console.log(12121, distance);
    this.setData({ distance });
  }
相关推荐
说私域2 小时前
基于AI智能名片链动2+1模式服务预约商城系统的社群运营与顾客二次消费吸引策略研究
大数据·人工智能·小程序·开源·流量运营
StarChainTech7 小时前
无人机租赁平台:开启智能租赁新时代
大数据·人工智能·微信小程序·小程序·无人机·软件需求
计算机毕设指导67 小时前
基于微信小程序的运动场馆服务系统【源码文末联系】
java·spring boot·微信小程序·小程序·tomcat·maven·intellij-idea
码农客栈8 小时前
小程序学习(十一)之uni-app和原生小程序开发区别
学习·小程序·uni-app
说私域9 小时前
基于AI客服链动2+1模式商城小程序的社群运营策略研究——以千人社群活跃度提升为例
人工智能·微信·小程序·私域运营
mqjFKmYf9 小时前
VSC整流系统定功率控制系统的MATLAB仿真模型(支持MATLAB 2014a及以上版本)
小程序
Json____10 小时前
使用uni-app开发抖音小程序遇到previewImage方法图片加载不出来解决方案
小程序·uni-app
枕咸鱼的猫10 小时前
【龙雏晴雨通】实时查看天气小程序
微信小程序
毕设源码-钟学长10 小时前
【开题答辩全过程】以 基于微信小程序教学评价平台的设计与实现为例,包含答辩的问题和答案
微信小程序·小程序
说私域11 小时前
基于AI智能名片链动2+1模式S2B2C商城小程序的流量运营策略研究
人工智能·微信·小程序·产品运营·流量运营