根据经纬度计算距离公式。图片来自网络。上式解释如下:Lung1Lat1表示A点的经纬度,Lung2Lat2表示B点的经纬度;a=Lat1–Lat2为两点的纬度b=Lung1-Lung2为两点的经度之差;6378.137为地球半径,单位为千米;计算结果单位为公里,如果半径改为米,则计算结果单位为米。计算精度与谷歌地图的距离精度相近,差异范围小于0.2米。参数说明lng:经度lat:纬度地球半径:6378.137(千米)通常地图上坐标显示的顺序是纬度在前(范围-90~90),经度在后(范围-180~180).各种语言计算距离代码通常是在直线距离sql语句中计算SELECT*,6378.138*2*ASIN(SQRT(POW(SIN(('.$lat.'*PI()/180-lat*PI()/180)/2),2)+COS('.$lat.'*PI()/180)*COS(lat*PI()/180)*POW(SIN(('.$lng.'*PI()/180-lng*PI()/180)/2),2)))*1000ASdistanceFROMdistanceORDERBYdistanceASCphp计算距离/***根据两点之间的经纬度计算距离*@param$lng1*@param$lat1*@param$lng2*@param$lat2*@returnint*/publicstaticfunctiongetDistance($lng1,$lat1,$lng2,$lat2){//将角度转换为度数$radLat1=deg2rad($lat1);//deg2rad()函数将角度转换为弧度$radLat2=deg2rad($lat2);$radLng1=deg2rad($lng1);$radLng2=deg2rad($lng2);$a=$radLat1-$radLat2;$b=$radLng1-$radLng2;$s=2*asin(sqrt(pow(sin($a/2),2)+cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))*6378.137*1000;return$s;}js计算距离的方法/***转换弧度*@paramd*@returns{number}*/functiongetRad(d){varPI=Math.PI;returnd*PI/180.0;}/***根据经纬度计算两点之间的距离*@paramlng1*@paramlat1*@paramlng2*@paramlat2*@returns{number|*}*@constructor*/functionCoolWPDistance(lng1,lat1,lng2,lat2){varf=getRad((lat1+lat2)/2);varg=getRad((lat1-lat2)/2);varl=getRad((lng1-lng2)/2);varsg=Math.sin(g);varsl=Math.sin(l);varsf=Math.sin(f);变量s、c、w、r、d、h1、h2;vara=6378137.0;//以米为单位的地球半径。varfl=1/298.257;sg=sg*sg;sl=sl*sl;sf=sf*sf;s=sg*(1-sl)+(1-sf)*sl;c=(1-sg)*(1-sl)+sf*sl;w=Math.atan(Math.sqrt(s/c));r=Math.sqrt(s*c)/w;d=2*w*a;h1=(3*r-1)/2/c;h2=(3*r+1)/2/s;s=d*(1+fl*(h1*sf*(1-sg)-h2*(1-sf)*sg));如果(s>=1000&&s<=99000){var公里=s/1000;s=kilometer.toFixed(1)+'km';}elseif(s>99000){s='>99km';}else{s=Math.round(s)+'m';}//s=s/1000;//s=s.toFixed(2);//指定小数点后的位数returns;}以上大部分代码都是从网上收集的,经过验证可以,可以使用
