php - 通过给定的经度和纬度查找在数据库中注册的位置 - Laravel
问题描述
我正在从事电子商务工作,但在理解通过给定(经度 - 纬度)查找位置并从数据库中的位置表中获取匹配位置的方法时遇到了问题。
我有位置表来存储我国家的所有城市。
前任:
城市名 | 费用 | 液化天然气 | 纬度 |
---|---|---|---|
巴比尔。 | 12 | 47.0983 | 31.90043 |
巴格达。 | 5 | 47.0983 | 31.90043 |
………… | ... | ………… | …… |
上面的lng & lat是假的。
我想要的是:
当用户从移动应用程序中选择他在地图上的位置时,应用程序会通过 API 端点发送他选择的位置(经度 - 纬度):
例如 /locations?lng=xxx&lat=xxx
然后服务器(Laravel 应用程序)应该检查(lng-lat)和位置表,以根据给定的凭据找到用户的城市。
抱歉,如果我不能很好地解释,但这是应该的,不要检查最近的位置或类似的东西。
解决方案
根据您的解释,我可以理解的是,您想找到离用户位置最近的城市。你可以在这里使用距离farmula
=ACOS( SIN(lat1 * PI()/180) * SIN(lat2 * PI()/180) + COS(lat1 * PI()/180) * COS(lat2 * PI()/180) * COS(lon2 * PI()/180-lon1 * PI()/180) ) * 6371000
您可以使用此公式将 lat、lng 转换为距离,然后可以根据距离对数据进行排序。
或者,如果您只想根据给定的 lat、lng 查询数据,那么您可以简单地在您的表上运行选择查询。要确保的一件事是,您必须将 lat,lng 存储为小数点后 8 位才能找到准确的结果。
推荐阅读
- javascript - 在客户端的浏览器中打开(由 http get 产生的)PDF
- linux - Pthreads 和 QT
- ios - 使用 FCM 推送通知不工作 iOS
- python - 启动两个 cpu 阻塞侦听器并等待其中一个完成
- python - 将任何 YAML 文件转换为 Ansible 清单
- google-chrome - Chrome 命令 API 浏览器后退/前进快捷键?
- postgresql - 如何在 postgresql 中写 where 条件?
- html - 在卡片上添加不透明度,但在图标上禁用它
- c# - 在c#中处理大量内存列表时如何避免垃圾排序问题
- swift - Swift:当我的设备设置为“de”并且我的方案设置为“系统语言”时,为什么 DateFormatter 使用区域设置“en”