Javascript 在具有位置的Bing地图上实现pointInpolygon搜索算法';s坐标来自数据库
我希望确定给定的点(纬度和经度)是否在Bing地图上绘制的多边形中找到。多边形由用户绘制 这就是我已经拥有的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
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(点{
标题:“中心