通过给定的经度和纬度查找在数据库中注册的位置 - 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
............ ... ....... ......

上面的lnglat都是假的。

我想要的是:

当用户从移动应用程序中选择他在地图上的位置时,应用程序会通过 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的主要内容,如果未能解决你的问题,请参考以下文章

使用java程序查找具有指定半径的给定纬度和经度(即位置)的周围纬度和纬度值

在R中将纬度/经度转换为高度

从给定位置(经度、纬度)的 Y 半径内查找 X 的所有值

查找具有纬度和经度的记录[重复]

使用经度和纬度查找给定距离内的所有附近客户

给定两个位置,如何从谷歌地图获取所有纬度和经度