Javascript openlayers如何检测标记是否位于多边形内

Javascript openlayers如何检测标记是否位于多边形内,javascript,openlayers,Javascript,Openlayers,有人知道是否有一种简单的方法可以检测标记是否在定义的边界内吗 谢谢我假设您正在使用OL v2 一方面,标记要求您指定OpenLayers.LonLat对象。 另一方面,您可以使用OpenLayers.Bounds类定义任何边界,然后使用containsLonLat方法检查它是否包含标记LonLat。(检查) 同样,如果您使用点、线字符串等几何图形,您可以使用intersect等方法来检查此点。我已经完成了示例代码,其中检查标记点是否位于多边形内 function init() {

有人知道是否有一种简单的方法可以检测标记是否在定义的边界内吗


谢谢

我假设您正在使用OL v2

一方面,标记要求您指定OpenLayers.LonLat对象。 另一方面,您可以使用OpenLayers.Bounds类定义任何边界,然后使用
containsLonLat
方法检查它是否包含标记LonLat。(检查)


同样,如果您使用点、线字符串等几何图形,您可以使用intersect等方法来检查此点。

我已经完成了示例代码,其中检查标记点是否位于多边形内

function init() {

        map = new OpenLayers.Map("mapdiv");
        map.addLayer(new OpenLayers.Layer.OSM());

        epsg4326 = new OpenLayers.Projection("EPSG:4326"); //WGS 1984 projection
        projectTo = map.getProjectionObject(); //The map projection (Spherical Mercator)
        epsg900913 = new OpenLayers.Projection("EPSG:900913");

        var lonLat = new OpenLayers.LonLat(lon, lat).transform(epsg4326, projectTo);

        map.setCenter(lonLat, zoom);
        map.addControl(new OpenLayers.Control.MousePosition());
        var vectorLayer = new OpenLayers.Layer.Vector("Overlay");

        var point = new OpenLayers.Geometry.Point(lonLat.lon, lonLat.lat);

        var myPolygon = OpenLayers.Geometry.Polygon.createRegularPolygon
        (
            point,
            5000,
            4,
            0
        );

        var featurecircle = new OpenLayers.Feature.Vector(myPolygon);
        var markers = new OpenLayers.Layer.Markers( ".\marker.png" );
            map.addLayer(markers);
            markers.addMarker(new OpenLayers.Marker(lonLat));

        controls = {

                drag: new OpenLayers.Control.DragFeature(vectorLayer, {
                     autoActivate: true,
                     onComplete: displayBounds
                  })

                  //new OpenLayers.Control.DragFeature(vectorLayer)
            };

            for(var key in controls) {
                map.addControl(controls[key]);
            }

        var featurePoint = new OpenLayers.Feature.Vector(
            point,
            { description: 'info' },
            { externalGraphic: 'img/marker.png', graphicHeight: 25, graphicWidth: 21, graphicXOffset: -12, graphicYOffset: -25 }
        );

        vectorLayer.addFeatures([featurecircle]);
        for(key in controls) {
                var control = controls[key];
                control.activate();
                }
                var bounds = vectorLayer.features[0].geometry.getBounds();

    function displayBounds(feature){
            var bounds = feature.geometry.getBounds();
            var lonlat = new OpenLayers.LonLat(lon, lat).transform(epsg4326,epsg900913);;


            if ((lonlat.lon < bounds.left) || (lonlat.lat > bounds.top) || (lonlat.lat < bounds.bottom) ||(lonlat.lon > bounds.right) )
                {
                alert('out....');

                }

        }




        map.addLayer(vectorLayer);
  }
函数init(){
map=新的OpenLayers.map(“mapdiv”);
addLayer(新的OpenLayers.Layer.OSM());
epsg4326=新OpenLayers.Projection(“EPSG:4326”);//WGS 1984 Projection
projectTo=map.getProjectionObject();//地图投影(球形墨卡托)
epsg900913=新OpenLayers.Projection(“EPSG:900913”);
var lonLat=newopenlayers.lonLat(lon,lat).transform(epsg4326,projectTo);
地图设置中心(lonLat,zoom);
addControl(新的OpenLayers.Control.MousePosition());
var vectorLayer=新的OpenLayers.Layer.Vector(“覆盖”);
var point=新的OpenLayers.Geometry.point(lonLat.lon,lonLat.lat);
var myPolygon=OpenLayers.Geometry.Polygon.createRegularPolygon
(
指向
5000,
4.
0
);
var featurecircle=新的OpenLayers.Feature.Vector(myPolygon);
var markers=新的OpenLayers.Layer.markers(“.\marker.png”);
添加图层(标记);
markers.addMarker(新OpenLayers.Marker(lonLat));
控件={
拖动:新建OpenLayers.Control.DragFeature(矢量层{
自动激活:正确,
onComplete:displayBounds
})
//新OpenLayers.Control.DragFeature(矢量层)
};
for(变量键输入控件){
map.addControl(控件[键]);
}
var featurePoint=新的OpenLayers.Feature.Vector(
指向
{description:'info'},
{externalGraphic:'img/marker.png',graphicHeight:25,graphicWidth:21,graphicXOffset:-12,graphicYOffset:-25}
);
vectorLayer.addFeatures([featurecircle]);
用于(输入控件){
var控制=控制[键];
控件。激活();
}
var bounds=vectorLayer.features[0]。geometry.getBounds();
函数显示边界(功能){
var bounds=feature.geometry.getBounds();
var lonlat=newopenlayers.lonlat(lon,lat).transform(epsg4326,epsg900913);;
if((lonlat.lonbounds.top)| |(lonlat.latbounds.right))
{
警惕(‘外出……’);
}
}
map.addLayer(矢量层);
}
我用

var poly = new OpenLayers.Geometry.Polygon([linearRing]);
                var polygonFeature = new OpenLayers.Feature.Vector(poly, null, siteStyle);
                map.addLayer(vectors);
                vectors.addFeatures([polygonFeature]);
var marker_point=new OpenLayers.Geometry.Point(lng,lat);
            var inside=poly.containsPoint(marker_point);
            if(inside)alert("Inside the polygon");

感谢您的回复,我发现这个containsPoint对我有用,但我找到了自己的解决方案