PHP根据经纬度计算指定地点距离位置 并且可以限制距离

php 根据位置的经纬度计算距离 location是位置字段,是存的json格式,其他的字段我就不截图放上来了。在开发中,我们要经常和位置打交道,要计算附近的位置、距离什么的。php代码根据自忆的的业务来。我代码没有附全,请见凉!二、下面附上php代码。上面的sql语句经纬度潜换成你自已的。 阅读详情

原生写法

function getNearbyLocations($latitude, $longitude, $distanceLimit) {
    // 计算距离的公式里需要用到的地球半径
    $earthRadius = 6371000;

    // 根据经纬度计算距离的 SQL 语句
    $distanceSql = "($earthRadius * acos(cos(radians(:latitude)) * cos(radians(latitude)) * cos(radians(longitude) - radians(:longitude)) + sin(radians(:latitude)) * sin(radians(latitude)))) AS distance";

    // 构造 SQL 查询语句
    $sql = "SELECT *, $distanceSql FROM locations HAVING distance <= :distanceLimit ORDER BY distance ASC";

    // 执行 SQL 查询,并将经纬度作为参数绑定到 SQL 语句中
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(':latitude', $latitude);
    $stmt->bindParam(':longitude', $longitude);
    $stmt->bindParam(':distanceLimit', $distanceLimit);
    $stmt->execute();

    // 返回查询结果
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

在上面的代码中,我们首先定义了一个名为 getNearbyLocations() 的函数,它接受三个参数:基准点的经度、纬度和限制距离。然后,我们使用 PDO 对数据库进行查询,根据经纬度计算每个位置与基准点之间的距离,并将距离作为一个名为 distance 的属性返回。最后,我们将查询结果按照距离升序排序,并返回查询结果。

请注意,上面的代码中使用了 PDO 进行数据库查询,你需要将 $pdo 替换为你自己的 PDO 实例。此外,上面的代码仅仅是一个示例,你需要根据你自己的数据库结构进行相应的调整。

tp6写法

// 根据经纬度和距离排序数据
public function sortByDistance($latitude, $longitude, $distanceLimit, $tableName)
{
    // 计算距离的公式
    $distanceFormula = "(6371 * acos(cos(radians($latitude)) * cos(radians(latitude)) * cos(radians(longitude) - radians($longitude)) + sin(radians($latitude)) * sin(radians(latitude))))";

    // 查询符合条件的数据并按距离排序
    $result = Db::table($tableName)
        ->field("*,$distanceFormula AS distance")
        ->having("distance <= $distanceLimit")
        ->order("distance")
        ->select();

    return $result;
}
  • $latitude、$longitude、$distanceLimit和$tableName分别表示要排序的经度、纬度、限制的距离和要查询的表名。
  • $distanceFormula表示计算距离的公式,在这里使用的是Haversine公式,可以计算地球上两个位置之间的距离(单位为公里)。
  • Db::table($tableName)表示查询指定表名的数据。
  • field("*,$distanceFormula AS distance")表示查询所有数据和距离,并将距离的字段名设置为distance。
  • having("distance <= $distanceLimit")表示限制距离不超过指定的距离。
  • order("distance")表示按照距离升序排序。
  • select()表示执行查询并返回结果。
PHP实现附近人及距离查询的方法 首先获取用户和其他用户的位置信息,然后使用地理学算法计算用户之间的距离,最后根据设定的距离限制筛选出附近的人。首先获取用户和其他用户的位置信息,然后使用地理学算法计算用户之间的距离,最后根据设定的距离限制筛选出附近的人。接下来,我们需要获取其他用户的位置信息。有了用户的位置信息,我们可以使用地理学算法来计算用户之间的距离。现在我们可以使用上述函数来计算用户与其他用户之间的距离,并获取附近的人及其距离信息。现在我们可以使用上述函数来计算用户与其他用户之间的距离,并获取附近的人及其距离信息。 阅读详情

相关推荐

php根据地理坐标获取国家、省份、城市,及周边数据类

* 根据地理坐标获取国家、省份、城市,及周边数据类(利用百度Geocoding API实现) * 百度密钥获取方法:http://lbsyun.baidu.com/apiconsole/key?application=key(需要先注册百度开发者账号) * Func: * Public getAddressComponent 根据地址获取国家、省份、城市及周边数据 * Private toCurl 使用curl调用百度Geocoding API

php根据经度纬度坐标获取区域信息

要根据经度纬度坐标获取区域信息,可以使用逆地理编码服务。逆地理编码是将经纬度坐标转换为可读的地址信息的过程。在PHP中,可以使用百度地图API提供的逆地理编码服务来实现。需要注意的是,百度地图API的使用需要遵守相关的服务条款和隐私政策。构造请求URL,包括ak、经纬度坐标等参数。获取百度地图API的开发者密钥(ak)。解析响应结果,提取需要的区域信息。发送HTTP请求,获取响应结果。

冰骑士的博客 1489

abaqus运行报错 WindowsError:[Error 2]

abaqus提交job总是提示“WindowsError [Error 2”,报这个错误,可能是由于安装其他软件改变了abaqus软件的路径导致,总结了看到的教程,按照下面的方法可以解决这个问题。 步骤一:找到你的abaqus安装路径(我是按照一个安装视频安装的,安装路径为SIMULI1),然后找到SIMULIA文件夹,点击进入后找到commands文件夹,将这个路径复制下来。 步骤二:我的电脑右键属性,在左侧中找到高级系统设置并...

az101za的博客 1万+

PHP根据经纬度查询地理位置

PHP根据经纬度查询地理位置 function getCity($longitude, $latitude){ //调取百度接口,其中ak为百度帐号key,注意location纬度在前,经度在后 $api = "http://api.map.baidu.com/geocoder/v2/?ak=ZmliRk1lEOigtcPGcDeGSimRNkVdX64H&amp;locati...

weixin_38806135的博客 2601

拌合楼软件开发(24)接收微信消息生成车辆计划

【摘要】针对拌合站客户群体文化程度不高、习惯微信群沟通的业务场景,提出通过企业微信机器人实现微信对话下单的解决方案。核心是利用WorkTool工具的消息回调机制:1)配置接收消息的API接口;2)解析JSON格式的对话数据,筛选@机器人的有效消息;3)采用*号分隔符提取订单信息并进行校验;4)建立微信昵称与客户系统的映射关系。方案解决了传统系统登录门槛高的问题,但需注意群名唯一性、多系统对接及客户身份识别等关键问题。全文重点阐述技术实现逻辑而非具体代码。

