123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
- var _ParseGeoPoint = _interopRequireDefault(require("./ParseGeoPoint"));
- var ParsePolygon = function () {
- function ParsePolygon(coordinates) {
- (0, _classCallCheck2.default)(this, ParsePolygon);
- this._coordinates = ParsePolygon._validate(coordinates);
- }
- (0, _createClass2.default)(ParsePolygon, [{
- key: "coordinates",
- get: function () {
- return this._coordinates;
- },
- set: function (coords) {
- this._coordinates = ParsePolygon._validate(coords);
- }
- }, {
- key: "toJSON",
- value: function () {
- ParsePolygon._validate(this._coordinates);
- return {
- __type: 'Polygon',
- coordinates: this._coordinates
- };
- }
- }, {
- key: "equals",
- value: function (other) {
- if (!(other instanceof ParsePolygon) || this.coordinates.length !== other.coordinates.length) {
- return false;
- }
- var isEqual = true;
- for (var i = 1; i < this._coordinates.length; i += 1) {
- if (this._coordinates[i][0] != other.coordinates[i][0] || this._coordinates[i][1] != other.coordinates[i][1]) {
- isEqual = false;
- break;
- }
- }
- return isEqual;
- }
- }, {
- key: "containsPoint",
- value: function (point) {
- var minX = this._coordinates[0][0];
- var maxX = this._coordinates[0][0];
- var minY = this._coordinates[0][1];
- var maxY = this._coordinates[0][1];
- for (var i = 1; i < this._coordinates.length; i += 1) {
- var p = this._coordinates[i];
- minX = Math.min(p[0], minX);
- maxX = Math.max(p[0], maxX);
- minY = Math.min(p[1], minY);
- maxY = Math.max(p[1], maxY);
- }
- var outside = point.latitude < minX || point.latitude > maxX || point.longitude < minY || point.longitude > maxY;
- if (outside) {
- return false;
- }
- var inside = false;
- for (var _i = 0, j = this._coordinates.length - 1; _i < this._coordinates.length; j = _i++) {
- var startX = this._coordinates[_i][0];
- var startY = this._coordinates[_i][1];
- var endX = this._coordinates[j][0];
- var endY = this._coordinates[j][1];
- var intersect = startY > point.longitude != endY > point.longitude && point.latitude < (endX - startX) * (point.longitude - startY) / (endY - startY) + startX;
- if (intersect) {
- inside = !inside;
- }
- }
- return inside;
- }
- }], [{
- key: "_validate",
- value: function (coords) {
- if (!Array.isArray(coords)) {
- throw new TypeError('Coordinates must be an Array');
- }
- if (coords.length < 3) {
- throw new TypeError('Polygon must have at least 3 GeoPoints or Points');
- }
- var points = [];
- for (var i = 0; i < coords.length; i += 1) {
- var coord = coords[i];
- var geoPoint = void 0;
- if (coord instanceof _ParseGeoPoint.default) {
- geoPoint = coord;
- } else if (Array.isArray(coord) && coord.length === 2) {
- geoPoint = new _ParseGeoPoint.default(coord[0], coord[1]);
- } else {
- throw new TypeError('Coordinates must be an Array of GeoPoints or Points');
- }
- points.push([geoPoint.latitude, geoPoint.longitude]);
- }
- return points;
- }
- }]);
- return ParsePolygon;
- }();
- var _default = ParsePolygon;
- exports.default = _default;
|