通过给定的经度和纬度查找在数据库中注册的位置 - Laravel
Posted
技术标签:
【中文标题】通过给定的经度和纬度查找在数据库中注册的位置 - Laravel【英文标题】:Find location registered in database by the given longitude and latitude - Laravel 【发布时间】:2021-10-09 04:41:45 【问题描述】:我正在从事电子商务工作,但在理解通过给定(经度 - 纬度)查找位置并从 locations 获取匹配位置的方法时遇到了问题 数据库中的表。
我有 locations 表来存储我所在国家/地区的所有城市。
例如:
city_name | fee | lng | lat |
---|---|---|---|
Babil. | 12 | 47.0983 | 31.90043 |
Baghdad. | 5 | 47.0983 | 31.90043 |
............ | ... | ....... | ...... |
上面的lng和lat都是假的。
我想要的是:
当用户从移动应用程序中选择他在地图上的位置时,应用程序会通过 API 端点发送他选择的位置(经度 - 纬度):
例如/locations?lng=xxx&lat=xxx
然后服务器(Laravel 应用程序)应检查 (lng-lat) 与 locations 表,以根据给定的凭据找到用户所在的城市。
对不起,如果我不能很好地解释,但这是应该的,不要检查最近的位置或类似的东西。
【问题讨论】:
到目前为止你尝试了什么? @Aless55我在这里尝试了最佳答案laracasts.com/discuss/channels/eloquent/…,它运行良好,但是! max_distance 是这个问题,因为当我在一个小城市尝试它时它成功返回,而当我在一个大城市尝试时没有返回任何东西 【参考方案1】:根据您的解释,我可以理解的是,您想找到离用户位置最近的城市。您可以在这里使用距离农场
=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 位才能找到准确的结果。
【讨论】:
这里的 (lat1, lat2) 和 (lon1, lon2) 是什么意思? 所以用来计算两组(lat1, lon1), (lat2, lon2)之间的距离。 (lat1, lon1) 可能已经在您的数据库中保存了数据。 (lat2, lon2) 可能是您的用户输入。以上是关于通过给定的经度和纬度查找在数据库中注册的位置 - Laravel的主要内容,如果未能解决你的问题,请参考以下文章