javascript - 如何在mysql查询中精确找到选定对 Angular 线区域之间的数据

标签 javascript php mysql google-maps google-maps-api-3

enter image description here

这些是我选择的对 Angular 点的坐标,当选择的点越多就会越多。

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 查询,在选定的对 Angular 线之间没有给出完美的结果。有帮助吗??

SELECT 
  * 
FROM
  tbl_custom 
WHERE latitude <= 25.312063043186914 
  AND latitude >= 25.224509592006314 
  AND longitude <= 55.40525436401367 
  AND longitude >= 55.25899887084961 

最佳答案

要消除边界框查询内但不在多边形内的点,您需要使用 Point in Polygon算法。

最简单的方法是将坐标存储在数组中。这些可用于查找查询的最大和最小坐标以及 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;
}

在您的 map 代码中使用 jQuery getJSON()

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

使用边界框和多边形中的点获得的 map 。

pointin

关于javascript - 如何在mysql查询中精确找到选定对 Angular 线区域之间的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20538063/

相关文章:

php - 在 Netbeans 中工作时关于方法声明的通知消息

php - 在 PHP 中实现 Crockford Base32 编码

php - 在删除行之前选择一个字段值

javascript - Jquery FullCalendar 未在弹出窗口中加载

javascript - 如何在ul下拉菜单中显示选定的菜单项

mysql - 在具有年度数据行的表中存储年份字段的列类型

php - 模态弹出窗口中的文本框未获取由更新单击触发的国家/地区值?

mysql - 应用程序设计单个数据库与多个数据库

Javascript - 在上一个函数结束后启动函数

javascript - 如何从 axios Promise javascript 返回值