当前位置: 首页 > 知识库问答 >
问题:

javascript - vue 怎么通过经纬度来测算公里数?

云霖
2023-06-03

怎么通过经纬度 测算出公里数然后显示费用 每公里2.5元 求大神帮忙改进改进

<!-- @click="getLocation" -->
<template>
  <div>
      <baidu-map
        style="display:flex;flex-direction: column-reverse;" 
        id="allmap"
        @ready="mapReady"
        @click="getLocation"
        :scroll-wheel-zoom="true"
      >
  <div style="display:flex;justify-content:center;margin:15px">

出发:<bm-auto-complete v-model="searchJingwei" :sugStyle="{zIndex: 999999}">
<el-input  v-model="searchJingwei" style="width:300px;margin-right:15px" placeholder="输入地址"></el-input>
</bm-auto-complete>

目的地:<bm-auto-complete v-model="mdd" :sugStyle="{zIndex: 999999}">
<el-input  v-model="mdd" style="width:300px;margin-right:15px" placeholder="输入地址"></el-input>
</bm-auto-complete>
          <el-button type="primary" @click="getBaiduMapPoint">搜索</el-button>
        </div>
        <p>开始纬度:{{this.latitude}},{{this.longitude}}</p>
          <p>结束纬度:{{this.jslatitude}},{{this.jslongitude}}</p>
          <p>预计费用:</p>
           

        <bm-map-type :map-types="['BMAP_NORMAL_MAP', 'BMAP_HYBRID_MAP']" anchor="BMAP_ANCHOR_TOP_LEFT"></bm-map-type>
        <bm-marker v-if="infoWindowShow" :position="{lng: longitude, lat: latitude}">
          <bm-label content="" :labelStyle="{color: 'red', fontSize : '24px'}" :offset="{width: -35, height: 30}"/>
        </bm-marker>
        <bm-info-window :position="{lng: longitude, lat: latitude}" :show="infoWindowShow" @clickclose="infoWindowClose">
          <p>纬度:{{this.latitude}}</p>
          <p>经度:{{this.longitude}}</p>
        </bm-info-window>
      </baidu-map>
  </div>
</template>

<script>
export default {
  data () {
    return {
      searchJingwei:'',
      mdd:'',
      infoWindowShow:false,
      longitude:'',
      latitude:'',
      jslongitude:'',
      jslatitude:'',
      feiyong:'',
      point:''
    }
  },

  methods: {
    //地图初始化
    mapReady({ BMap, map }) {
      // 选择一个经纬度作为中心点
      this.point = new BMap.Point(113.27, 23.13);
      map.centerAndZoom("九江", 15);
      this.BMap=BMap
      this.map=map
    },
    //点击获取经纬度
    getLocation(e){
      this.longitude=e.point.lng
      this.latitude=e.point.lat
      this.jslongitude=e.point.lng
      this.jslatitude=e.point.lat
      this.infoWindowShow=true
      
      //console.log(this.latitude,this.latitude);
    },
    getBaiduMapPoint(){
      let that=this
      let myGeo = new this.BMap.Geocoder()
      myGeo.getPoint(this.searchJingwei,function(point){
        if(point){
          that.map.centerAndZoom(point,15)
          that.latitude=point.lat
          that.longitude=point.lng
          that.infoWindowShow=true
          
        }
        //console.log(that.latitude,that.longitude)
      }),
      myGeo.getPoint(this.mdd,function(point){
        if(point){
          that.map.centerAndZoom(point,15)
          that.jslatitude=point.lat
          that.jslongitude=point.lng
          that.infoWindowShow=true
        }

      })
      
      // let a = (map.getDistance(pointB.value, pointA.value) / 1000).toFixed(2)
      
    },
    //信息窗口关闭
    infoWindowClose(){
      this.latitude=''
      this.longitude=''
      this.infoWindowShow=false
    },
  },
}
</script>

<style  >
#allmap{
  height: 450px;
  width: 100%;
  margin: 10px 0;
}
</style>

共有3个答案

宣弘新
2023-06-03

百度地图经纬度获取详细地址以及经纬度计算距离

