Named exports from ol/geom/flat/contains

This commit is contained in:
Frederic Junod
2018-01-26 16:03:29 +01:00
parent 47015eba0c
commit aea39782fb
7 changed files with 35 additions and 50 deletions

View File

@@ -12,7 +12,7 @@ import SimpleGeometry from '../geom/SimpleGeometry.js';
import {linearRingss as linearRingssArea} from '../geom/flat/area.js'; import {linearRingss as linearRingssArea} from '../geom/flat/area.js';
import _ol_geom_flat_center_ from '../geom/flat/center.js'; import _ol_geom_flat_center_ from '../geom/flat/center.js';
import _ol_geom_flat_closest_ from '../geom/flat/closest.js'; import _ol_geom_flat_closest_ from '../geom/flat/closest.js';
import _ol_geom_flat_contains_ from '../geom/flat/contains.js'; import {linearRingssContainsXY} from '../geom/flat/contains.js';
import _ol_geom_flat_deflate_ from '../geom/flat/deflate.js'; import _ol_geom_flat_deflate_ from '../geom/flat/deflate.js';
import _ol_geom_flat_inflate_ from '../geom/flat/inflate.js'; import _ol_geom_flat_inflate_ from '../geom/flat/inflate.js';
import _ol_geom_flat_interiorpoint_ from '../geom/flat/interiorpoint.js'; import _ol_geom_flat_interiorpoint_ from '../geom/flat/interiorpoint.js';
@@ -151,8 +151,7 @@ MultiPolygon.prototype.closestPointXY = function(x, y, closestPoint, minSquaredD
* @inheritDoc * @inheritDoc
*/ */
MultiPolygon.prototype.containsXY = function(x, y) { MultiPolygon.prototype.containsXY = function(x, y) {
return _ol_geom_flat_contains_.linearRingssContainsXY( return linearRingssContainsXY(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, x, y);
this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, x, y);
}; };

View File

@@ -12,7 +12,7 @@ import SimpleGeometry from '../geom/SimpleGeometry.js';
import {offset as sphereOffset} from '../sphere.js'; import {offset as sphereOffset} from '../sphere.js';
import {linearRings as linearRingsArea} from '../geom/flat/area.js'; import {linearRings as linearRingsArea} from '../geom/flat/area.js';
import _ol_geom_flat_closest_ from '../geom/flat/closest.js'; import _ol_geom_flat_closest_ from '../geom/flat/closest.js';
import _ol_geom_flat_contains_ from '../geom/flat/contains.js'; import {linearRingsContainsXY} from '../geom/flat/contains.js';
import _ol_geom_flat_deflate_ from '../geom/flat/deflate.js'; import _ol_geom_flat_deflate_ from '../geom/flat/deflate.js';
import _ol_geom_flat_inflate_ from '../geom/flat/inflate.js'; import _ol_geom_flat_inflate_ from '../geom/flat/inflate.js';
import _ol_geom_flat_interiorpoint_ from '../geom/flat/interiorpoint.js'; import _ol_geom_flat_interiorpoint_ from '../geom/flat/interiorpoint.js';
@@ -141,8 +141,7 @@ Polygon.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistan
* @inheritDoc * @inheritDoc
*/ */
Polygon.prototype.containsXY = function(x, y) { Polygon.prototype.containsXY = function(x, y) {
return _ol_geom_flat_contains_.linearRingsContainsXY( return linearRingsContainsXY(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, x, y);
this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, x, y);
}; };

View File

@@ -2,7 +2,6 @@
* @module ol/geom/flat/contains * @module ol/geom/flat/contains
*/ */
import {forEachCorner} from '../../extent.js'; import {forEachCorner} from '../../extent.js';
const _ol_geom_flat_contains_ = {};
/** /**
@@ -13,18 +12,17 @@ const _ol_geom_flat_contains_ = {};
* @param {ol.Extent} extent Extent. * @param {ol.Extent} extent Extent.
* @return {boolean} Contains extent. * @return {boolean} Contains extent.
*/ */
_ol_geom_flat_contains_.linearRingContainsExtent = function(flatCoordinates, offset, end, stride, extent) { export function linearRingContainsExtent(flatCoordinates, offset, end, stride, extent) {
const outside = forEachCorner(extent, const outside = forEachCorner(extent,
/** /**
* @param {ol.Coordinate} coordinate Coordinate. * @param {ol.Coordinate} coordinate Coordinate.
* @return {boolean} Contains (x, y). * @return {boolean} Contains (x, y).
*/ */
function(coordinate) { function(coordinate) {
return !_ol_geom_flat_contains_.linearRingContainsXY(flatCoordinates, return !linearRingContainsXY(flatCoordinates, offset, end, stride, coordinate[0], coordinate[1]);
offset, end, stride, coordinate[0], coordinate[1]);
}); });
return !outside; return !outside;
}; }
/** /**
@@ -36,7 +34,7 @@ _ol_geom_flat_contains_.linearRingContainsExtent = function(flatCoordinates, off
* @param {number} y Y. * @param {number} y Y.
* @return {boolean} Contains (x, y). * @return {boolean} Contains (x, y).
*/ */
_ol_geom_flat_contains_.linearRingContainsXY = function(flatCoordinates, offset, end, stride, x, y) { export function linearRingContainsXY(flatCoordinates, offset, end, stride, x, y) {
// http://geomalgorithms.com/a03-_inclusion.html // http://geomalgorithms.com/a03-_inclusion.html
// Copyright 2000 softSurfer, 2012 Dan Sunday // Copyright 2000 softSurfer, 2012 Dan Sunday
// This code may be freely used and modified for any purpose // This code may be freely used and modified for any purpose
@@ -61,7 +59,7 @@ _ol_geom_flat_contains_.linearRingContainsXY = function(flatCoordinates, offset,
y1 = y2; y1 = y2;
} }
return wn !== 0; return wn !== 0;
}; }
/** /**
@@ -73,22 +71,20 @@ _ol_geom_flat_contains_.linearRingContainsXY = function(flatCoordinates, offset,
* @param {number} y Y. * @param {number} y Y.
* @return {boolean} Contains (x, y). * @return {boolean} Contains (x, y).
*/ */
_ol_geom_flat_contains_.linearRingsContainsXY = function(flatCoordinates, offset, ends, stride, x, y) { export function linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y) {
if (ends.length === 0) { if (ends.length === 0) {
return false; return false;
} }
if (!_ol_geom_flat_contains_.linearRingContainsXY( if (!linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) {
flatCoordinates, offset, ends[0], stride, x, y)) {
return false; return false;
} }
for (let i = 1, ii = ends.length; i < ii; ++i) { for (let i = 1, ii = ends.length; i < ii; ++i) {
if (_ol_geom_flat_contains_.linearRingContainsXY( if (linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)) {
flatCoordinates, ends[i - 1], ends[i], stride, x, y)) {
return false; return false;
} }
} }
return true; return true;
}; }
/** /**
@@ -100,18 +96,16 @@ _ol_geom_flat_contains_.linearRingsContainsXY = function(flatCoordinates, offset
* @param {number} y Y. * @param {number} y Y.
* @return {boolean} Contains (x, y). * @return {boolean} Contains (x, y).
*/ */
_ol_geom_flat_contains_.linearRingssContainsXY = function(flatCoordinates, offset, endss, stride, x, y) { export function linearRingssContainsXY(flatCoordinates, offset, endss, stride, x, y) {
if (endss.length === 0) { if (endss.length === 0) {
return false; return false;
} }
for (let i = 0, ii = endss.length; i < ii; ++i) { for (let i = 0, ii = endss.length; i < ii; ++i) {
const ends = endss[i]; const ends = endss[i];
if (_ol_geom_flat_contains_.linearRingsContainsXY( if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {
flatCoordinates, offset, ends, stride, x, y)) {
return true; return true;
} }
offset = ends[ends.length - 1]; offset = ends[ends.length - 1];
} }
return false; return false;
}; }
export default _ol_geom_flat_contains_;

