php计算经纬度距离 及 某点是否在经纬度节点范围

js版 计算经纬度距离 及 某点是否在经纬度节点范围

本文档由 https://blog.csdn.net/AdminGuan/article/details/128118657 改版而来。

php 版 计算经纬度距离 及 某点是否在经纬度节点范围

public function index(){//1.计算两个点(经纬度)的距离$staVal = ['lng' => '106.64647211048887', 'lat' => '26.619020177917346'];$endVal = ['lng' => '106.65148784134672', 'lat' => '26.615442440608998'];print_r($this->calcCoordsDistance($staVal, $endVal));//2.判断某一点是否在某一区域范围内(lng.经度 lat.纬度)$point1 = [121.65628910064697, 31.14649210398973]; //地点示例 1$point2 = [106.64647211048887, 26.619020177917346]; //地点示例 2$areaList = [[121.64199829101561, 31.128897282106205],[121.6805362701416, 31.128897282106205],[121.685362701416, 31.157914133949994],[121.64199829101561, 31.157914133949994],[121.64199829101561, 31.128897282106205],];var_dump('point1=' . $this->judgeCoordsInArea($point1, $areaList)); // truevar_dump('point2=' . $this->judgeCoordsInArea($point2, $areaList)); // falsereturn 'test/index';}/*** 计算两个点(经纬度)的距离* @param array $startDot 开始点的经纬度(lng.经度 lat.纬度)* @param array $endDot 结束点的经纬度(lng.经度 lat.纬度)* @return ['mVal' => string, 'kmVal' => string, 'originVal' => '两点的经纬度为必传'] originVal.原始值单位为米*/protected function calcCoordsDistance(array $startDot, array $endDot) {$result = ['mVal' => '', 'kmVal' => '', 'originVal' => '两点的经纬度为必传'];if (empty($startDot) || empty($endDot)) {return $result;}$earthRadius = 6378137.0; // 地球半径$startRadianLat = $this->getRadian($startDot['lat']); // 纬度 - 开始$endRadianLat = $this->getRadian($endDot['lat']); // 纬度 - 结束//差值$latDiffVal = $startRadianLat - $endRadianLat; // 维度差值$lngDiffVal = $this->getRadian($startDot['lng']) - $this->getRadian($endDot['lng']); // 经度差值//差值的正弦值$latDiffSinVal = sin($latDiffVal / 2); // 维度差值的正弦值$lngDiffSinVal = sin($lngDiffVal / 2); // 经度差值的正弦值//余弦值乘积$latCosProduct = cos($startRadianLat) * cos($endRadianLat); // 维度的余弦值乘积$powVal = $latCosProduct * pow($lngDiffSinVal, 2);$sqrtVal = pow($latDiffSinVal, 2) + $powVal; // 开平方根的值// 结果值$res = 2 * asin(sqrt($sqrtVal)) * $earthRadius;$result['mVal'] = sprintf("%.2f", $res) . "m"; // 单位米$result['kmVal'] = sprintf("%.5f", ($res / 1000)) . "km"; // 单位千米$result['originVal'] = $res;return $result;}protected function getRadian($d) {return ($d * pi()) / 180.0; // 圆周率π}/** 判断某一点是否在某一区域范围内(lng.经度 lat.纬度)* @param array $dot 需要判断的点(格式:[lng: "", lat: ""])* @param array $range 区域范围(格式:[[lng: "", lat: ""], [lng: "", lat: ""]])* @returns {boolean} true.存在 false.不存在*/protected function judgeCoordsInArea(array $dot, array $range) {$count = 0;$r1 = $range[0];for ($i = 1; $i < count($range); $i++) {$r2 = $range[$i % count($range)];$t1 = $dot[0] > min($r1[0], $r2[0]) && $dot[0] <= max($r1[0], $r2[0]);$t2 = $dot[1] <= max($r1[1], $r2[1]) && $r1[0] !== $r2[0];if ($t1 && $t2) {$term = (($dot[0] - $r1[0]) * ($r2[1] - $r1[1])) / ($r2[0] - $r1[0]) + $r1[1];if ($r1[1] === $r2[1] || $dot[1] <= $term) $count++;}$r1 = $r2;}return $count % 2 !== 0;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity学习笔记-Text mesh Pro

Text mesh Pro组件 组件使用的大致流程细节导入之后字体没有显示可能一可能二 注意事项 好久没更了…最近在学习使用别人的框架进行开发&#xff0c;坑也不少&#xff0c;不过学习到了很多设计思维。 言归正传。忘了是什么是时候的版本开始&#xff0c;unity多了这个组件&#…

K哥30个站点的逆向爬虫代码|pyexecjs库的基本使用

仓库地址&#xff1a;https://github.com/kgepachong/crawler/ 常见问题 JS 代码里引用了三个库&#xff0c;npm install 安装一下即可&#xff0c;如果安装了还提示找不到库&#xff0c;那就是路径问题&#xff0c;推荐在当前目录下执行命令安装&#xff0c;或者在 Python 代…

WPF入门_02依赖属性

1、依赖属性主要有以下三个优点 1)依赖属性加入了属性变化通知、限制、验证等功能。这样可以使我们更方便地实现应用,同时大大减少了代码量 2)节约内存:在WinForm中,每个UI控件的属性都赋予了初始值,这样每个相同的控件在内存中都会保存一份初始值。而WPF依赖属性很好地…

