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

Posted

技术标签:

【中文标题】使用java程序查找具有指定半径的给定纬度和经度(即位置)的周围纬度和纬度值【英文标题】:Find surrounding the latitude and latitude values of given latitude and longitude(i.e: location) with specified radius using java program 【发布时间】:2014-04-08 03:33:53 【问题描述】:

mysql db 表中的所有纬度和经度值(包括当前位置和其他位置)都是 varchar 数据类型。我正在努力获取当前位置 2 公里或 5 公里半径内的所有最大和最小纬度/经度值。我当前的位置纬度和经度值以及其他位置纬度/经度值使用 google map api 存储到 mysql db 表中。

我需要从表中获取所有在当前位置给定半径内的位置记录(最大/最小纬度/经度值)。

输入:

位置:AA(或)纬度:12.561 和经度:77.48 半径/距离:2km

表:

位置 |纬度 |长

AA | 12.561 | 77.48

A2 | 12.567 | 77.489

A4 | 12.59 | 78.42

A6 | 12.57 | 77.45

输出:

满足上述条件的位置名称列表。

如果你能给出几行java代码,那将是很大的帮助。

我需要在不使用方位值的情况下获取所有方向 (N/E/S/W) 的 lat/long 值的 o/p,因为我的应用程序没有方位值。它应该只使用当前位置纬度/经度和距离/半径值的输入来获取输出值。

【问题讨论】:

【参考方案1】:

您需要将坐标从 Varchar 更改为 DECIMAL(8, 6) 以允许计算距离。

以下 SQL 查询使用Spherical Law of Cosines 计算坐标与表中坐标之间的距离。

d = acos( sin(φ1).sin(φ2) + cos(φ1).cos(φ2).cos(Δλ) ).R

查询使用MySQL Math functions

"SELECT Location,Lat,Long,(6367 * acos( cos( radians(center_lat) )
  * cos( radians( Lat ) ) * cos( radians( Long ) - radians(center_long) )
  + sin( radians(center_lat) ) * sin( radians( Lat ) ) ) ) AS distance FROM table 
  HAVING distance < radius ORDER BY distance ASC LIMIT 0 , 20"

其中center_lat &center_long 是给定点的坐标

PS 用 3956 换英里 6367 换公里

【讨论】:

你好,有没有办法只用 javascript 来做到这一点,遍历一个数组。?谢谢

以上是关于使用java程序查找具有指定半径的给定纬度和经度(即位置)的周围纬度和纬度值的主要内容,如果未能解决你的问题,请参考以下文章

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

PHP SQL查询以查找纬度和经度的给定半径内的所有零售商

给定 GPS 的地理位置,如何在给定的 x 米半径内找到纬度和经度

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

从给定点和半径计算纬度和经度

python:使用纬度和经度查找提供位置半径内的位置的优雅方法