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

经纬度坐标距离计算

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

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

<?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版本

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为用户经度

#表结构如下
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;
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 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档