morsth的博客 1045

Oracle 19c RAC安装踩坑实录:OpenSSH 8.x版本与OUI的“兼容性战争”及一劳永逸的解决思路

本文深入解析Oracle 19c RAC在Linux8环境中部署时遇到的OpenSSH 8.x版本兼容性问题,特别是[INS-06006]错误的根源与解决方案。从协议层分析冲突本质,提供SCP包装器技术、官方补丁应用指南及现代化部署体系构建三种解决方案,帮助企业高效完成RAC安装并规避类似问题。

weixin_42648844的博客 457

TNTSearch 地理搜索详解:基于位置的附近地点搜索实现

TNTSearch 是一款功能全面的 PHP 全文搜索引擎,其提供的地理搜索功能允许开发者轻松实现基于位置的附近地点搜索。本文将详细介绍 TNTSearch 地理搜索的核心原理、实现步骤和实际应用场景,帮助开发者快速掌握这一实用功能。 ## 🌍 地理搜索核心功能与应用场景 地理搜索是现代应用中不可或缺的功能,无论是外卖配送、本地服务查找还是社交应用的附近的人,都依赖于基于位置的搜索技术。TN

gitblog_00943的博客 316

别再手动找触点了!EPLAN线圈触点映像的3种显示方式与F键/Ctrl+B快捷键实战

本文详细解析EPLAN线圈触点映像的3种显示方式与F键/Ctrl+B快捷键实战技巧,帮助电气设计工程师提升图纸操作效率。通过精简编号、路径栏显示和元件旁可视化三种模式的应用场景对比,结合快捷键肌肉记忆训练法,实现触点快速定位与管理,大幅减少手动查找时间。

weixin_42522964的博客 481

php使用redis的GEO地理信息类型 实现经纬度计算排序

