1,将城市地图拆分等距拆分为矩形

数据结构如图:

2.查看高德JS API (点是否在多边形内)核心代码:

  1. a=[114.069564,22.545774];
  2. b=[
  3. [114.067595,22.552082],
  4. [114.077322,22.552082],
  5. [114.077322,22.543099],
  6. [114.067595,22.543099],
  7. ];
  8. c=true
  9.  
  10. lf: function(a, b, c) {
  11. var d = a[0];
  12. a = a[1];
  13. var f = !1, g, h, k, l, m = b.length, n = 0;
  14. for (l = m - 1; n < m; l = n,
  15. n += 1) {
  16. var p = !1;
  17. g = b[n][0];
  18. h = b[n][1];
  19. k = b[l][0];
  20. l = b[l][1];
  21. if (g === d && h === a || k === d && l === a)
  22. return c ? !0 : !1;
  23. if (h < a === l >= a) {
  24. g = (k - g) * (a - h) / (l - h) + g;
  25. if (d === g)
  26. return c ? !0 : !1;
  27. p = d < g
  28. }
  29. p && (f = !f)
  30. }
  31. return f
  32. }

3.将js代码解析为SQL (未考虑使用函数,因在其他平台上使用)

  1. SELECT * FROM map_grid a
  2. WHERE
  3. (CASE
  4. WHEN
  5. (a.first_longitude = 114.069564 and a.first_latitude=22.545774) or
  6. (a.second_longitude = 114.069564 and a.second_latitude=22.545774) or
  7. (a.third_longitude = 114.069564 and a.third_latitude=22.545774) or
  8. (a.fourth_longitude = 114.069564 and a.fourth_latitude=22.545774)
  9. THEN TRUE
  10.  
  11. WHEN (a.first_latitude<22.545774)=(a.fourth_latitude>=22.545774)
  12. AND (a.fourth_longitude-a.first_longitude)*(22.545774-a.first_latitude)/(a.fourth_latitude-a.first_latitude)+ a.first_longitude = 114.069564
  13. THEN TRUE
  14.  
  15. WHEN (a.second_latitude<22.545774)=(a.first_latitude>=22.545774)
  16. AND (a.first_longitude-a.second_longitude)*(22.545774-a.second_latitude)/(a.first_latitude-a.second_latitude)+ a.second_longitude = 114.069564
  17. THEN TRUE
  18.  
  19. WHEN (a.third_latitude<22.545774)=(a.second_latitude>=22.545774)
  20. AND (a.second_longitude-a.third_longitude)*(22.545774-a.third_latitude)/(a.second_latitude-a.third_latitude)+ a.third_longitude = 114.069564
  21. THEN TRUE
  22.  
  23. WHEN (a.fourth_latitude<22.545774)=(a.third_latitude>=22.545774)
  24. AND (a.third_longitude-a.fourth_longitude)*(22.545774-a.fourth_latitude)/(a.third_latitude-a.fourth_latitude)+ a.fourth_longitude = 114.069564
  25. THEN TRUE
  26.  
  27. WHEN(
  28. (
  29. CASE
  30. WHEN (a.first_latitude<22.545774)=(a.fourth_latitude>=22.545774)
  31. AND (a.fourth_longitude-a.first_longitude)*(22.545774-a.first_latitude)/(a.fourth_latitude-a.first_latitude)+ a.first_longitude > 114.069564
  32. THEN 1
  33. ELSE 0 END
  34. )+(
  35. CASE
  36. WHEN (a.second_latitude<22.545774)=(a.first_latitude>=22.545774)
  37. AND (a.first_longitude-a.second_longitude)*(22.545774-a.second_latitude)/(a.first_latitude-a.second_latitude)+ a.second_longitude > 114.069564
  38. THEN 1
  39. ELSE 0 END
  40. )+(
  41. CASE
  42. WHEN (a.third_latitude<22.545774)=(a.second_latitude>=22.545774)
  43. AND (a.second_longitude-a.third_longitude)*(22.545774-a.third_latitude)/(a.second_latitude-a.third_latitude)+ a.third_longitude > 114.069564
  44. THEN 1
  45. ELSE 0 END
  46. )+(
  47. CASE
  48. WHEN (a.fourth_latitude<22.545774)=(a.third_latitude>=22.545774)
  49. AND (a.third_longitude-a.fourth_longitude)*(22.545774-a.fourth_latitude)/(a.third_latitude-a.fourth_latitude)+ a.fourth_longitude > 114.069564
  50. THEN 1
  51. ELSE 0 END
  52. )
  53. ) % 2=1
  54. THEN TRUE
  55.  
  56. ELSE FALSE
  57. END
  58. )

4.执行结果

SQL判断经纬度在矩形内的更多相关文章

  1. POJ 1410 Intersection(判断线段交和点在矩形内)

    Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9996   Accepted: 2632 Desc ...

  2. R树判断点在多边形内-Java版本

    1.什么是RTree 待补充 2.RTree java依赖 rtree的java开源版本在GitHub上:https://github.com/davidmoten/rtree 上面有详细的使用说明 ...

  3. lightOJ 1366 Pair of Touching Circles(统计矩形内相切圆对)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1366 题意:给出一个矩形,在内部画两个圆A和B使得AB都完全在矩形内且AB相切且AB的 ...

  4. 判断圆和矩形是否相交C - Rectangle and Circle

    Description Given a rectangle and a circle in the coordinate system(two edges of the rectangle are p ...

  5. 判断点在多边形内算法的C++实现

    目录 1. 算法思路 2. 具体实现 3. 改进空间 1. 算法思路 判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况.该算法的思路很简单,就是从目标 ...

  6. canvas路径剪切和判断是否在路径内

    1.剪切路径 clip() var ctx=mycanvas.getContext('2d'); ctx.beginPath(); // 建一个矩形路径 ctx.moveTo(20,10) ctx.l ...

  7. mybatis动态sql中的两个内置参数(_parameter和_databaseId)

    mybatis动态sql中的两个内置参数(_parameter和_databaseId)   <!-- mybatis动态sql的两个内置参数           不只是方法传递过来的参数可以被 ...

  8. 以log(n)的时间求矩形内的点

    设想这么一个简单的问题,在一个平面上有n个点,给定一个矩形,问位于矩形内的点有哪些. 这个问题的简单思路非常简单,每次遍历所有点,看其是否在给定的矩形中.时间复杂度呢?单次查询的时间就是一次遍历的时间 ...

  9. POJ 1410--Intersection(判断线段和矩形相交)

    Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16322   Accepted: 4213 Des ...

随机推荐

  1. UE3代码阅读需知

    转自:http://www.cnblogs.com/hmxp8/archive/2012/02/21/2361211.html 掌握一款庞大的引擎,要一下子掌握真的很难,慢慢地从Editor,Scri ...

  2. http请求中的get和post的区别

    1.标准答案 GET在浏览器回退时是无害的,而POST会再次提交请求. GET产生的URL地址可以被Bookmark,而POST不可以. GET请求会被浏览器主动cache,而POST不会,除非手动设 ...

  3. [poj1088]滑雪(二维最长下降子序列)

    解题关键:记忆化搜索 #include<cstdio> #include<cstring> #include<algorithm> #include<cstd ...

  4. (转)JAVA中的权限修饰符

    注:本博文是转载的,原文地址:http://blog.csdn.net/xk632172748/article/details/51755438 Java中修饰符总结: 访问控制修饰符 访问控制修饰符 ...

  5. Flask16 项目结构、flask_script插件

    1 项目结构 需求:易维护.可扩展 1.1 views 处理逻辑和路由映射 C 1.2 models 模型类 M 1.3 templates 模板文件 V 1.4 static 今天文件,如:js.c ...

  6. 《精通Spring4.X企业应用开发实战》读后感第六章(引用Bean的属性值)

  7. 13. CTF综合靶机渗透(六)

    靶机说明 Breach1.0是一个难度为初级到中级的BooT2Root/CTF挑战. VM虚机配置有静态IP地址(192.168.110.140),需要将虚拟机网卡设置为host-only方式组网,并 ...

  8. Python短小精悍的Orator查询构造器

    查询构造器 介绍 这个数据库查询构造器,提供便利的接口可以创建和执行查询操作,可以在大多数数据库中使用. 查询select操作 查询表中所有的数据. users = db.table('users') ...

  9. 面试题18(一):在O(1)时间删除链表结点

    // 面试题18(一):在O(1)时间删除链表结点 // 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该 // 结点.链表结点与函数的定义如下: // struct Lis ...

  10. 小小c#算法题 - 6 - 快速排序 (QuickSort)

    快速排序是排序算法中效率比较高的一种,也是面试常被问到的问题. 快速排序(Quick Sort)是对冒泡排序的一种改进.它的基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字 ...