"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const symbol_1 = require("../helper/symbol"); const point_1 = require("./point"); const type_1 = require("../utils/type"); class LineString { constructor(points) { if (!type_1.isArray(points)) { throw new TypeError(`"points" must be of type Point[]. Received type ${typeof points}`); } if (points.length < 2) { throw new Error('"points" must contain 2 points at least'); } points.forEach(point => { if (!(point instanceof point_1.Point)) { throw new TypeError(`"points" must be of type Point[]. Received type ${typeof point}[]`); } }); this.points = points; } parse(key) { return { [key]: { type: 'LineString', coordinates: this.points.map(point => point.toJSON().coordinates) } }; } toJSON() { return { type: 'LineString', coordinates: this.points.map(point => point.toJSON().coordinates) }; } static validate(lineString) { if (lineString.type !== 'LineString' || !type_1.isArray(lineString.coordinates)) { return false; } for (let point of lineString.coordinates) { if (!type_1.isNumber(point[0]) || !type_1.isNumber(point[1])) { return false; } } return true; } static isClosed(lineString) { const firstPoint = lineString.points[0]; const lastPoint = lineString.points[lineString.points.length - 1]; if (firstPoint.latitude === lastPoint.latitude && firstPoint.longitude === lastPoint.longitude) { return true; } } get _internalType() { return symbol_1.SYMBOL_GEO_LINE_STRING; } } exports.LineString = LineString;