Socket
Socket
Sign inDemoInstall

turf-inside

Package Overview
Dependencies
Maintainers
1
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

turf-inside - npm Package Compare versions

Comparing version 0.1.4 to 1.0.0

bin/inside.js

44

index.js

@@ -5,18 +5,42 @@ // http://en.wikipedia.org/wiki/Even%E2%80%93odd_rule

module.exports = function(point, polygon){
var x = point.geometry.coordinates[0]
var y = point.geometry.coordinates[1]
var vs = polygon.geometry.coordinates[0]
module.exports = function(point, polygon) {
var polys = polygon.geometry.coordinates;
var pt = [point.geometry.coordinates[0], point.geometry.coordinates[1]];
// normalize to multipolygon
if(polygon.geometry.type === 'Polygon') polys = [polys];
var insidePoly = false;
var i = 0;
while (i < polys.length && !insidePoly) {
// check if it is in the outer ring first
if(inRing(pt, polys[i][0])) {
var inHole = false;
var k = 1;
// check for the point in any of the holes
while(k < polys[i].length && !inHole) {
if(inRing(pt, polys[i][k])) {
inHole = true;
}
k++
}
if(!inHole) insidePoly = true;
}
i++;
}
return insidePoly;
}
// pt is [x,y] and ring is [[x,y], [x,y],..]
function inRing (pt, ring) {
var isInside = false;
for (var i = 0, j = vs.length - 1; i < vs.length; j = i++) {
var xi = vs[i][0], yi = vs[i][1];
var xj = vs[j][0], yj = vs[j][1];
for (var i = 0, j = ring.length - 1; i < ring.length; j = i++) {
var xi = ring[i][0], yi = ring[i][1];
var xj = ring[j][0], yj = ring[j][1];
var intersect = ((yi > y) != (yj > y))
&& (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
var intersect = ((yi > pt[1]) != (yj > pt[1]))
&& (pt[0] < (xj - xi) * (pt[1] - yi) / (yj - yi) + xi);
if (intersect) isInside = !isInside;
}
return isInside
return isInside;
}
{
"name": "turf-inside",
"version": "0.1.4",
"version": "1.0.0",
"description": "turf inside module",

@@ -31,3 +31,9 @@ "main": "index.js",

"turf-polygon"
]
],
"bin": {
"turf-point": "bin/point.js"
},
"dependencies": {
"minimist": "^0.2.0"
}
}

@@ -5,3 +5,3 @@ turf-inside

Checks to see if a point is inside of a polygon. The polygon can be convex or concave.
Checks to see if a point is inside of a polygon. The polygon can be convex or concave. The function accepts any valid polygon or multipolygon and accounts for holes.

@@ -18,3 +18,3 @@ ###Install

|---|---|
|point|A FeatureCollection of Point Features|
|point|A Point Feature|
|polygon|Determines if the point is inside the polygon or not|

@@ -41,2 +41,9 @@

console.log(isInside) // true
```
```
###CLI
```bash
npm install turf-inside -g
turf-inside point.geojson polygon.geojson
```
var test = require('tape');
var inside = require('./')
var point = require('turf-point')
var polygon = require('turf-polygon')
var inside = require('./');
var point = require('turf-point');
var polygon = require('turf-polygon');
var fs = require('fs');
test('featureCollection', function(t){
t.plan(4)
test('featureCollection', function (t) {
// test for a simple polygon
var poly = polygon([[[0,0], [0,100], [100,100], [100,0]]])
var ptIn = point(50, 50)
var ptOut = point(140, 150)
var poly = polygon([[[0,0], [0,100], [100,100], [100,0]]]);
var ptIn = point(50, 50);
var ptOut = point(140, 150);
t.true(inside(ptIn, poly), 'point inside simple polygon')
t.false(inside(ptOut, poly), 'point outside simple polygon')
t.true(inside(ptIn, poly), 'point inside simple polygon');
t.false(inside(ptOut, poly), 'point outside simple polygon');
// test for a concave polygon
var concavePoly = polygon([[[0,0], [50, 50], [0,100], [100,100], [100,0]]])
var ptConcaveIn = point(75, 75)
var ptConcaveOut = point(25, 50)
var concavePoly = polygon([[[0,0], [50, 50], [0,100], [100,100], [100,0]]]);
var ptConcaveIn = point(75, 75);
var ptConcaveOut = point(25, 50);
t.true(inside(ptConcaveIn, concavePoly), 'point inside concave polygon')
t.false(inside(ptConcaveOut, concavePoly), 'point outside concave polygon')
});
t.true(inside(ptConcaveIn, concavePoly), 'point inside concave polygon');
t.false(inside(ptConcaveOut, concavePoly), 'point outside concave polygon');
t.end();
});
test('poly with hole', function (t) {
var ptInHole = point(-86.69208526611328, 36.20373274711739);
var ptInPoly = point(-86.72229766845702, 36.20258997094334);
var ptOutsidePoly = point(-86.75079345703125, 36.18527313913089);
var polyHole = JSON.parse(fs.readFileSync('./fixtures/poly-with-hole.geojson'));
t.false(inside(ptInHole, polyHole));
t.true(inside(ptInPoly, polyHole));
t.false(inside(ptOutsidePoly, polyHole))
t.end();
});
test('multipolygon with hole', function (t) {
var ptInHole = point(-86.69208526611328, 36.20373274711739);
var ptInPoly = point(-86.72229766845702, 36.20258997094334);
var ptInPoly2 = point(-86.75079345703125, 36.18527313913089);
var ptOutsidePoly = point(-86.75302505493164, 36.23015046460186);
var multiPolyHole = JSON.parse(fs.readFileSync('./fixtures/multipoly-with-hole.geojson'));
t.false(inside(ptInHole, multiPolyHole));
t.true(inside(ptInPoly, multiPolyHole));
t.true(inside(ptInPoly2, multiPolyHole));
t.true(inside(ptInPoly, multiPolyHole));
t.false(inside(ptOutsidePoly, multiPolyHole))
t.end();
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc