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 ...
随机推荐
- loadrunner手动生成脚本函数
1.点击insert
- 利用Ssocks访问国外网站(yutube/google等)
***开源项目:https://github.com/***/ 本例使用的是针对windows系统的c-sharp版本:https://github.com/***/***-windows 运行*** ...
- Redux API之compose
compose(...functions) 从右到左来组合多个函数. 这是函数式编程中的方法,为了方便,被放到了 Redux 里. 当需要把多个 store 增强器 依次执行的时候,需要用到它. 参数 ...
- java对单向单向链表的操作
概述:众所周知,数据对于数据的存储时连续的,也就是说在计算机的内存中是一个整体的.连续的.不间断的ADT数据结构.伴随的问题也会随之出现,这样其实对于内存的动态分配是不灵活的.而链表具备这个优点.因此 ...
- Struts2学习第三课 Action
action VS Action类 action:代表一个Struts2的请求 Action类:能够处理struts2请求的类. 属性的名字必须遵守与JavaBean属性名相同的命名规则. 属性的 ...
- hdu1067
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #inclu ...
- 微信小程序自学第三课:文件作用域,模块化
一.文件作用域 在 JavaScript 文件中声明的变量和函数只在该文件中有效:不同的文件中可以声明相同名字的变量和函数,不会互相影响. 通过全局函数 getApp() 可以获取全局的应用实例,如果 ...
- vue入门(二)----模板与计算属性
其实这部分内容我也是参考的官网:http://cn.vuejs.org/v2/guide/syntax.html,但是我还是想把自己不懂的知识记录一下,加深印象,也可以帮助自己以后查阅.所谓勤能补拙. ...
- Codeforces Round #522 Div2C(思维)
#include<bits/stdc++.h>using namespace std;int a[200007];int b[200007][7];int ans[200007];int ...
- 倍增lca-ZJOI2012 灾难
一个食物网有N个点,代表N种生物,如果生物x可以吃生物y,那么从y向x连一个有向边.这个图没有环.图中有一些点没有连出边,这些点代表的生物都是生产者,可以通过光合作用来生存: 而有连出边的点代表的都是 ...