根据经纬度查询最近距离,mysql查询经纬度附近范围
public class Test{
private static List<LocalAddress> ilist = new ArrayList<LocalAddress>();
public static void main(String[] args) {
Test test3 = new Test();
Double localDouble = 0.0;
//定义一个二维数组存放经纬度
Double[][] doubles = {
{ 22.6036906766, 113.8793209706 }, //雍华源
{ 22.5205569549, 113.9394272419 }, //西海湾花园
{ 22.6494305358, 114.0411629507 }, //世纪春城4期
{ 22.5255080247,114.0384880750 }, //金海湾花园
{ 22.5246432654,114.0720634923 }, //金港豪庭
{ 22.5963291708,113.9689558477 }, //得意名居
{ 22.5509638661,113.9358124450 }, //麒麟花园A区西门
{ 22.5509638661,113.9358124450 }, //麒麟花园A区北门
{ 22.5254496086,114.0555439122 }, //裕康时尚名居
{ 22.7789489191,114.3063672776 }, //桑泰丹华园
{ 22.5240537775,114.0641924822 }, //皇庭彩园
{ 22.5141408858,114.0624887496 } }; //城市3米6
//门店的经纬度
Double[] initlocal = {22.539899298946577,113.95296375395431 };
for (int i = 0; i < doubles.length; i++) {
System.out.println("doubles.length==============="+doubles.length);
System.out.println("(" + doubles[i][0] + "," + doubles[i][1] + ")");
Double z = test3.getDistance(doubles[i][0], doubles[i][1],initlocal[0], initlocal[1]);
System.out.println(z);
//获取最短距离后把经纬度和距离存放到对象中
LocalAddress localaddress = new LocalAddress(doubles[i][0], doubles[i][1], z);
//将对象用list保存
ilist.add(localaddress);
}
List<LocalAddress> shotlocal = getLocalList();
Double lat=shotlocal.get(0).getLat();
Double lon= shotlocal.get(0).getLon();
localDouble = shotlocal.get(0).getDistance();
System.err.println("最近的距离:" + localDouble + "。对应的经纬是:" +"(" + lat + "," + lon + ")");
}
/*第一种求最近距离 ===================================================*/
/**
* 获取最短的距离
* @param lat
* @param lon
* @param initlat
* @param initlon
* @return
*/
public Double GetShotLocal(Double lat, Double lon, Double initlat,Double initlon) {
Double x = (initlat - lat) * (initlat - lat);
Double y = (initlon - lon) * (initlon - lon);
Double z = Math.sqrt(x + y);
return z;
}
/**
* 对List<LocalAddress> 进行排序
* @return
*/
public static List<LocalAddress> getLocalList() {
Collections.sort(ilist, new Comparator<LocalAddress>() {
@Override
public int compare(LocalAddress arg0, LocalAddress arg1) {
Double double1 = arg0.getDistance();
Double double2 = arg1.getDistance();
if(double1>double2){
return 1;
}else if (double1 == double2) {
return 0;
}else {
return -1;
}
}
});
return ilist;
}
/* 第二种求最近距离 ==================================================================*/
private static final double EARTH_RADIUS = 6378.137;//地球半径,单位千米
private static double rad(double d)
{
return d * Math.PI / 180.0;
}
/**
*
* @param lat1 第一个纬度
* @param lng1 第一个经度
* @param lat2 第二个纬度
* @param lng2 第二个经度
* @return 两个经纬度的距离
*/
public static double getDistance(double lat1,double lng1,double lat2,double lng2)
{
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +
Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
s = s * EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s;
}
}
entity
public class LocalAddress {
private Double lat; //纬度
private Double lon; //经度
private Double distance; //最近距离
public LocalAddress() {
// TODO Auto-generated constructor stub
}
public LocalAddress(Double lat, Double lon, Double distance) {
super();
this.lat = lat;
this.lon = lon;
this.distance = distance;
}
}
<!--根据经纬度查询最近距离范围-->
<select id="SelectDistanceByLat" parameterType="map" resultType="map">
SELECT
*,(
6371 * acos (
cos ( radians(#{lat}) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians(#{lng}) )
+ sin ( radians(#{lat}) )
* sin( radians( lat ) )
)
) AS distance
FROM machine
HAVING 3 > distance
ORDER BY distance
LIMIT 0 , 20;
</select>
根据经纬度查询最近距离,mysql查询经纬度附近范围的更多相关文章
- Mysql 查询缓存总结
Mysql 查询缓存总结 MySQL查询缓存解释 缓存完整的SELECT查询结果,也就是查询缓存.保存查询返回的完整结果.当查询命中该缓存,mysql会立刻返回结果,跳过了解析.优化和执行阶段, 查询 ...
- mysql查询、子查询、连接查询
mysql查询.子查询.连接查询 一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.gr ...
- 生产要不要开启MySQL查询缓存
一.前言 在当今的各种系统中,缓存是对系统性能优化的重要手段.MySQL Query Cache(MySQL查询缓存)在MySQL Server中是默认打开的,但是网上各种资料以及有经验的DBA都建议 ...
- mysql 下 计算 两点 经纬度 之间的距离(转)
公式如下,单位米: 第一点经纬度:lng1 lat1 第二点经纬度:lng2 lat2 round(6378.138*2*asin(sqrt(pow(sin( (lat1*pi()/180-lat2* ...
- mysql 下 计算 两点 经纬度 之间的距离
公式如下,单位米: 第一点经纬度:lng1 lat1 第二点经纬度:lng2 lat2 round(6378.138*2*asin(sqrt(pow(sin( (lat1*pi()/180-lat2* ...
- 腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期
腾讯云图片鉴黄集成到C# 官方文档:https://cloud.tencent.com/document/product/641/12422 请求官方API及签名的生成代码如下: public c ...
- 百度api查询多个地址的经纬度的问题
在使用百度api查询多个地址的经纬度的时候,由于百度api提供的经纬度查询方法是回调函数,并且后续操作必须等经纬度获取完成才能进行,问题就存在于怎么判断所有地点是否都回调完成了,问了之前的一个前端大佬 ...
- LBS应用之 根据一点的经纬度实现附近点的查询
这年头和LBS相关的应用越来越火.从foursquare的热闹程度就可见一般(什么,没听过 foursquare-. 哥们,你 out 了).和 LBS有关的应用一般都包括一些共同的操作,最常见的一个 ...
- Mysql 计算地址经纬度距离实时位置
前言 最近在做项目时候,遇到一个这样子的需求, 点到卡包里面卡券使用使用,需要展示卡券使用附近门店, 思路 数据库地址表设计 通用的区域街道地址表tz_sys_area 字段名称 类型 备注 area ...
随机推荐
- P3209-平面图判定
平面图 平面图就是所有点的连边不相交的图.(当然是在你尽量想让它不相交的情况下).这一点可以大概理解成拓扑图的性质,即每连一条边就会将某个区域进行分割--很明显,如果两个点分别处在两个不可达的区域,它 ...
- 浅析VO、DTO、DO、PO的概念、区别和用处(八)
本篇文章主要讨论一下我们经常会用到的一些对象:VO.DTO.DO和PO. 由于不同的项目和开发人员有不同的命名习惯,这里我首先对上述的概念进行一个简单描述,名字只是个标识,我们重点关注其概念: 概念: ...
- javascript中“==”,“===”和“Object.is(a,b)”的区别
作为两个量比较的三种方式"==","==="和"Object.is(a,b)"有一定区别,如下(具体见MDN): (1)Object.is( ...
- python里面的==,is的区别
python中对象的三个要素:id(身份标示),type(数据类型).value(值) == 比较操作符:用来比较两个对象值是否相等. is 同一性运算符:比较两个对象的id值是否相等,即是否是同 ...
- Python基础之用tkinter写界面
参考链接:https://blog.csdn.net/qq_37482202/article/details/84201259 Tkinter介绍 Tkinter(也叫Tk接口)是Tk图形用户界面工具 ...
- mysql为什么用b+树做索引
关键字就是key的意思 一.B-Tree的性质 1.定义任意非叶子结点最多只有M个儿子,且M>2: 2.根结点的儿子数为[2, M]: 3.除根结点以外的非叶子结点的儿子数为[M/2, M]: ...
- nexus 私服 设置本公司代理 记录
index成功
- [JS]函数作为值
在JavaScript中,函数不仅是语法,也是值.这意味着可以把函数赋值给变量.保存为对象的属性或者数组的元素.作为参数传给其他函数. 将函数赋值给变量s,实际上变量引用的是函数对象.不仅可以通过函数 ...
- 『Java』Collection接口 Collections类
接口Collection public interface Collection<E>定义了所有单列集合中共性的方法,所有的单列集合都可以使用共性方法. Collection的常用子接口有 ...
- 使用Windows客户端连接Linux系统中的MySQL时产生的错误已经解决
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...