首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >经纬度坐标距离计算

经纬度坐标距离计算

作者头像
苦咖啡
发布2018-04-28 14:27:12
发布2018-04-28 14:27:12
6.4K3
举报
文章被收录于专栏:我的博客我的博客

百度地图两点之间距离【传送门】 PHP版本

代码语言:javascript
复制
<?php
/**
 * 计算两点之间直线距离
 * @param float $lon1    经度
 * @param float $lat1    维度
 * @param float $lon2    经度
 * @param float $lat2    维度
 * @return float         浮点数
 */
function distance($lon1, $lat1, $lon2, $lat2){
    return (2*ATAN2(SQRT(SIN(($lat1-$lat2)*PI()/180/2)
            *SIN(($lat1-$lat2)*PI()/180/2)+
            COS($lat2*PI()/180)*COS($lat1*PI()/180)
            *SIN(($lon1-$lon2)*PI()/180/2)
            *SIN(($lon1-$lon2)*PI()/180/2)),
            SQRT(1-SIN(($lat1-$lat2)*PI()/180/2)
                    *SIN(($lat1-$lat2)*PI()/180/2)
                    +COS($lat2*PI()/180)*COS($lat1*PI()/180)
                    *SIN(($lon1-$lon2)*PI()/180/2)
                    *SIN(($lon1-$lon2)*PI()/180/2))))*6378140;
}
echo distance(116.3896,39.91917,116.3940,39.91726);
?>

JS版本

代码语言:javascript
复制
function toRad(d) {  return d * Math.PI / 180; }
	function getDisance(lat1, lng1, lat2, lng2) {
	    var dis = 0;
	    var radLat1 = toRad(lat1);
	    var radLat2 = toRad(lat2);
	    var deltaLat = radLat1 - radLat2;
	    var deltaLng = toRad(lng1) - toRad(lng2);
	    var dis = 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)));
	    return dis * 6378137;
	} 
	console.log(  getDisance(39.91917,116.3896,39.91726,116.3940) );

MySQL版本 #其中39.91578为用户维度 116.3899为用户经度

代码语言:javascript
复制
#表结构如下
CREATE TABLE `map` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `lat` decimal(12,6) NOT NULL,
  `lng` decimal(12,6) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
代码语言:javascript
复制
SELECT id,lat,lng,((
2*ATAN2(SQRT(SIN((39.91578-lat)*PI()/180/2)   
        *SIN((39.91578-lat)*PI()/180/2)+   
        COS(lat*PI()/180)*COS(39.91578*PI()/180)   
        *SIN((116.3899-lng)*PI()/180/2)   
        *SIN((116.3899-lng)*PI()/180/2)),   
        SQRT(1-SIN((39.91578-lat)*PI()/180/2)   
        *SIN((39.91578-lat)*PI()/180/2)   
        +COS(lat*PI()/180)*COS(39.91578*PI()/180)   
        *SIN((116.3899-lng)*PI()/180/2)   
        *SIN((116.3899-lng)*PI()/180/2))))*6378140) as len FROM `map` order by len asc ;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年3月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档