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);
});