@ngageoint/geopackage
Version:
GeoPackage JavaScript Library
127 lines • 5.56 kB
JavaScript
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.RTreeIndexDao = void 0;
var dao_1 = require("../../dao/dao");
var rtreeIndex_1 = require("./rtreeIndex");
var sqliteQueryBuilder_1 = require("../../db/sqliteQueryBuilder");
/**
* RTree module.
*/
/**
* RTree Index Data Access Object
* @class
* @extends Dao
*/
var RTreeIndexDao = /** @class */ (function (_super) {
__extends(RTreeIndexDao, _super);
function RTreeIndexDao(geoPackage, featureDao) {
var _this = _super.call(this, geoPackage) || this;
_this.gpkgTableName = RTreeIndexDao.TABLE_NAME;
_this.featureDao = featureDao;
return _this;
}
RTreeIndexDao.prototype.createObject = function (results) {
var rti = new rtreeIndex_1.RTreeIndex(this.geoPackage, this.featureDao);
if (results) {
}
return rti;
};
/**
* Generate query components
* @param envelope
* @returns {{whereArgs: Array, where: string, join: string, tableNameArr: string[]}}
* @private
*/
RTreeIndexDao.prototype._generateGeometryEnvelopeQuery = function (envelope) {
var tableName = this.featureDao.gpkgTableName;
var where = '';
var minXLessThanMaxX = envelope.minX < envelope.maxX;
if (minXLessThanMaxX) {
where += this.buildWhereWithFieldAndValue('minx', envelope.maxX, '<=');
where += ' and ';
where += this.buildWhereWithFieldAndValue('maxx', envelope.minX, '>=');
}
else {
where += '(';
where += this.buildWhereWithFieldAndValue('minx', envelope.maxX, '<=');
where += ' or ';
where += this.buildWhereWithFieldAndValue('maxx', envelope.minX, '>=');
where += ' or ';
where += this.buildWhereWithFieldAndValue('minx', envelope.minX, '>=');
where += ' or ';
where += this.buildWhereWithFieldAndValue('maxx', envelope.maxX, '<=');
where += ')';
}
where += ' and ';
where += this.buildWhereWithFieldAndValue('miny', envelope.maxY, '<=');
where += ' and ';
where += this.buildWhereWithFieldAndValue('maxy', envelope.minY, '>=');
var whereArgs = [];
whereArgs.push(envelope.maxX, envelope.minX);
if (!minXLessThanMaxX) {
whereArgs.push(envelope.minX, envelope.maxX);
}
whereArgs.push(envelope.maxY, envelope.minY);
return {
join: 'inner join "' +
tableName +
'" on "' +
tableName +
'".' +
this.featureDao.idColumns[0] +
' = "' +
this.gpkgTableName +
'".id',
where: where,
whereArgs: whereArgs,
tableNameArr: ['"' + tableName + '".*'],
};
};
/**
* Query witha geometry envelope
* @param {any} envelope envelope
* @return {IterableIterator<any>}
*/
RTreeIndexDao.prototype.queryWithGeometryEnvelope = function (envelope) {
var result = this._generateGeometryEnvelopeQuery(envelope);
return this.queryJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr);
};
RTreeIndexDao.prototype.countWithGeometryEnvelope = function (envelope) {
var result = this._generateGeometryEnvelopeQuery(envelope);
return this.connection.get(sqliteQueryBuilder_1.SqliteQueryBuilder.buildCount("'" + this.gpkgTableName + "'", result.where), result.whereArgs).count;
};
RTreeIndexDao.TABLE_NAME = 'rtree';
RTreeIndexDao.PREFIX = 'rtree_';
RTreeIndexDao.COLUMN_TABLE_NAME = RTreeIndexDao.TABLE_NAME + '.table_name';
RTreeIndexDao.COLUMN_GEOM_ID = RTreeIndexDao.TABLE_NAME + '.geom_id';
RTreeIndexDao.COLUMN_MIN_X = RTreeIndexDao.TABLE_NAME + '.minx';
RTreeIndexDao.COLUMN_MAX_X = RTreeIndexDao.TABLE_NAME + '.maxx';
RTreeIndexDao.COLUMN_MIN_Y = RTreeIndexDao.TABLE_NAME + '.miny';
RTreeIndexDao.COLUMN_MAX_Y = RTreeIndexDao.TABLE_NAME + '.maxy';
RTreeIndexDao.COLUMN_MIN_Z = RTreeIndexDao.TABLE_NAME + '.minz';
RTreeIndexDao.COLUMN_MAX_Z = RTreeIndexDao.TABLE_NAME + '.maxz';
RTreeIndexDao.COLUMN_MIN_M = RTreeIndexDao.TABLE_NAME + '.minm';
RTreeIndexDao.COLUMN_MAX_M = RTreeIndexDao.TABLE_NAME + '.maxm';
RTreeIndexDao.EXTENSION_NAME = 'gpkg_rtree_index';
RTreeIndexDao.EXTENSION_RTREE_INDEX_AUTHOR = 'gpkg';
RTreeIndexDao.EXTENSION_RTREE_INDEX_NAME_NO_AUTHOR = 'rtree_index';
RTreeIndexDao.EXTENSION_RTREE_INDEX_DEFINITION = 'http://www.geopackage.org/spec/#extension_rtree';
return RTreeIndexDao;
}(dao_1.Dao));
exports.RTreeIndexDao = RTreeIndexDao;
//# sourceMappingURL=rtreeIndexDao.js.map