/**
* calc_map_distance() , 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离
* @param array $point_1 第1个点的x,y坐标 array( 101 , 202 )
* @param array $point_2 第2个点的x,y坐标 array( 101 , 202 )
* @param bool $calc_as_string 是否计算为字符串公里距离 , 如果未否返回数字
* @return float | false | string
*/
public static function calc_map_distance( $point_1=array( ) , $point_2=array( ) , $calc_as_string=true ) {
if( empty( $point_1 ) || empty( $point_2 ) ){
return false;
}
// 经纬度不存在,或者经纬度超过最大范围 +-180 , +-90 ,返回false
$p1_x = $point_1[0];
$p1_y = $point_1[1]; $p2_x = $point_2[0];
$p2_y = $point_2[1];
if(
$p1_x < -180 || $p1_x > 180
|| $p2_x < -180 || $p2_x > 180
|| $p1_y < -90 || $p1_y > 90
|| $p2_y < -90 || $p2_y > 90
){
return false;
} // 根据2点各自的坐标,计算2点之间直线距离的公式
$distance = round(6378.138*2*asin(sqrt(pow(sin(( $p1_x *pi()/180-$p2_x*pi()/180)/2),2)+cos( $p1_x *pi()/180)*cos($p2_x*pi()/180)* pow(sin(( $p1_y *pi()/180-$p2_y*pi()/180)/2),2)))*1000); // 是否计算为字符串公里距离
if( !$calc_as_string ){
return $distance;
} // 如果计算为字符串公里距离
if( $distance / 1000 > 1 ){
$k = (string)round( $distance / 1000 , 1 );
$m = (string)$distance % 1000 ;
$distance = "{$k}公里{$m}米";
}
else{
$distance = "{$distance}米";
}
return $distance;
}

结果:"distance": "9799.1公里114米"

根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离。显示为公里、米的更多相关文章

  1. 地图上道路编号中的G S X Y

    地图上道路中的G S X Y Z C D,分别表示什么道? 国道 省道 县道 乡道 专用道路 村道 D: 还没有搞明白

  2. Java 根据地图定位坐标推荐附近的目标地址(直线距离)

    这两天需要在公众号上面做一个关于根据地图当前定位与目标地址直线距离远近推荐的查询,一开始摸不着头脑,现已解决,mark一下 现有的材料:当前用户手机端的通过微信定位的经纬度坐标.数据表中保存有场地的定 ...

  3. C# 计算地图上某个坐标点的到多边形各边的距离

    在判断了某个坐标点是否在多边形内后,还有另一个需求就是当我这个坐标点在多边形外部时,我需要计算这个坐标点到多边形的距离是否在一个允许的误差范围内 通过两个位置的经纬度坐标计算距离(C#版本) 转自:h ...

  4. 【百度地图API】建立全国银行位置查询系统(三)——如何在地图上添加银行标注

    原文:[百度地图API]建立全国银行位置查询系统(三)--如何在地图上添加银行标注 <摘要>你将在第三章中学会以下知识: 如何在地图上添加带银行logo的标注?(你也可以换成商场logo, ...

  5. 通过两个位置的经纬度坐标计算距离(C#版本)

    /// <summary> /// 通过地图上的两个坐标计算距离(C#版本) /// Add by 成长的小猪(Jason.Song) on 2017/11/01 /// http://b ...

  6. ArcGIS api for javascript——加入地图并显示x,y坐标

    这个示例报告了用户在地图上悬停和拖拽鼠标的鼠标指针坐标.通过事件监听器来更新鼠标移到的x和y坐标. 下行代码创建了地图: var map = new esri.Map("map") ...

  7. 高德地图之c#后台获取一个或多个起点到单个终点的直线距离

    首先我们需要一个控制台添加一个新Key(可使用服务选择Web服务,测试的时候IP白名单先不填); 直线距离是通过后台get方式请求API服务地址http://restapi.amap.com/v3/d ...

  8. Angularjs+node+Mysql实现地图上特定点的定位以及附加信息展示

    注:本博文为博主原创,转载请注明出处. 在上一篇博文中主要讲述了如何利用AngularJs+Node+MySql构建项目,并实现地图上的多点标注,今天在这篇文章中,我们将在上一个项目的基础上,实现特定 ...

  9. 如何在iOS地图上高效的显示大量数据

    2016-01-13 / 23:02:13 刚才在微信上看到这篇由cocoachina翻译小组成员翻译的文章,觉得还是挺值得参考的,因此转载至此,原文请移步:http://robots.thought ...

随机推荐

  1. 分布式算法系列——一致性Hash算法

    摘自:http://www.blogjava.net/hello-yun/archive/2012/10/10/389289.html

  2. Android:Butter Knife 8.0.1配置

    github地址:https://github.com/GarsonZhang/butterknife Butter Knife Field and method binding for Androi ...

  3. 《BI项目笔记》创建标准维度、维度自定义层次结构

  4. Eclipse+Tomcat+MAVEN+SVN项目完整环境搭建

    1.JDK的安装 首先下载JDK,这个从sun公司官网可以下载,根据自己的系统选择64位还是32位,安装过程就是next一路到底.安装完成之后当然要配置环境变量了. ————————————————— ...

  5. ionic build android--> Build failed with an exception. Execution failed for task ':processDebugResources'.

    执行 ionic build android,   ionic 自动化生成安卓apk包, 出现以上报错的原因为:打包的文件中含有中文名,把中文名的文件去掉或改名即可打包成功.

  6. drupal前端开发的第一点

    就是把admin/config/development/performance下面的选项全部去掉,方便作为一个匿名用户来访问,不用每次都drush cc all.

  7. Laravel 设置时区

    打开laravel框架目录下app/config/app.php 找到参数'timezone'='UTC',设置'timezone'='Asia/Shanghai',时间就正常了.

  8. 关于电脑安装多个版本JDK后使用时的切换

    描述:刚到新公司,自己安装了jdk1.7和开发工具myeclipse10,但是由于公司项目的需要(具体原因不详细描述了),需要使用myeclipse6.5和jdk1.6.于是在切换jdk1.7和jdk ...

  9. Js获取下拉框当前选择项的文本和值

    现在有一个Id为AreaId的下拉框,要获取它当前选择项的文本和值有以下方法: <span class="red">* </span> 地       区: ...

  10. Linux下文件和目录的相关操作

    文件和目录的操作命令,按以下思路进行整理,感觉更便于记忆和使用 1.创建一个二进制文件 touch f1 2.向文件中写入数据 echo "hello" >> f1 e ...