Javascript 如何在mysql查询中精确查找选定对角线区域之间的数据

Javascript 如何在mysql查询中精确查找选定对角线区域之间的数据,javascript,php,mysql,google-maps,google-maps-api-3,Javascript,Php,Mysql,Google Maps,Google Maps Api 3,这些是我选择的对角线点的坐标,当选择的点更多时会更多 1: 25.312063043186914 2: 55.30672073364258 1: 25.24096949112138 2: 55.40525436401367 1: 25.224509592006314 2: 55.3462028503418 1: 25.22513076073063 2: 55.281314849853516 1: 25.27822894908031 2: 55.25899887084961 下面

这些是我选择的对角线点的坐标,当选择的点更多时会更多

1: 25.312063043186914  2: 55.30672073364258
1: 25.24096949112138   2: 55.40525436401367
1: 25.224509592006314  2: 55.3462028503418
1: 25.22513076073063   2: 55.281314849853516
1: 25.27822894908031   2: 55.25899887084961
下面是我当前的mysql查询,在所选对角线之间没有给出完美的结果。有什么帮助吗

SELECT 
  * 
FROM
  tbl_custom 
WHERE latitude <= 25.312063043186914 
  AND latitude >= 25.224509592006314 
  AND longitude <= 55.40525436401367 
  AND longitude >= 55.25899887084961 
选择
* 
从…起
tbl_海关
其中纬度=25.224509592006314
经度=55.2589987084961

删除边界框查询中的点,但不删除需要使用算法的多边形中的点

实现这一点的最简单方法是将坐标放在数组中。这些可用于查找查询的最大和最小坐标以及pointInPolygon()函数的参数

function pointInPolygon(polySides,polyX,polyY,x,y) {
 var j = polySides-1 ;
  oddNodes = 0;
  for (i=0; i<polySides; i++) {
    if (polyY[i]<y && polyY[j]>=y  ||  polyY[j]<y && polyY[i]>=y) {
        if (polyX[i]+(y-polyY[i])/(polyY[j]-polyY[i])*(polyX[j]-polyX[i])<x)  {
            oddNodes=!oddNodes; 
        }
    }
   j=i; }

  return oddNodes;
}
使用边界框和多边形中的点获得的贴图


应该可以,您使用的mysql类型正确吗?DECIMAL(总位数,小数)是的,我的经纬度字段的mysql数据类型是DECIMAL,我得到了结果,但它也用我选择的对角线点做了标记?看看这个问题。编写代码不是那么容易;-)Postgres已经预先定义了这一点。也许mysql也有,也许我误解了这个问题,但您的SQL目前提供给您的是一个矩形区域内的任意点,该区域由对角点定义(25.224509592006314,55.2589987084961)-(25.312063043186914,55.40525436401367)。看一下上面的截图,我把它想象成一个完全包围多边形的矩形,这样可能会导致很多误报,你能展示一下php文件吗,你是如何进行查询的。谢谢
var polySides = 4;//number of points in polygon
//horizontal Latitude coordinates of polygon  
var polyLat = new Array();
polyLat[0] = 51.5;
polyLat[1] = 51.5;
polyLat[2] = 52.5;
polyLat[3] = 53;
polyLat[4] = 51.5;//First point repeated to close polygon
//vertical Longitude coordinates of polygon 
var polyLng =  new Array();
polyLng[0] = 0.5;
polyLng[1] = -1.9;
polyLng[2] = -1;
polyLng[3] = 0.6;
polyLng[4] = 0.5;
//Coordinates for bounding box
var maxLat = Math.max.apply(null,polyLat);
var minLat = Math.min.apply(null,polyLat);
var maxLng = Math.max.apply(null,polyLng);
var minLng = Math.min.apply(null,polyLng);

//Using jQuery
var url = "yourFile .php";
 url +="?maxLat="+maxLat +"&minLat="+minLat +"&maxLng="+maxLng +"&minLng="+minLng;
 $.getJSON(url,function(data) {
    $.each(data.marker,function(i,dat){
        if (pointInPolygon(polySides,polyLat,polyLng,dat.lat,dat.lng)){
            var latlng = new google.maps.LatLng(dat.lat,dat.lng); 
            addMarker(latlng,dat.name);
            bounds.extend(latlng);
        }
    });
    map.fitBounds(bounds);
});