php使用redis的GEO地理信息类型 实现经纬度计算 redis3.2中增中了对GEO类型的支持,该类型存储经纬度,提供了经纬设置,查询,范围查询,距离查询,经纬度hash等操作。 <?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379, 60); $redis->auth(''); //添加成员的经纬度信息 $redis->rawCommand('geoadd', 'citys', '116.40',

pinbolei的博客 1357

低成本实现webhook接收端[python]

Webook本质上也是API,只不过是反向调用,即前端不主动发送请求,完全由后端推送。简单来说,Webhook是一个接受HTTP POST或是GET,PUT,DELETE的URL,一个实现了Webhook的API提供商就是在当事件发生的时候会向配置的URL发送信息,与请求-响应式不同,使用Webhook可以实时接收到变化。Ps:Webhook可能会发出大量的请求,确保接受的URL不被泄露或者应用能及时处理这些请求。

锡城小凯的博客 1万+

32、运算放大器的工作原理与应用

本文详细介绍了运算放大器的工作原理与多种应用场景,涵盖开环与闭环放大器的基本概念、理想运算放大器的特性及其‘黄金规则’。文章深入解析了反相放大器、同相放大器、单位增益跟随器与反相器的配置和增益计算,并探讨了电压比较器及窗口比较器的工作机制。同时提供了运算放大器在实际应用中的选型流程、使用注意事项以及常见故障排查方法,帮助读者全面掌握运算放大器的设计与应用要点。

u5v6w7的博客 163

【PHP】根据两地经纬度计算距离