View File

@@ -2,7 +2,7 @@
* @module ol/geom/flat/interiorpoint * @module ol/geom/flat/interiorpoint
*/ */
import {numberSafeCompareFunction} from '../../array.js'; import {numberSafeCompareFunction} from '../../array.js';
import _ol_geom_flat_contains_ from '../flat/contains.js'; import {linearRingsContainsXY} from '../flat/contains.js';
const _ol_geom_flat_interiorpoint_ = {}; const _ol_geom_flat_interiorpoint_ = {};
@@ -52,8 +52,7 @@ _ol_geom_flat_interiorpoint_.linearRings = function(flatCoordinates, offset,
const segmentLength = Math.abs(x2 - x1); const segmentLength = Math.abs(x2 - x1);
if (segmentLength > maxSegmentLength) { if (segmentLength > maxSegmentLength) {
x = (x1 + x2) / 2; x = (x1 + x2) / 2;
if (_ol_geom_flat_contains_.linearRingsContainsXY( if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {
flatCoordinates, offset, ends, stride, x, y)) {
pointX = x; pointX = x;
maxSegmentLength = segmentLength; maxSegmentLength = segmentLength;
} }

View File

@@ -2,7 +2,7 @@
* @module ol/geom/flat/intersectsextent * @module ol/geom/flat/intersectsextent
*/ */
import {containsExtent, createEmpty, extendFlatCoordinates, intersects, intersectsSegment} from '../../extent.js'; import {containsExtent, createEmpty, extendFlatCoordinates, intersects, intersectsSegment} from '../../extent.js';
import _ol_geom_flat_contains_ from '../flat/contains.js'; import {linearRingContainsXY, linearRingContainsExtent} from '../flat/contains.js';
import _ol_geom_flat_segments_ from '../flat/segments.js'; import _ol_geom_flat_segments_ from '../flat/segments.js';
const _ol_geom_flat_intersectsextent_ = {}; const _ol_geom_flat_intersectsextent_ = {};
@@ -78,20 +78,16 @@ _ol_geom_flat_intersectsextent_.linearRing = function(flatCoordinates, offset, e
flatCoordinates, offset, end, stride, extent)) { flatCoordinates, offset, end, stride, extent)) {
return true; return true;
} }
if (_ol_geom_flat_contains_.linearRingContainsXY( if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[0], extent[1])) {
flatCoordinates, offset, end, stride, extent[0], extent[1])) {
return true; return true;
} }
if (_ol_geom_flat_contains_.linearRingContainsXY( if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[0], extent[3])) {
flatCoordinates, offset, end, stride, extent[0], extent[3])) {
return true; return true;
} }
if (_ol_geom_flat_contains_.linearRingContainsXY( if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[2], extent[1])) {
flatCoordinates, offset, end, stride, extent[2], extent[1])) {
return true; return true;
} }
if (_ol_geom_flat_contains_.linearRingContainsXY( if (linearRingContainsXY(flatCoordinates, offset, end, stride, extent[2], extent[3])) {
flatCoordinates, offset, end, stride, extent[2], extent[3])) {
return true; return true;
} }
return false; return false;
@@ -115,8 +111,7 @@ _ol_geom_flat_intersectsextent_.linearRings = function(flatCoordinates, offset,
return true; return true;
} }
for (let i = 1, ii = ends.length; i < ii; ++i) { for (let i = 1, ii = ends.length; i < ii; ++i) {
if (_ol_geom_flat_contains_.linearRingContainsExtent( if (linearRingContainsExtent(flatCoordinates, ends[i - 1], ends[i], stride, extent)) {
flatCoordinates, ends[i - 1], ends[i], stride, extent)) {
return false; return false;
} }
} }

