summaryrefslogtreecommitdiff
path: root/src/contains.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/contains.js')
-rw-r--r--src/contains.js23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/contains.js b/src/contains.js
index 952a62d..3b8e0c8 100644
--- a/src/contains.js
+++ b/src/contains.js
@@ -1,6 +1,6 @@
import {default as polygonContains} from "./polygonContains";
import {default as distance} from "./distance";
-import {epsilon, radians} from "./math";
+import {epsilon2, radians} from "./math";
var containsObjectType = {
Feature: function(object, point) {
@@ -59,10 +59,23 @@ function containsPoint(coordinates, point) {
}
function containsLine(coordinates, point) {
- var ab = distance(coordinates[0], coordinates[1]),
- ao = distance(coordinates[0], point),
- ob = distance(point, coordinates[1]);
- return ao + ob <= ab + epsilon;
+ var ao, bo, ab;
+ for (var i = 0, n = coordinates.length; i < n; i++) {
+ bo = distance(coordinates[i], point);
+ if (bo === 0) return true;
+ if (i > 0) {
+ ab = distance(coordinates[i], coordinates[i - 1]);
+ if (
+ ab > 0 &&
+ ao <= ab &&
+ bo <= ab &&
+ (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2 * ab
+ )
+ return true;
+ }
+ ao = bo;
+ }
+ return false;
}
function containsPolygon(coordinates, point) {