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 ...
随机推荐
- UE3代码阅读需知
转自:http://www.cnblogs.com/hmxp8/archive/2012/02/21/2361211.html 掌握一款庞大的引擎,要一下子掌握真的很难,慢慢地从Editor,Scri ...
- http请求中的get和post的区别
1.标准答案 GET在浏览器回退时是无害的,而POST会再次提交请求. GET产生的URL地址可以被Bookmark,而POST不可以. GET请求会被浏览器主动cache,而POST不会,除非手动设 ...
- [poj1088]滑雪(二维最长下降子序列)
解题关键:记忆化搜索 #include<cstdio> #include<cstring> #include<algorithm> #include<cstd ...
- (转)JAVA中的权限修饰符
注:本博文是转载的,原文地址:http://blog.csdn.net/xk632172748/article/details/51755438 Java中修饰符总结: 访问控制修饰符 访问控制修饰符 ...
- Flask16 项目结构、flask_script插件
1 项目结构 需求:易维护.可扩展 1.1 views 处理逻辑和路由映射 C 1.2 models 模型类 M 1.3 templates 模板文件 V 1.4 static 今天文件,如:js.c ...
- 《精通Spring4.X企业应用开发实战》读后感第六章(引用Bean的属性值)
- 13. CTF综合靶机渗透(六)
靶机说明 Breach1.0是一个难度为初级到中级的BooT2Root/CTF挑战. VM虚机配置有静态IP地址(192.168.110.140),需要将虚拟机网卡设置为host-only方式组网,并 ...
- Python短小精悍的Orator查询构造器
查询构造器 介绍 这个数据库查询构造器,提供便利的接口可以创建和执行查询操作,可以在大多数数据库中使用. 查询select操作 查询表中所有的数据. users = db.table('users') ...
- 面试题18(一):在O(1)时间删除链表结点
// 面试题18(一):在O(1)时间删除链表结点 // 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该 // 结点.链表结点与函数的定义如下: // struct Lis ...
- 小小c#算法题 - 6 - 快速排序 (QuickSort)
快速排序是排序算法中效率比较高的一种,也是面试常被问到的问题. 快速排序(Quick Sort)是对冒泡排序的一种改进.它的基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字 ...