uiautomatorviewer安卓9以上正常使用及问题处理

一、安卓9以上使用uiautomatorviewer问题现象 打开Unexpected error while obtaining UI hierarchy 问题详情 Unexpected error while obtaining UI hierarchy java.lang.reflect.InvocationTargetException 二、问题处理 需要的是替换对应D:\software\android-sdk-windows…

Linux环境下Jmeter执行压测脚本

Linux环境下Jmeter执行压测脚本 前提官网下载Jmeter执行脚本 前提 注意&#xff1a;Jmeter的运行依赖Java环境 官网下载Jmeter 1、下载链接&#xff1a;https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.zip 2、解压 unzip apache-jmeter-5.6.3.zip 执行脚本…

洛谷刷题 P1003 [NOIP2011 提高组] 铺地毯

题目传送&#xff1a;P1003 [NOIP2011 提高组] 铺地毯 思路 该题主要考察模拟思想&#xff0c;可以用二维数组来模拟表示地面&#xff0c;每个坐标点记录其最上层地毯&#xff0c;然后每输入一张地毯数据就对地面相应坐标点进行修改&#xff0c;最后读取目标地点的状态&#…

python将照片集导出成视频

shigen坚持更新文章的博客写手&#xff0c;记录成长&#xff0c;分享认知&#xff0c;留住感动。个人IP&#xff1a;shigen 背景 一个安静的下午&#xff0c;看着电脑里乱七八糟的照片&#xff0c;有大有小&#xff0c;宽高不一&#xff0c;突然想找个方式把他们统一起来&…

PC企业微信自动回复,群发管理,定时发送,朋友圈

服务提供了丰富的API和SDK&#xff0c;可以在企微的功能之上进行应用开发和功能扩展 自建应用可以调用企微hook或协议提供的接口来实现数据交互&#xff0c;可以直接调用hook或协议接口提供的功能来进行消息的发送与接收、用户管理、应用管理等操作&#xff0c;通过接口可以实…

滚雪球学Redis[7.0讲]:Redis在Web应用中的会话管理:实现、优化与安全性!

全文目录&#xff1a; ☁️前言⛅️1. 在Web应用中使用Redis管理会话&#x1f567;️1.1 什么是会话管理&#xff1f;&#x1f550;️1.2 为什么选择Redis来管理会话&#xff1f;&#x1f55c;️1.3 示例&#xff1a;使用Redis实现会话管理&#x1f551;️代码示例&#x1f55d…

Vue前端预览docx文档

