
Product
Announcing Socket Fix 2.0
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.
moleculer-postgis
Advanced tools
@moleculer/database
projectThe moleculer-postgis
is designed to support Postgis functions for @moleculer/database
mixin.
To get started, install moleculer-postgis
package to your project.
npm i moleculer-postgis
yarn add moleculer-postgis
import PostgisMixin, { GeometryType } from 'moleculer-postgis';
module.exports = {
mixins: [
PostgisMixin({
srid: 3346,
}),
],
settings: {
fields: {
// example with geom and validating types
geom: {
type: 'any',
geom: {
types: [GeometryType.POINT, GeometryType.LINE_STRING],
},
},
area: {
type: 'number',
virtual: true,
geom: {
type: 'area',
},
},
},
},
};
Using mixin is simple. Import and define it as a function. To the function you can pass opts
such as global srid
.
import PostgisMixin from 'moleculer-postgis';
module.exports = {
mixins: [
PostgisMixin({
srid: 3346, // default 3346
geojson: { // optional - Documentation: https://postgis.net/docs/ST_AsGeoJSON.html
maxDecimalDigits: 0 // default
options: 0 // default
}
}),
],
};
module.exports = {
settings: {
fields: {
geom: {
columnName: 'geomfield', // optional
geom: {
type: 'geom', // define type - defaults to "geom"
types: [], // defining types,
multi: true, // defines handling multi geometries
validate({ ctx, params, value, field }) {
// validation function (same as @moleculer/database)
return true;
},
},
},
},
defaultPopulates: ['geom'],
},
};
module.exports = {
settings: {
fields: {
geom: {
geom: true,
},
},
},
};
Options:
Option | Default value | Type (available values) |
---|---|---|
type | geom | String - area , geom |
multi | false | Boolean |
types | All types | Array<string> or string |
validate | - | Function or string |
Types - Point
, LineString
, Polygon
, MultiLineString
, MultiPoint
, MultiPolygon
Query | |
---|---|
areaQuery | More info |
distanceQuery | More info |
asGeoJsonQuery | More info |
geometriesAsTextQuery | More info |
geomFromText | More info |
intersectsQuery | More info |
import { areaQuery } from 'moleculer-postgis';
const field = 'geomfield';
const fieldAs = 'geom';
// optional
const srid = 3346;
// ROUND(ST_Area("geomfield")) as "geom"
// If srid is passed, ST_Transform is applied
areaQuery(geom, fieldAs, srid);
import { distanceQuery } from 'moleculer-postgis';
const field1 = 'geomfield';
const field2 = 'geomfield2';
const resultAs = 'distance';
// optional
const srid = 3346;
// ROUND(ST_Distance("geomfield", "geomfield2")) as "distance"
// If srid is passed, ST_Transform is applied for each field
distanceQuery(field1, field2, resultAs, srid);
import { asGeoJsonQuery } from 'moleculer-postgis';
const field = 'geomfield';
const resultAs = 'geom';
// optional
const srid = 3346;
const opts = {
digits: 0,
options: 0,
};
// ST_AsGeoJSON("geomfield")::json as "geom"
// If srid is passed, ST_Transform is applied for each field. Options are not applied if not passed
asGeoJsonQuery(field, resultAs, srid, opts);
import { geometriesAsTextQuery } from 'moleculer-postgis';
const geometry = {
type: 'Point',
coordinates: [11, 22],
};
// ST_AsText(...)
// If passed multi geometries - it will use ST_Collect
geometriesAsTextQuery(geometry);
// Using crs with transofrms
const geometry = {
type: 'Point',
coordinates: [11, 22],
crs: { type: 'name', properties: { name: 'EPSG:4326' } },
};
const srid = 3346;
geometriesAsTextQuery(geometry, srid);
import { geomFromText, geometriesAsTextQuery } from 'moleculer-postgis';
const geometry = {
type: 'Point',
coordinates: [11, 22],
};
const srid = 3346;
// ST_AsText(...)
const text = geometriesAsTextQuery(geometry);
// ST_GeomFromText(...)
// If srid is passed - ST_Transform is applied
geomFromText(text, srid);
import { intersectsQuery } from 'moleculer-postgis';
// any type of geometry can be passed (feature collection, feature, array of feature collections, etc)
const geometry = {
type: 'Point',
coordinates: [11, 22],
};
const field = 'geomfield';
const srid = 3346;
// ST_intersects(...)
// If srid is passed - ST_Transform is applied
intersectsQuery(field, geometry, srid);
Contributions are welcome! If you find any issues or have suggestions for improvements, please open an issue or submit a pull request. For more information, see the contribution guidelines.
This project is licensed under the MIT License.
FAQs
Postgis mixin and functions for @moleculer/database
We found that moleculer-postgis demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.
Security News
Socket CEO Feross Aboukhadijeh joins Risky Business Weekly to unpack recent npm phishing attacks, their limited impact, and the risks if attackers get smarter.
Product
Socket’s new Tier 1 Reachability filters out up to 80% of irrelevant CVEs, so security teams can focus on the vulnerabilities that matter.