https://blog.csdn.net/qq_42396791/article/details/87801234
/*  
             * Lat1 Lung1 表示A点经纬度,Lat2 Lung2 表示B点经纬度; a=Lat1 – Lat2 为两点纬度之差 b=Lung1 
             * -Lung2 为两点经度之差; 6378.137为地球半径,单位为千米;  计算出来的结果单位为千米。
             * 通过经纬度获取距离(单位:千米)   
             * @param lat1   
             * @param lng1   
             * @param lat2   
             * @param lng2
             * @return
             */
            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;    
            }
燕寒
2023-06-03

百度地图:
通过官方提供的方法获取点的经纬度:

new BMap.Point(poi.point.lng, poi.point.lat)

/**
     * 计算两点间的距离
     * pt1 {lng:"12.34",lat:"3423"}第一个点的经纬度
     * pt2 {lng:"12.34",lat:"3423"}第二个点的经纬度
     * */
    getDistance:function(pt1,pt2){
        var map = new BMap.Map("container");
        var point1 = new BMap.Point(pt1.lng,pt1.lat);
        var point2 = new BMap.Point(pt2.lng,pt2.lat);
        var distance = map.getDistance(point1,point2);
        return distance;
    },
https://blog.csdn.net/forze_cq/article/details/97767972

用他人开发的库:

https://juejin.cn/post/7025435587557457950
彭俊智
2023-06-03

从高德地图或者腾讯地图找找API吧,这个单纯经纬度是没法过去路线的。

 类似资料:
  • 问题内容: 我有一个按照以下示例结构的mysql表: 现在我想做的是创建一个查询,该查询将在搜索位置的选定公里内选择结果 因此,假设他们搜索“灰色河流”,然后选择“在20公里以内找到所有结果” 它显然应该选择“灰河”,但也应根据经度和纬度选择灰河20公里以内的所有位置。 我真的不知道该怎么做。我已经读过haversine公式,但不知道如何将其应用于mysql SELECT。 任何帮助将非常感激。

  • 问题内容: 我有一个具有这样的结构的表: 我想计算给定坐标与数据库中保存的坐标之间的距离。 我当前的查询: 再加上一些的数据。 有什么方法可以优化该查询?进行连接大约需要13毫秒。 我还需要在此处添加一些以及用于分页的商店总数。 问题答案: 这里有一些想法,根据您的实际情况,其中一些想法可能不适用。 您可以将纬度和经度转换为弧度,并将其存储在行中。这将节省这些计算的成本(实际上,在存储数据时,成本

  • 我想在不同的郊区使用下面的API和pss来获得郊区或地址的纬度和经度。 http://en.wikipedia.org/w/api.php?format=json 此外,郊区列表将约为16,000个,那么如何使用此API提取地理坐标?

  • Highmaps 从 1.1.0 开始支持经纬度定位功能,该功能依赖第三方库 proj4js(需要在 Highmaps 之前引入),最新版的文件可以从 cdnjs 上获取 <script src="https://cdn.bootcdn.net/ajax/libs/proj4js/2.7.2/proj4.js"></script> 有了经纬度支持后,我们可以通过 lon 和 lat 属性来指定经

  • 我很难计算我在网页上的div标签中托管的图像的纬度和经度值。我可以很容易地计算出图像的x、y(像素)坐标,并将它们保存到脚本中的一个变量中。棘手的是... 地图不是墨卡托投影,所以我不能简单地线性插值x,y像素坐标到lat和lon值。然而,我确实有奢侈的知道所有四个角的纬度和经度的图像(见贴图),地图在图像上的投影,中央子午线,和原点的纬度。 800x600像素的图像是美国的,我基本上试图通过传递

  • https://stackoverflow.com/a/4682656/7924630这是一个非常有用的答案,帮助我解决这个问题 出于某种原因,这返回的区域值很小,我不明白为什么。例如,我在一个矩形区域上测试了这个。面积应该约为45平方米,但它返回0.0137平方米。我尝试了其他的实现,但没有找到任何对本机JavaScript有用的东西。