根据两点经纬度计算直线距离

本文详细介绍了如何使用百度地图API获取经纬度,并将其应用于数字营销场景,如根据用户位置查找附近的销售点或专家。通过实现位置匹配功能,提升用户体验并促进业务发展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


经纬度可以使用百度的地图API来获取经纬度 最近在研究微信的一些功能,用来做数字营销。如自定义菜单、自动应答、地理位置匹配等需求:

例:
某企业销售仪器,在某用户要咨询某仪器问题时,需要用户提供自己的位置,系统会返回离他最近的代售点或专家。

开发这个需求:
1.需要将专家或代售点位置做成经纬度,放入数据库;
2.在用户提交自己位置后,获取经纬度;
3.根据当前位置的经纬度,框定半径为X的专家所在地范围的经纬度数据;
4.从数据库中搜索符合条件的专家经纬度数据;

5.获取所在地的经纬度,与专家所在地的经纬度做空间二点之间的最短距离,反馈给客户;

以下的百度地图API的说明

http://developer.baidu.com/map/webservice-geocoding.htm


//这是找的一段PHP代码,经过实验,功能正常

根据当前位置的经纬度,框定半径为X的专家所在地范围的经纬度数据(经纬度范围的上下限)

 function  getAround( $lat, $lon, $raidus){     
         $PI = 3.14159265;
         $EARTH_RADIUS = 6378137;
         $RAD = $PI / 180.0;
   
         $latitude = $lat;
         $longitude = $lon;
    $degree = (24901*1609)/360.0;
   $raidusMile = $raidus;
   $dpmLat = 1/$degree;
   $data=array();
    $radiusLat = $dpmLat*$raidusMile;
    $minLat = $latitude - $radiusLat;
    $maxLat = $latitude + $radiusLat;
    $data["maxLat"]=$maxLat;
    $data["minLat"]=$minLat;
    $mpdLng = $degree*cos($latitude * ($PI/180));
     $dpmLng = 1 / $mpdLng;
    $radiusLng = $dpmLng*$raidusMile;
    $minLng = $longitude - $radiusLng;
    $maxLng = $longitude + $radiusLng;
    $data["maxLng"]=$maxLng;
    $data["minLng"]=$minLng;
      return $data;
    }

//以下代码的功能是空间二点之间的距离
private const double EARTH_RADIUS = 6378.137;//地球半径

private static double rad(double d)
{ return d * Math.PI / 180.0; }

public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
  double radLat1 = rad(lat1); double radLat2 = rad(lat2);
  double a = radLat1 - radLat2; double b = rad(lng1) - rad(lng2);
  double 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 * 10000) / 10000; return s;
}

private void button1_Click(object sender, EventArgs e)
{
//北京上地至西三旗距离
double dis = GetDistance(40.037045681695, 116.32711896985, 40.058288760327, 116.33761486126);
MessageBox.Show(dis.ToString()); }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值