Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在具有位置的Bing地图上实现pointInpolygon搜索算法';s坐标来自数据库_Javascript_Bing Maps - Fatal编程技术网

Javascript 在具有位置的Bing地图上实现pointInpolygon搜索算法';s坐标来自数据库

Javascript 在具有位置的Bing地图上实现pointInpolygon搜索算法';s坐标来自数据库,javascript,bing-maps,Javascript,Bing Maps,我希望确定给定的点(纬度和经度)是否在Bing地图上绘制的多边形中找到。多边形由用户绘制 这就是我已经拥有的 var图,drawingManager; 函数GetMap(){ map=new Microsoft.Maps.map('#myMap',{}); //加载DrawingTools模块 Microsoft.Maps.loadModule('Microsoft.Maps.DrawingTools',函数(){ //创建DrawingTools类的实例并将其绑定到地图。 var tool

我希望确定给定的点(纬度和经度)是否在Bing地图上绘制的多边形中找到。多边形由用户绘制

这就是我已经拥有的


var图,drawingManager;
函数GetMap(){
map=new Microsoft.Maps.map('#myMap',{});
//加载DrawingTools模块
Microsoft.Maps.loadModule('Microsoft.Maps.DrawingTools',函数(){
//创建DrawingTools类的实例并将其绑定到地图。
var tools=new Microsoft.Maps.DrawingTools(map);
//显示绘图工具栏并在地图上启用编辑。
工具。showDrawingManager(功能(管理器){
//存储对图形管理器的引用,因为它在以后会很有用。
drawingManager=经理;
//创建DrawingBarAction的快捷方式以最小化代码。
var da=Microsoft.Maps.DrawingTools.DrawingBarAction;
//限制在图形工具栏中显示哪些工具。
manager.setOptions({
绘图操作:da.polyline | da.polygon | da.erase,
fillColor:'rgba(255,0,0,0.5)'
});
});
});
}
函数IsPointInPolygon(){
var shapes=drawingManager.getPrimitives();
如果(shapes&&shapes.length>0){
对于(i=0;i纬度!=点[j]。纬度>纬度&&
液化天然气<
((点[j].经度-点[i].经度)*
(纬度点[i].纬度)/
(点[j].纬度-点[i].纬度)+
点[i]。经度;
如果(相交)内部=!内部;
}
返回内部;
}
},
错误:函数(错误){
//记录或警告错误
警报(“有错误!”);
//警报(错误);
}
});
}
//返回地点;
}否则{
警告(“图形管理器中没有形状”);
}
}

看来您是根据官方文档改编的,对吗?如果是这样的话,它们的实现似乎有缺陷,不能按预期工作

相反,我建议使用以下方法来确定该点是否实际位于多边形内:

function pointInPolygon(points, lat, lng) {
  // ray-casting algorithm based on
  // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
  var inside = false;
  for (var i = 0, j = points.length - 1; i < points.length; j = i++) {
    var intersect =
      points[i].latitude > lat != points[j].latitude > lat &&
      lng <
        ((points[j].longitude - points[i].longitude) *
          (lat - points[i].latitude)) /
          (points[j].latitude - points[i].latitude) +
          points[i].longitude;
    if (intersect) inside = !inside;
  }

  return inside;
}
功能点多边形(点、纬度、液化天然气){
//基于遗传算法的光线投射算法
// http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
var内=假;
对于(变量i=0,j=points.length-1;i纬度!=点[j]。纬度>纬度&&
液化天然气<
((点[j].经度-点[i].经度)*
(纬度点[i].纬度)/
(点[j].纬度-点[i].纬度)+
点[i]。经度;
如果(相交)内部=!内部;
}
返回内部;
}
演示

var映射,绘图管理器,点;
函数GetMap(){
map=new Microsoft.Maps.map(“#myMap”,{});
point=map.getCenter();
var pin=新的Microsoft.Maps.Pushpin(点{
标题:“中心