77 lines
2.8 KiB
JavaScript
Executable File
77 lines
2.8 KiB
JavaScript
Executable File
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var clean_coords_1 = __importDefault(require("@turf/clean-coords"));
|
|
var line_segment_1 = __importDefault(require("@turf/line-segment"));
|
|
var rhumb_bearing_1 = __importDefault(require("@turf/rhumb-bearing"));
|
|
var helpers_1 = require("@turf/helpers");
|
|
/**
|
|
* Boolean-Parallel returns True if each segment of `line1` is parallel to the correspondent segment of `line2`
|
|
*
|
|
* @name booleanParallel
|
|
* @param {Geometry|Feature<LineString>} line1 GeoJSON Feature or Geometry
|
|
* @param {Geometry|Feature<LineString>} line2 GeoJSON Feature or Geometry
|
|
* @returns {boolean} true/false if the lines are parallel
|
|
* @example
|
|
* var line1 = turf.lineString([[0, 0], [0, 1]]);
|
|
* var line2 = turf.lineString([[1, 0], [1, 1]]);
|
|
*
|
|
* turf.booleanParallel(line1, line2);
|
|
* //=true
|
|
*/
|
|
function booleanParallel(line1, line2) {
|
|
// validation
|
|
if (!line1)
|
|
throw new Error("line1 is required");
|
|
if (!line2)
|
|
throw new Error("line2 is required");
|
|
var type1 = getType(line1, "line1");
|
|
if (type1 !== "LineString")
|
|
throw new Error("line1 must be a LineString");
|
|
var type2 = getType(line2, "line2");
|
|
if (type2 !== "LineString")
|
|
throw new Error("line2 must be a LineString");
|
|
var segments1 = line_segment_1.default(clean_coords_1.default(line1)).features;
|
|
var segments2 = line_segment_1.default(clean_coords_1.default(line2)).features;
|
|
for (var i = 0; i < segments1.length; i++) {
|
|
var segment1 = segments1[i].geometry.coordinates;
|
|
if (!segments2[i])
|
|
break;
|
|
var segment2 = segments2[i].geometry.coordinates;
|
|
if (!isParallel(segment1, segment2))
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
/**
|
|
* Compares slopes and return result
|
|
*
|
|
* @private
|
|
* @param {Geometry|Feature<LineString>} segment1 Geometry or Feature
|
|
* @param {Geometry|Feature<LineString>} segment2 Geometry or Feature
|
|
* @returns {boolean} if slopes are equal
|
|
*/
|
|
function isParallel(segment1, segment2) {
|
|
var slope1 = helpers_1.bearingToAzimuth(rhumb_bearing_1.default(segment1[0], segment1[1]));
|
|
var slope2 = helpers_1.bearingToAzimuth(rhumb_bearing_1.default(segment2[0], segment2[1]));
|
|
return slope1 === slope2;
|
|
}
|
|
/**
|
|
* Returns Feature's type
|
|
*
|
|
* @private
|
|
* @param {Geometry|Feature<any>} geojson Geometry or Feature
|
|
* @param {string} name of the variable
|
|
* @returns {string} Feature's type
|
|
*/
|
|
function getType(geojson, name) {
|
|
if (geojson.geometry && geojson.geometry.type)
|
|
return geojson.geometry.type;
|
|
if (geojson.type)
|
|
return geojson.type; // if GeoJSON geometry
|
|
throw new Error("Invalid GeoJSON object for " + name);
|
|
}
|
|
exports.default = booleanParallel;
|