首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >php根据经纬度计算距离和方向

php根据经纬度计算距离和方向

原创
作者头像
jerryteng
修改于 2018-09-14 10:55:33
修改于 2018-09-14 10:55:33
2.2K0
举报
文章被收录于专栏:jerryteng的专栏jerryteng的专栏

这个是我在佳缘的时候写的,已经很久了,当时是为了根据经纬度计算附近的人,

可见当时思想就已经很超前了。。。

不过现在有了更多的可选项了,例如geohash,存储geo的服务,mogodb,等等

不过这个还是有一定的参考意义的。

看看我12年写的文章:

现在这个移动终端的天下,

自然而然就有了根据经纬度来计算方向和距离的需求,

LBS就产生了,

可是怎么计算呢 ? 

网上有很多计算距离的,今天我就来个加强版,计算距离和方向。

//根据经纬度计算距离和方向

代码语言:php
AI代码解释
复制
function getRadian($d)
{
return $d * M_PI / 180;
}
function getDistance ($lat1, $lng1, $lat2, $lng2)
{
$lat1 =getRadian($lat1);
$lat2 = getRadian($lat2);
$a = $lat1 - $lat2;
$b = getRadian($lng1) - getRadian($lng2);
$v = 2 * asin(sqrt(pow(sin($a/2),2) +
cos($lat1) * cos($lat2) * pow(sin($b/2),2)));
$v = round(EARTH_RADIUS * $v * 10000) / 10000;
return $v;
}
//根据经纬度计算方向
function getDirection($lat1, $lng1, $lat2, $lng2){
$k1 = $lng2-$lng1;
$k2 = $lat2-$lat1;
if( 0 == $k1){
if($k2>0){
$str="聊友在您的正北方 ";
}
else if( $k2<0){
$str ="聊友在您的正南方 ";
}
else if( $k2 == 0){
$str="聊友正在您的附近 ";
}
}else if( 0 == $k2){
if($k1>0){
$str="聊友在您的正东方 ";
}
else if( $k1<0){
$str="聊友在您的正西方 ";
}
}else{
$k=$k2/$k1;
if($k2>0){
if($k1>0){
$angle = 180*atan($k)/M_PI;
$str="聊友在您的东偏北 $angle 度方向  ";
}else if($k1<0){
$angle = 180*atan(-$k)/M_PI;
$str= "聊友在您的西偏北 $angle 度方向  ";
}
}else if($k2<0){
if($k1<0){
$angle = 180*atan($k)/M_PI;
$str = "聊友在您的西偏南 $angle 度方向  ";
}
else if($k1>0){
$angle = 180*atan($k)/M_PI;
$str="聊友在您的东偏南 $angle 度方向  ";
}
}
}
return $str;
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Uboot支持的命令
fat命令可以对 FAT 文件系统的相关存储设备进行查询及文件读写操作,在打包固件的时候, 我们会制作启动资源分区镜像, 把指定的目录下的文件按照文件系统的格式排布,文件中包括了原来目录中的所有文件,并完全按照目录结构排列。当把这个镜像文件烧写到存储设备上的某一个分区的时候,可以看到这个分区和原有目录的内容一样。使用fat可以方便地以文件和目录的方式对小机 flash 进行数据访问,如显示 logo。这些指令基本上要和 U 盘或者 SD 卡同时使用,主要用于读取这些移动存储器上的 FAT 分区。其相关操作命令如下:
韦东山
2024/08/19
2400
Uboot支持的命令
嵌入式Linux开发-uboot常用命令介绍(下篇)
主要是涉及的命令是:磁盘分区、磁盘文件加载、内核引导、二进制文件加载、跳转命令、磁盘文件系统格式等等。
DS小龙哥
2022/04/08
2.9K0
嵌入式Linux开发-uboot常用命令介绍(下篇)
AMD Xilinx MPSoC 加载bit文件方法大全
对于FPGA设计,传统设计都是一个FPGA一个设计,产生一个Bit文件。这就是完整bit文件(full bit)。 有些文章中也称之为全工程比特文件。
hankfu
2022/11/14
2.5K0
i.MX6ULL嵌入式Linux开发1——uboot移植初探
本系列教程以「i.MX6ULL」处理器的ARM开发板为实验基础,学习记录嵌入式Linux开发的各种知识与经验,主要内容包括嵌入式Linux移植,嵌入式Linux驱动开发,嵌入式Linux应用开发等。
xxpcb
2021/07/20
2.9K0
Secure Boot Family Key(obfuscated key)(MPSoc)
the_ROM_image: { [keysrc_encryption] efuse_red_key [bootloader, encryption=aes,aeskeyfile = aes.nky, destination_cpu = a53-0] fsbl.elf }
Frank-大龙
2024/11/11
2050
嵌入式Linux开发-uboot常用命令介绍(上篇)
U-boot是一种开源bootloader, 作用是用来引导操作,以及给开发人员提供测试调试工具。本身算是个精简的Linux系统,主要是负责硬件的初始化和引导,本身带有一些工具,作为引导程序,常作为嵌入式设备的引导。当真正的系统开始运行的时候U-boot就把管理权限交了出去。
DS小龙哥
2022/04/08
2.3K0
嵌入式Linux开发-uboot常用命令介绍(上篇)
uboot下启动RPU ELF
有客户有需求,希望能够实现RPU 以及BIT文件的单独升级;BOOT.BIN中其他部分不做升级。
Frank-大龙
2025/05/29
1101
[分享]升级MPSoC Linux LTS 版本和Realtime版本
大部分项目设计需要一个稳定的Linux版本,但是又需要修复内核漏洞。这种情况下,跟随LTS版本升级,是最好的办法。 很多项目也需要改善Linux的实时特性。可以使用Linux Realtime patch实现。
hankfu
2020/07/17
4K0
[ 物联网篇 ] 11 - NXP i.MX8M Mini 集成Mender OTA解决方案
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
程序手艺人
2019/11/14
1.9K0
快速运行AMD Xilinx KR260的Linux
建议重点查看 DS988 Kria KR260 Robotics Starter Kit Data Sheet 和 UG1092 - Kria KR260 Robotics Starter Kit User Guide.
hankfu
2022/09/29
2.7K0
全志 Tina Linux 存储介质切换:eMMC,SPI NAND,SPI NOR,SD Card,SD NAND
SDK切换存储介质需要修改board.dts、sys_config.fex、内核配置、TINA系统配置。另外,在spinor 存储介质下,通过 u-boot-sun8iw21p1.bin 进行烧录,u-boot-spinor-sun8iw21p1.bin 启动,使用sys_partition_nor.fex作为分区表。在非spinor介质(spinand、emmc、sdnand),通过u-boot-sun8iw21p1.bin进行烧录和启动,使用sys_partition.fex作为分区表。下文将介绍spinor切换spinand、spinand切换spinor、spinor切换emmc、spinor切换sdnand四种切换方式。
阿志小管家
2024/02/02
1K0
[Linux驱动炼成记] 05-存储eMMC配置
eMMC (Embedded Multi Media Card) 为MMC协会所订立的,eMMC 相当于 NandFlash+主控IC ,对外的接口协议与SD、TF卡一样,主要是针对手机或平板电脑等产品的内嵌式存储器标准规格。eMMC的一个明显优势是在封装中集成了一个控制器,它提供标准接口并管理闪存,使得手机厂商就能专注于产品开发的其它部分,并缩短向市场推出产品的时间。这些特点对于希望通过缩小光刻尺寸和降低成本的NAND供应商来说,同样的重要。1
程序手艺人
2019/02/20
3.6K0
史上最全的Uboot常用命令汇总(超全面!超详细!)收藏这一篇就够了「建议收藏」
进入 uboot 的命令行模式以后输入“help”或者“?”,然后按下回车即可查看当前 uboot 所支持的命令,如下图所示:
全栈程序员站长
2022/09/10
17.1K0
史上最全的Uboot常用命令汇总(超全面!超详细!)收藏这一篇就够了「建议收藏」
鸿蒙系统研究之六:U-Boot引导
U-Boot 的全称是 Universal Boot Loader,其作用就是引导系统。对于我们熟悉的 PC,上电后,通过 BIOS 引导操作系统 (Windows、Linux等)。对于嵌入式系统一般将这个引导程序称作 BootLoader,U-Boot 就是目前使用得最广泛的 BootLoader。
云水木石
2021/08/06
3.1K1
Linux和Uboot下eMMC boot分区读写
关键词:eMMC boot、PARTITION_CONFIG、force_ro等。
知忆
2021/06/11
6.9K0
Xilinx U-Boot 2020.2 找不到文件“boot.scr”,导致启动失败
最近有客户反馈,U-Boot 2020.2 启动有问题。 SD卡里有BOOT.BIN, image.ub等文件,也不能正常启动。
hankfu
2023/04/07
2.6K1
ZYNQ跑系统 系列(二) petalinux方式移植linux[通俗易懂]
之前一篇博文中,提到了一种通用的传统移植方式,将linux移植到ZYNQ中的ARM芯片中。本文将针对xilinx的专用开发环境petalinux,进行入门和开发,本文petalinux的运行环境依然在虚拟机的linux系统里,即将体验petalinux相对于传统方式的便捷和强大之处
全栈程序员站长
2022/11/04
14.5K1
ZYNQ跑系统 系列(二) petalinux方式移植linux[通俗易懂]
Rockchip RK3588 - uboot引导方式介绍
开发板 :RK3588 EVB开发板 eMMC :256GB LPDDR4 :16GB 显示屏 :10.1英寸HDMI接口显示屏 u-boot :2017.09 linux :6.1
用户11537198
2025/03/07
9950
Xilinx MPSoC FSBL中的看门狗的用法总结
Xilinx MPSoC的FSBL中使用了看门狗,避免单板进入异常后一直挂死。下面是FSBL关于看门狗的用法总结。
hankfu
2022/12/13
8470
MQ-Quad 全志H616 主线内核编译调试记录(u-boot、kernel、buildroot)
/arch/arm64/boot/dts/allwinner/sun50i-h616-orangepi-zero2.dts
阿志小管家
2024/02/02
9660
推荐阅读
相关推荐
Uboot支持的命令
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档