SQL判断经纬度在矩形内
1,将城市地图拆分等距拆分为矩形
数据结构如图:

2.查看高德JS API (点是否在多边形内)核心代码:
a=[114.069564,22.545774];
b=[
[114.067595,22.552082],
[114.077322,22.552082],
[114.077322,22.543099],
[114.067595,22.543099],
];
c=true lf: function(a, b, c) {
var d = a[0];
a = a[1];
var f = !1, g, h, k, l, m = b.length, n = 0;
for (l = m - 1; n < m; l = n,
n += 1) {
var p = !1;
g = b[n][0];
h = b[n][1];
k = b[l][0];
l = b[l][1];
if (g === d && h === a || k === d && l === a)
return c ? !0 : !1;
if (h < a === l >= a) {
g = (k - g) * (a - h) / (l - h) + g;
if (d === g)
return c ? !0 : !1;
p = d < g
}
p && (f = !f)
}
return f
}
3.将js代码解析为SQL (未考虑使用函数,因在其他平台上使用)
SELECT * FROM map_grid a
WHERE
(CASE
WHEN
(a.first_longitude = 114.069564 and a.first_latitude=22.545774) or
(a.second_longitude = 114.069564 and a.second_latitude=22.545774) or
(a.third_longitude = 114.069564 and a.third_latitude=22.545774) or
(a.fourth_longitude = 114.069564 and a.fourth_latitude=22.545774)
THEN TRUE WHEN (a.first_latitude<22.545774)=(a.fourth_latitude>=22.545774)
AND (a.fourth_longitude-a.first_longitude)*(22.545774-a.first_latitude)/(a.fourth_latitude-a.first_latitude)+ a.first_longitude = 114.069564
THEN TRUE WHEN (a.second_latitude<22.545774)=(a.first_latitude>=22.545774)
AND (a.first_longitude-a.second_longitude)*(22.545774-a.second_latitude)/(a.first_latitude-a.second_latitude)+ a.second_longitude = 114.069564
THEN TRUE WHEN (a.third_latitude<22.545774)=(a.second_latitude>=22.545774)
AND (a.second_longitude-a.third_longitude)*(22.545774-a.third_latitude)/(a.second_latitude-a.third_latitude)+ a.third_longitude = 114.069564
THEN TRUE WHEN (a.fourth_latitude<22.545774)=(a.third_latitude>=22.545774)
AND (a.third_longitude-a.fourth_longitude)*(22.545774-a.fourth_latitude)/(a.third_latitude-a.fourth_latitude)+ a.fourth_longitude = 114.069564
THEN TRUE WHEN(
(
CASE
WHEN (a.first_latitude<22.545774)=(a.fourth_latitude>=22.545774)
AND (a.fourth_longitude-a.first_longitude)*(22.545774-a.first_latitude)/(a.fourth_latitude-a.first_latitude)+ a.first_longitude > 114.069564
THEN 1
ELSE 0 END
)+(
CASE
WHEN (a.second_latitude<22.545774)=(a.first_latitude>=22.545774)
AND (a.first_longitude-a.second_longitude)*(22.545774-a.second_latitude)/(a.first_latitude-a.second_latitude)+ a.second_longitude > 114.069564
THEN 1
ELSE 0 END
)+(
CASE
WHEN (a.third_latitude<22.545774)=(a.second_latitude>=22.545774)
AND (a.second_longitude-a.third_longitude)*(22.545774-a.third_latitude)/(a.second_latitude-a.third_latitude)+ a.third_longitude > 114.069564
THEN 1
ELSE 0 END
)+(
CASE
WHEN (a.fourth_latitude<22.545774)=(a.third_latitude>=22.545774)
AND (a.third_longitude-a.fourth_longitude)*(22.545774-a.fourth_latitude)/(a.third_latitude-a.fourth_latitude)+ a.fourth_longitude > 114.069564
THEN 1
ELSE 0 END
)
) % 2=1
THEN TRUE ELSE FALSE
END
)
4.执行结果

