有没有人知道是否有一种简单的方法来检测标记是否在定义的边界内?
感谢
答案 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)。
以同样的方式处理像点,线串等几何图形,你可以使用像intersect这样的方法来检查它。
答案 1 :(得分: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);
}
答案 2 :(得分: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");