Giving vector features an onScreen method. By default, this uses geometry.intersects. If a rougher approximation will do, call with boundsOnly set to true. r=crschmidt (closes #1238)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@5625 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -148,6 +148,25 @@ OpenLayers.Bounds = OpenLayers.Class({
|
||||
return bbox;
|
||||
},
|
||||
|
||||
/**
|
||||
* APIMethod: toGeometry
|
||||
* Create a new polygon geometry based on this bounds.
|
||||
*
|
||||
* Returns:
|
||||
* {<OpenLayers.Geometry.Polygon>} A new polygon with the coordinates
|
||||
* of this bounds.
|
||||
*/
|
||||
toGeometry: function() {
|
||||
return new OpenLayers.Geometry.Polygon([
|
||||
new OpenLayers.Geometry.LinearRing([
|
||||
new OpenLayers.Geometry.Point(this.left, this.bottom),
|
||||
new OpenLayers.Geometry.Point(this.right, this.bottom),
|
||||
new OpenLayers.Geometry.Point(this.right, this.top),
|
||||
new OpenLayers.Geometry.Point(this.left, this.top)
|
||||
])
|
||||
]);
|
||||
},
|
||||
|
||||
/**
|
||||
* APIMethod: getWidth
|
||||
*
|
||||
|
||||
@@ -114,13 +114,34 @@ OpenLayers.Feature.Vector = OpenLayers.Class(OpenLayers.Feature, {
|
||||
|
||||
/**
|
||||
* Method: onScreen
|
||||
* HACK - we need to rewrite this for non-point geometry
|
||||
* Determine whether the feature is within the map viewport. This method
|
||||
* tests for an intersection between the geometry and the viewport
|
||||
* bounds. If a more effecient but less precise geometry bounds
|
||||
* intersection is desired, call the method with the boundsOnly
|
||||
* parameter true.
|
||||
*
|
||||
* Parameters:
|
||||
* boundsOnly - {Boolean} Only test whether a feature's bounds intersects
|
||||
* the viewport bounds. Default is false. If false, the feature's
|
||||
* geometry must intersect the viewport for onScreen to return true.
|
||||
*
|
||||
* Returns:
|
||||
* {Boolean} For now just returns null
|
||||
* {Boolean} The feature is currently visible on screen (optionally
|
||||
* based on its bounds if boundsOnly is true).
|
||||
*/
|
||||
onScreen:function() {
|
||||
return null;
|
||||
onScreen:function(boundsOnly) {
|
||||
var onScreen = false;
|
||||
if(this.layer && this.layer.map) {
|
||||
var screenBounds = this.layer.map.getExtent();
|
||||
if(boundsOnly) {
|
||||
var featureBounds = this.geometry.getBounds();
|
||||
onScreen = screenBounds.intersectsBounds(featureBounds);
|
||||
} else {
|
||||
var screenPoly = screenBounds.toGeometry();
|
||||
onScreen = screenPoly.intersects(this.geometry);
|
||||
}
|
||||
}
|
||||
return onScreen;
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user