最近做一个H5活动的项目,有个要求是必须现场玩家才能参与,所以就需要计算玩家位置和活动地点的距离来判断是否在活动现场。 以下是写的一个根据经纬度计算两地距离的方法 1 function getDistance($lng1, $lat1, $lng2, $lat2) { 2 $EARTH_RADIUS = 6378.137; 3 $radLat1 = rad($la...

weixin_30367543的博客 94

无人机——电机篇(一)

1. 电机的定义 电机俗称“马达”,是无人机的动力来源,无人机通过改变电机的转速来改变无人机的飞行状态。即改变每个电机的速度,使得无人机能够盘旋空中,上升或下降,或向各个方向移动。2. 电机的分类 电机分为:“无刷电机”和“有刷电机” - 无刷电机:是采用半导体开关器件来实现电子换向,具有可靠性高、低干扰、低噪声低、寿命长等优点。一般应用在稍大型的飞行器,载重大,可以有更广泛的用途。 - 有刷电机:是内含电刷装置的将电能转换成机械能(电动机)或将机械能转换成电能(发电机)的旋转电机。有刷电机是所有电机的基

weixin_46066938的博客 1万+

tp5.0 根据经纬度 获取附近信息_Redis怎么实现查找附近的人之数据类型Geospatial...

前面我们已经把五大数据类型讲完了,今天我开始讲redis特殊数据类型Geospatial,地理位置的存储,这个是数据类型可以实现朋友定位,两个地方之间的距离,搜索附近的人等。具体操作就是将指定的地理空间位置(纬度、经度、名称)添加到指定的key中,这些数据将会存储到sorted set然后使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询计算出范围内的元素和元素之间...

weixin_39557087的博客 235

【Block总结】DiffAttention,差分注意力融入CLIP架构,抑制噪声,增强对相关特征的关注|即插即用

DiffCLIP通过微小的结构改动实现了显著的性能提升,为多模态模型的轻量化与高效化提供了新范式。

AI浩 1561

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

使用PHP实现查找附近的人

https://zhuanlan.zhihu.com/p/31380780 LBS(基于位置的服务) 查找附近的人有个更大的专有名词叫做LBS(基于位置的服务),LBS是指是指通过电信移动运营商的无线电通讯网络或外部定位方式,获取移动终端用户的位置信息,在GIS平台的支持下,为用户提供相应服务的一种增值业务。因此首先得获取用户的位置,获取用户的位置有基于GPS、基于运营商基站、WIFI等...

weixin_34208283的博客 868

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

PHP中使用Redis操作GEO [使用手册]

GEOADD— 添加一个地理位置(经纬度)到 Redis。GEODIST— 计算两个地理位置之间的距离。GEOPOS— 获取一个或多个地理位置的坐标。GEORADIUS— 查找给定半径内的地理位置。— 查找距离给定地理位置(由集合成员表示)指定半径内的地点。GEODECODE— 解码存储的地理位置数据。GEOLIST— 获取地理位置排序的列表。

weixin_56190532的博客 1297

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

mysql按经纬度排序_mysql根据经纬度查找排序

目的是,根据经纬度,实现查其找附近的人或地点,LBS场景。做基于地理位置的应用后台,没有使用mongodb,看了网上的很多答案,其实也就是几份答案而已,天下文章一大抄。这里综合网上的,结合自身,总结出了几种根据经纬度的排序算法,测试可用,性能也还可以。逐步递进优化,不同阶段,不同使用。这里x为纬度,y为经度。PS:SQL代码不完整,仅供阅读参考,理解意思就好。一、MySql不使用空间函数,简单版1...

weixin_35931314的博客 2478

获取两点位置的坐标 计算距离常用与范围限制

//$lat1 $lng1 点1的坐标 $lat2 $lng2 点2的位置 private function getDistance($lat1,$lng1,$lat2,$lng2) { $R = 6378137; $radLat1 = deg2rad($lat1); $radLat2 = deg2rad($lat2); $radLng1 = deg2rad($l...

xubohaojiaojiao的博客 509

php mysql 根据坐标查询附近列表_使用PHP实现查找你想要的附近人

最近有个业务场景使用到了查找附近的人,于是查阅了相关资料,并对使用PHP实现相关功能的多种方式和具体实现做一篇技术总结,欢迎各位看官提出意见和纠错,下面开始进入正题:LBS(基于位置的服务)查找附近的人有个更大的专有名词叫做LBS(基于位置的服务),LBS是指是指通过电信移动运营商的无线电通讯网络或外部定位方式,获取移动终端用户的位置信息,在GIS平台的支持下,为用户提供相应服务的一种增值业务。因...

weixin_39834678的博客 631

php redis 附近人

<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379, 60); $redis->auth(''); //添加成员的经纬度信息 $redis->rawCommand('geoadd', 'citys', '116.40', '39.90', 'beijing'); $redis->rawCommand('geoadd', 'citys', '121.47', '31.23', 'shanghai').

Bug制造者 338

REDIS10_GEO添加、距离、半径命令、美团附近酒店推送案例

REDIS10_GEO添加、距离、半径命名、美团附近酒店推送案例

所得皆惊喜 1060

php中怎么找到sql数据库,php – 如何使用纬度和经度从sql数据库中找到最近的位置?...

查找MySQL附近的位置这里是SQL语句,可以找到距离37,-122坐标25英里的最近的20个位置。它根据该行的纬度/经度和目标纬度/经度计算距离,然后仅要求距离值小于25的行,按距离排序整个查询,并将其限制为20个结果。以公里而不是英里搜索,用6371替换3959。表结构:id,name,address,lat,lng注意 – 纬度= 37&经度= -122。所以你只是通过自己的。SEL...

weixin_39619478的博客 216

mysql 地理_地理距离MySQL

我们使用双倍来存储纬度和经度.此外,我们预先(通过触发器)预读所有在仅查看一个点时可预先计算的值.我目前无法访问我们正在使用的公式,稍后会添加它.这针对最佳速度/精度平衡进行了优化.对于定义的区域搜索(给我x km内的所有点),我们另外存储lat / lng值乘以1e6(1,000,000),因此我们可以通过比较闪电般快的整数范围来限制为正方形.lat BETWEEN 1290000 AND 23...

weixin_42299131的博客 181

mysql lbs 附近的人_使用PHP实现查找附近的人

最近有个业务场景使用到了查找附近的人,于是查阅了相关资料,并对使用PHP实现相关功能的多种方式和具体实现做一篇技术总结,欢迎各位看官提出意见和纠错,下面开始进入正题:LBS(基于位置的服务)查找附近的人有个更大的专有名词叫做LBS(基于位置的服务),LBS是指是指通过电信移动运营商的无线电通讯网络或外部定位方式,获取移动终端用户的位置信息,在GIS平台的支持下,为用户提供相应服务的一种增值业务。因...

weixin_42530458的博客 191
上一篇: TP框架Mysql查询数据库字段为空的方法
下一篇: PHP阿里云号码隐私服务
爱摸鱼的码农
博客等级 码龄6年 19粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值