求圆半径范围内所有的点
时间:2019-11-11
本文章向大家介绍求圆半径范围内所有的点,主要包括求圆半径范围内所有的点使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在做和地图有关的项目的时候,有时候会遇到这样的需求,比如:
已知圆中心的经纬度(lng, lat)
,手动输入它的半径radius
,得到这个圆范围内所有的随机点。
我用的是百度地图js-sdk。
理论部分,喜欢看代码可以直接跳过:
从上图可以看出,圆1的经纬度是(114.132384, 22.539816)用(x1, y1)表示,圆2的经纬度是(114.131888, 22.533516)用(x2, y2)表示
我不可能用abs(x1 - x2) + abs(y1 - y2) <= radius
这样的逻辑去判断圆1是否在以圆2为中心点,radius为半径的圆范围内,因为这样不是两点之间的最佳路径。(abs为取绝对值函数)
我需要用到初中数学学到过的勾股定理知识,用(abs(x1-x2))^2 + (abs(y1-y2))^2 <= radius^2
来获得两点之间最短路径,也就是把这个想象成一个直角三角形,求它的斜边。
我通过js将原点的经纬度和半径传到后台,后台用java,用的是mybatis框架,数据库用的Oracle。
js和java就是简单的数据传输,可以省略,业务逻辑主要在sql部分:
表结构:车牌号,纬度,经度,时间。
先根据相同车牌号用GROUP BY去重,取最大时间的一条数据。
求圆半径内点的sql代码:
SELECT G1.*
FROM ${tableName} G1, (
SELECT MIN(UUID) AS UUID, MAX(LOCATIONTIME)
FROM ${tableName}
GROUP BY VEHICLENO
) G2
WHERE G1.UUID = G2.UUID
AND POWER(ABS((G1.LAT / 0.00000899 - #{lat} / 0.00000899)), 2) + POWER(ABS((G1.LON / 0.00001141 - #{lon} / 0.00001141)), 2) <![CDATA[<=]]> POWER(#{radius}, 2)
AND VEHICLENO LIKE CONCAT(#{chepaihao}, '%')
主要的业务是这句:
POWER(ABS((G1.LAT / 0.00000899 - #{lat} / 0.00000899)), 2) + POWER(ABS((G1.LON / 0.00001141 - #{lon} / 0.00001141)), 2) <![CDATA[<=]]> POWER(#{radius}, 2)
0.00000899是纬度和米的比例关系: 1m = 0.00000899°
0.00001141是经度和米的比例关系: 1m = 0.00001141°
最后根据车牌号模块查询。
原文地址:https://www.cnblogs.com/dagger9527/p/11836865.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法