View File

@@ -6,7 +6,7 @@ import {equals} from '../../array.js';
import {asArray} from '../../color.js'; import {asArray} from '../../color.js';
import {intersects} from '../../extent.js'; import {intersects} from '../../extent.js';
import {isEmpty} from '../../obj.js'; import {isEmpty} from '../../obj.js';
import _ol_geom_flat_contains_ from '../../geom/flat/contains.js'; import {linearRingContainsXY} from '../../geom/flat/contains.js';
import _ol_geom_flat_orient_ from '../../geom/flat/orient.js'; import _ol_geom_flat_orient_ from '../../geom/flat/orient.js';
import _ol_geom_flat_transform_ from '../../geom/flat/transform.js'; import _ol_geom_flat_transform_ from '../../geom/flat/transform.js';
import _ol_render_webgl_polygonreplay_defaultshader_ from '../webgl/polygonreplay/defaultshader.js'; import _ol_render_webgl_polygonreplay_defaultshader_ from '../webgl/polygonreplay/defaultshader.js';
@@ -663,8 +663,7 @@ WebGLPolygonReplay.prototype.getPointsInTriangle_ = function(p0, p1, p2, rtree,
if (typeof p === 'object' && (!opt_reflex || p.reflex)) { if (typeof p === 'object' && (!opt_reflex || p.reflex)) {
if ((p.x !== p0.x || p.y !== p0.y) && (p.x !== p1.x || p.y !== p1.y) && if ((p.x !== p0.x || p.y !== p0.y) && (p.x !== p1.x || p.y !== p1.y) &&
(p.x !== p2.x || p.y !== p2.y) && result.indexOf(p) === -1 && (p.x !== p2.x || p.y !== p2.y) && result.indexOf(p) === -1 &&
_ol_geom_flat_contains_.linearRingContainsXY([p0.x, p0.y, p1.x, p1.y, linearRingContainsXY([p0.x, p0.y, p1.x, p1.y, p2.x, p2.y], 0, 6, 2, p.x, p.y)) {
p2.x, p2.y], 0, 6, 2, p.x, p.y)) {
result.push(p); result.push(p);
} }
} }

View File

@@ -1,4 +1,4 @@
import _ol_geom_flat_contains_ from '../../../../../src/ol/geom/flat/contains.js'; import {linearRingContainsXY} from '../../../../../src/ol/geom/flat/contains.js';
describe('ol.geom.flat.contains', function() { describe('ol.geom.flat.contains', function() {
@@ -11,27 +11,27 @@ describe('ol.geom.flat.contains', function() {
describe('ol.geom.flat.contains.linearRingContainsXY', function() { describe('ol.geom.flat.contains.linearRingContainsXY', function() {
it('returns true for point inside a simple polygon', function() { it('returns true for point inside a simple polygon', function() {
expect(_ol_geom_flat_contains_.linearRingContainsXY( expect(linearRingContainsXY(
flatCoordinatesSimple, 0, flatCoordinatesSimple.length, 2, 0.5, 0.5)).to.be(true); flatCoordinatesSimple, 0, flatCoordinatesSimple.length, 2, 0.5, 0.5)).to.be(true);
}); });
it('returns false for point outside a simple polygon', function() { it('returns false for point outside a simple polygon', function() {
expect(_ol_geom_flat_contains_.linearRingContainsXY( expect(linearRingContainsXY(
flatCoordinatesSimple, 0, flatCoordinatesSimple.length, 2, 1.5, 1.5)).to.be(false); flatCoordinatesSimple, 0, flatCoordinatesSimple.length, 2, 1.5, 1.5)).to.be(false);
}); });
it('returns true for point inside a non-simple polygon', function() { it('returns true for point inside a non-simple polygon', function() {
expect(_ol_geom_flat_contains_.linearRingContainsXY( expect(linearRingContainsXY(
flatCoordinatesNonSimple, 0, flatCoordinatesNonSimple.length, 2, 1, 1)).to.be(true); flatCoordinatesNonSimple, 0, flatCoordinatesNonSimple.length, 2, 1, 1)).to.be(true);
}); });
it('returns true for point inside an overlap of a non-simple polygon', function() { it('returns true for point inside an overlap of a non-simple polygon', function() {
expect(_ol_geom_flat_contains_.linearRingContainsXY( expect(linearRingContainsXY(
flatCoordinatesNonSimple, 0, flatCoordinatesNonSimple.length, 2, 1.5, 2.5)).to.be(true); flatCoordinatesNonSimple, 0, flatCoordinatesNonSimple.length, 2, 1.5, 2.5)).to.be(true);
}); });
it('returns false for a point inside a hole of a non-simple polygon', function() { it('returns false for a point inside a hole of a non-simple polygon', function() {
expect(_ol_geom_flat_contains_.linearRingContainsXY( expect(linearRingContainsXY(
flatCoordinatesNonSimple, 0, flatCoordinatesNonSimple.length, 2, 2.5, 1.5)).to.be(false); flatCoordinatesNonSimple, 0, flatCoordinatesNonSimple.length, 2, 2.5, 1.5)).to.be(false);
}); });