首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java程序,在给定纬度和经度(即:位置)周围查找指定半径的纬度和纬度值。

使用java程序,在给定纬度和经度(即:位置)周围查找指定半径的纬度和纬度值。
EN

Stack Overflow用户
提问于 2014-03-05 20:31:13
回答 1查看 1.2K关注 0票数 1

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

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

投入:

位置: AA (或) Lat: 12.561,Lon : 77.48半径/Distance :2公里

表:

地点: Lat _ Long

AA = 12.561 \x{ 77.48 }

A2 _~_

A4 / 12.59 / 78.42

A6 / 12.57 - 77.45

产出:

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

如果您只给出几行java代码,这将是很大的帮助。

我需要得到所有方向(N/E/S/W)的lat/long值的o/p,而不用轴承值,因为我的应用程序没有方位值。只需输入当前位置、纬度、/longitude和距离/半径值即可得到输出值。

EN

回答 1

Stack Overflow用户

发布于 2014-03-05 22:08:12

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

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

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

查询使用MySQL Math functions

代码语言:javascript
复制
"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_latcenter_long是给定点的坐标

PS使用3956英里的里程6367公里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22208554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档