SQL判断经纬度在矩形内的更多相关文章
- POJ 1410 Intersection(判断线段交和点在矩形内)
Intersection Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9996 Accepted: 2632 Desc ...
- R树判断点在多边形内-Java版本
1.什么是RTree 待补充 2.RTree java依赖 rtree的java开源版本在GitHub上:https://github.com/davidmoten/rtree 上面有详细的使用说明 ...
- lightOJ 1366 Pair of Touching Circles(统计矩形内相切圆对)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1366 题意:给出一个矩形,在内部画两个圆A和B使得AB都完全在矩形内且AB相切且AB的 ...
- 判断圆和矩形是否相交C - Rectangle and Circle
Description Given a rectangle and a circle in the coordinate system(two edges of the rectangle are p ...
- 判断点在多边形内算法的C++实现
目录 1. 算法思路 2. 具体实现 3. 改进空间 1. 算法思路 判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况.该算法的思路很简单,就是从目标 ...
- canvas路径剪切和判断是否在路径内
1.剪切路径 clip() var ctx=mycanvas.getContext('2d'); ctx.beginPath(); // 建一个矩形路径 ctx.moveTo(20,10) ctx.l ...
- mybatis动态sql中的两个内置参数(_parameter和_databaseId)
mybatis动态sql中的两个内置参数(_parameter和_databaseId) <!-- mybatis动态sql的两个内置参数 不只是方法传递过来的参数可以被 ...
- 以log(n)的时间求矩形内的点
设想这么一个简单的问题,在一个平面上有n个点,给定一个矩形,问位于矩形内的点有哪些. 这个问题的简单思路非常简单,每次遍历所有点,看其是否在给定的矩形中.时间复杂度呢?单次查询的时间就是一次遍历的时间 ...
- POJ 1410--Intersection(判断线段和矩形相交)
Intersection Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16322 Accepted: 4213 Des ...
随机推荐
- redhat无法注册RHN的解决办法
1.问题 初学Linux,采用边实战nginx边学Linux命令的方式,这样学习的还快还真实一些.当然,问题来的很快.我使用的是redhat,安装pcre就出现了问题,如下: [root@localh ...
- J2EE 工作中注意事项
[转载于http://www.cnblogs.com/hemingwang0902/archive/2012/01/06/2314215.html] 根据当前项目中代码存在的一些问题,编写了一个编码注 ...
- docker里安装ubuntu
使用 Ubuntu 官方镜像 Ubuntu 相关的镜像有很多,这里使用 -s 10 参数,只搜索那些被收藏 10 次以上的镜像 $ docker search -s 10 ubuntu NAME DE ...
- ASE分析
1.Prepare necessary input files(可以参考上次的博客http://www.cnblogs.com/renping/p/7391028.html) 1)对fq1和fq2合并 ...
- <c和指针>学习笔记5动态内存分配和预处理器
1 动态内存 比如声明数组得时候,我们需要提前预估数组长度,分配大了浪费,少了就更不好操作了.从而引入动态分配,需要的时候再分配. (1)malloc和free void *malloc(size_t ...
- ArrayList反转
Collections.reverse(arrayList); 下面看例子: import java.util.ArrayList;import java.util.Collections; publ ...
- Linux下查看CPU使用率 --- top命令的使用
在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会 ...
- BZOJ 1858【线段树】
题意: 0 a b 把 [a, b] 区间内的所有数全变成0 1 a b 把 [a, b] 区间内的所有数全变成1 2 a b 把 [a,b] 区间内的所有数全部取反 3 a b 询问 [a, ...
- nginx 安装遇到的问题
今天想学学 nginx,于是先把它安装起来.按照 http://nginx.org/en/linux_packages.html 上面的方法,在我的 ubuntu 虚拟机上很容易地就安装好了.可是要运 ...
- jmeter-提取器之JSON Path PostProcessor
后置处理器添加 json path postprocessor. 用处: 当前接口响应返回的json中提取内容,作为变量可以在不同的请求中传递. 1. json path postprocessor ...