ravendb
Version:
RavenDB client for Node.js
53 lines • 2.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SpatialCriteriaFactory = void 0;
const Constants_js_1 = require("../../../Constants.js");
const WktCriteria_js_1 = require("./WktCriteria.js");
const CircleCriteria_js_1 = require("./CircleCriteria.js");
const TypeUtil_js_1 = require("../../../Utility/TypeUtil.js");
class SpatialCriteriaFactory {
static INSTANCE = new SpatialCriteriaFactory();
constructor() {
// empty
}
relatesToShape(shapeWkt, relation, units, distErrorPercent) {
if (TypeUtil_js_1.TypeUtil.isNullOrUndefined(distErrorPercent)) {
distErrorPercent = Constants_js_1.CONSTANTS.Documents.Indexing.Spatial.DEFAULT_DISTANCE_ERROR_PCT;
}
return new WktCriteria_js_1.WktCriteria(shapeWkt, relation, units, distErrorPercent);
}
static _normalizeArgs(distErrorPercentOrUnits, distErrorPercent) {
let units = null;
if (TypeUtil_js_1.TypeUtil.isString(distErrorPercentOrUnits)) {
units = distErrorPercentOrUnits;
}
else if (TypeUtil_js_1.TypeUtil.isNumber(distErrorPercentOrUnits)) {
distErrorPercent = distErrorPercentOrUnits;
units = null;
}
distErrorPercent = distErrorPercent ?? Constants_js_1.CONSTANTS.Documents.Indexing.Spatial.DEFAULT_DISTANCE_ERROR_PCT;
return { units, distErrorPercent };
}
intersects(shapeWkt, distErrorPercentOrUnits, distErrorPercent) {
const args = SpatialCriteriaFactory._normalizeArgs(distErrorPercentOrUnits, distErrorPercent);
return this.relatesToShape(shapeWkt, "Intersects", args.units, args.distErrorPercent);
}
contains(shapeWkt, distErrorPercentOrUnits, distErrorPercent) {
const args = SpatialCriteriaFactory._normalizeArgs(distErrorPercentOrUnits, distErrorPercent);
return this.relatesToShape(shapeWkt, "Contains", args.units, args.distErrorPercent);
}
disjoint(shapeWkt, distErrorPercentOrUnits, distErrorPercent) {
const args = SpatialCriteriaFactory._normalizeArgs(distErrorPercentOrUnits, distErrorPercent);
return this.relatesToShape(shapeWkt, "Disjoint", args.units, args.distErrorPercent);
}
within(shapeWkt, distErrorPercentOrUnits, distErrorPercent) {
const args = SpatialCriteriaFactory._normalizeArgs(distErrorPercentOrUnits, distErrorPercent);
return this.relatesToShape(shapeWkt, "Within", args.units, args.distErrorPercent);
}
withinRadius(radius, latitude, longitude, radiusUnits = null, distErrorPercent) {
distErrorPercent = distErrorPercent ?? Constants_js_1.CONSTANTS.Documents.Indexing.Spatial.DEFAULT_DISTANCE_ERROR_PCT;
return new CircleCriteria_js_1.CircleCriteria(radius, latitude, longitude, radiusUnits, "Within", distErrorPercent);
}
}
exports.SpatialCriteriaFactory = SpatialCriteriaFactory;
//# sourceMappingURL=SpatialCriteriaFactory.js.map