Vue前端预览docx文档 实现效果 vue代码 <el-dialog title"预览" :visible.sync"filePreview"><div ref"file"></div></el-dialog>引入依赖文件 官方文档地址 https://www.npmjs.com/package/docx-preview?activeTabre…

MacOS安装BurpSuite

文章目录 一、下载地址二、下载注册机三、安装教程四、启动burpsuit五、免责声明 一、下载地址 https://portswigger-cdn.net/burp/releases/download?productpro&version2024.7.1&typeMacOsx二、下载注册机 https://github.com/NepoloHebo/BurpSuite-BurpLoaderKey…

Java 多线程进阶:常见的锁策略/synchronized原理/CAS(更新中)

一.常见的锁策略 锁:非常广义的话题; synchronized:只是市面上五花八门的锁的其中一种典型的实现,Java内置的推荐使用的锁; (1)乐观锁 && 悲观锁 乐观锁:加锁的时候,假设出现锁冲突的概率不大;接下来围绕加锁要做的工作很少; 悲观锁:加锁的时候,假设出现锁冲突的概…

数据库中存储树状关系的数据

三张表的文字描述 表1&#xff1a;包含字段A1,字段A2,字段A3. 字段A1是主键 表2&#xff1a;包含字段B1&#xff0c;字段B2&#xff0c;字段A1 字段B1是主键&#xff0c;字段A1是其外键。 1个字段A1的值可以匹配多条表2的记录. 表3&#xff1a;包含字段C1&#xff0c;字段C2&am…

下午题数据库设计15分

一、考什么 题目会给场景&#xff0c;和数据库的设计过程&#xff0c;让你补充残缺的E-R图&#xff0c;关系模式&#xff0c;找主键外键。还有1-2分的随机题型。 二、答题技巧 熟练基本知识结合题干 三、例题

【OD】【E卷】【真题】【200分】项目排期(PythonJavaJavaScriptC++C)

题目描述 项目组共有N个开发人员&#xff0c;项目经理接到了M个独立的需求&#xff0c;每个需求的工作量不同&#xff0c;且每个需求只能由一个开发人员独立完成&#xff0c;不能多人合作。假定各个需求直接无任何先后依赖关系&#xff0c;请设计算法帮助项目经理进行工作安排…

构建高效在线考试平台:Spring Boot与JavaWeb的融合

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于JavaWeb技术的在线考试系统设计与实现…

python图片文件路径排序

解决用sord 排序文件路径乱序问题&#xff1a; image_files 是 图片文件路径列表[pythonProject/video2img/1.jpg,pythonProject/video2img/2.jpg,.......] image_files.sort(keylambda x: int(x.split(/)[-1].split(.)[0]))

颜廷利:东方智慧的现代诠释者

人文公社 2024年10月21日 东方智者颜廷利, 哲学思想论古今, 和善互爱满天下, 无私奉献情意深… 在当代哲学与文化交融的浪潮中,颜廷利以其深邃的东方智慧和对古今思想的独到见解,成为了一位备受瞩目的思想家。他不仅倡导和谐共处、互爱互助的理念,更以自身的行动践行着无私…

Hi3061M——VL53L0X激光测距(IIC)(同样适用于其他MCU)2

目录 前言资源下载移植基本使用IO配置调用测量 总结 前言 昨晚太晚了&#xff0c;草草结束了上一篇&#xff0c;今天更新下半部分。 昨天已经讲了VL53L0X的使用流程&#xff0c;无非就是进行6步的效准初始化&#xff0c;然后配置下模式和时间&#xff0c;开始采样&#xff0c;…

Python-函数self详解

在Python中&#xff0c;self 是一个特殊的关键字&#xff0c;主要用于类&#xff08;class&#xff09;的定义中&#xff0c;表示类的实例&#xff08;instance&#xff09;本身。以下是对 self 的详细解释&#xff1a; 类和实例的概念&#xff1a; 类&#xff08;Class&#…