Function for getting extent intersection
This commit is contained in:
+43
-6
@@ -418,7 +418,11 @@ ol.extent.extendXY = function(extent, x, y) {
|
|||||||
* @return {number} Area.
|
* @return {number} Area.
|
||||||
*/
|
*/
|
||||||
ol.extent.getArea = function(extent) {
|
ol.extent.getArea = function(extent) {
|
||||||
return ol.extent.getWidth(extent) * ol.extent.getHeight(extent);
|
var area = 0;
|
||||||
|
if (!ol.extent.isEmpty(extent)) {
|
||||||
|
area = ol.extent.getWidth(extent) * ol.extent.getHeight(extent);
|
||||||
|
}
|
||||||
|
return area;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -511,11 +515,44 @@ ol.extent.getHeight = function(extent) {
|
|||||||
* @return {number} Intersection area.
|
* @return {number} Intersection area.
|
||||||
*/
|
*/
|
||||||
ol.extent.getIntersectionArea = function(extent1, extent2) {
|
ol.extent.getIntersectionArea = function(extent1, extent2) {
|
||||||
var minX = Math.max(extent1[0], extent2[0]);
|
var intersection = ol.extent.getIntersection(extent1, extent2);
|
||||||
var minY = Math.max(extent1[1], extent2[1]);
|
return ol.extent.getArea(intersection);
|
||||||
var maxX = Math.min(extent1[2], extent2[2]);
|
};
|
||||||
var maxY = Math.min(extent1[3], extent2[3]);
|
|
||||||
return Math.max(0, maxX - minX) * Math.max(0, maxY - minY);
|
|
||||||
|
/**
|
||||||
|
* Get the intersection of two extents.
|
||||||
|
* @param {ol.Extent} extent1 Extent 1.
|
||||||
|
* @param {ol.Extent} extent2 Extent 2.
|
||||||
|
* @param {ol.Extent=} opt_extent Optional extent to populate with intersection.
|
||||||
|
* @return {ol.Extent} Intersecting extent.
|
||||||
|
*/
|
||||||
|
ol.extent.getIntersection = function(extent1, extent2, opt_extent) {
|
||||||
|
var intersection = goog.isDef(opt_extent) ?
|
||||||
|
opt_extent : ol.extent.createEmpty();
|
||||||
|
if (ol.extent.intersects(extent1, extent2)) {
|
||||||
|
if (extent1[0] > extent2[0]) {
|
||||||
|
intersection[0] = extent1[0];
|
||||||
|
} else {
|
||||||
|
intersection[0] = extent2[0];
|
||||||
|
}
|
||||||
|
if (extent1[1] > extent2[1]) {
|
||||||
|
intersection[1] = extent1[1];
|
||||||
|
} else {
|
||||||
|
intersection[1] = extent2[1];
|
||||||
|
}
|
||||||
|
if (extent1[2] < extent2[2]) {
|
||||||
|
intersection[2] = extent1[2];
|
||||||
|
} else {
|
||||||
|
intersection[2] = extent2[2];
|
||||||
|
}
|
||||||
|
if (extent1[3] < extent2[3]) {
|
||||||
|
intersection[3] = extent1[3];
|
||||||
|
} else {
|
||||||
|
intersection[3] = extent2[3];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return intersection;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,30 @@ describe('ol.extent', function() {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('getIntersection()', function() {
|
||||||
|
it('returns the intersection of two extents', function() {
|
||||||
|
var world = [-180, -90, 180, 90];
|
||||||
|
var north = [-180, 0, 180, 90];
|
||||||
|
var farNorth = [-180, 45, 180, 90];
|
||||||
|
var east = [0, -90, 180, 90];
|
||||||
|
var farEast = [90, -90, 180, 90];
|
||||||
|
var south = [-180, -90, 180, 0];
|
||||||
|
var farSouth = [-180, -90, 180, -45];
|
||||||
|
var west = [-180, -90, 0, 90];
|
||||||
|
var farWest = [-180, -90, -90, 90];
|
||||||
|
var none = ol.extent.createEmpty();
|
||||||
|
expect(ol.extent.getIntersection(world, none)).to.eql(none);
|
||||||
|
expect(ol.extent.getIntersection(world, north)).to.eql(north);
|
||||||
|
expect(ol.extent.getIntersection(world, east)).to.eql(east);
|
||||||
|
expect(ol.extent.getIntersection(world, south)).to.eql(south);
|
||||||
|
expect(ol.extent.getIntersection(world, west)).to.eql(west);
|
||||||
|
expect(ol.extent.getIntersection(farEast, farWest)).to.eql(none);
|
||||||
|
expect(ol.extent.getIntersection(farNorth, farSouth)).to.eql(none);
|
||||||
|
expect(ol.extent.getIntersection(north, west)).to.eql([-180, 0, 0, 90]);
|
||||||
|
expect(ol.extent.getIntersection(east, south)).to.eql([0, -90, 180, 0]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('containsCoordinate', function() {
|
describe('containsCoordinate', function() {
|
||||||
|
|
||||||
describe('positive', function() {
|
describe('positive', function() {
|
||||||
|
|||||||
Reference in New Issue
Block a user