2014-03-03 48 views
0

内有谁知道,如果有一个简单的方法来检测一个标志物是一个定义的范围内?的OpenLayers如何检测一个标记是一个多边形

谢谢

+0

要关闭的问题,请注明答案通过点击绿色的对勾所接受,帮助解决你的问题的答案旁边。 –

+0

但我找到了我自己的解决方案 – rfm121741

+0

然后你应该发布你自己的答案/解决方案。 –

回答

2

我假设您使用OL v2。

一方面,标记需要您指定一个OpenLayers.LonLat对象。 另一方面,您可以使用OpenLayers.Bounds类定义任何边界,然后使用containsLonLat方法检查它是否包含标记LonLat。 (检查http://dev.openlayers.org/releases/OpenLayers-2.13.1/doc/apidocs/files/OpenLayers/BaseTypes/Bounds-js.html)。

以同样的方式,如果你使用像点,线串等几何形状,你有像交叉检查这个方法。

+0

感谢您的回应,我发现这containsPoint为我工作 – rfm121741

0

我有我该检查的标志点进行示例代码中内多边形与否。

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

我解决这个与

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"); 
相关问题