directus
1import type { Field, RawField } from '@directus/types';
2import type { Knex } from 'knex';
3import type { GeoJSONGeometry } from 'wellknown';
4import { GeometryHelper } from '../types.js';
5
6export class GeometryHelperPostgres extends GeometryHelper {
7override async supported() {
8const res = await this.knex.select('oid').from('pg_proc').where({ proname: 'postgis_version' });
9return res.length > 0;
10}
11
12override createColumn(table: Knex.CreateTableBuilder, field: RawField | Field) {
13const type = field.type.split('.')[1] ?? 'geometry';
14return table.specificType(field.field, `geometry(${type}, 4326)`);
15}
16
17override _intersects_bbox(key: string, geojson: GeoJSONGeometry): Knex.Raw {
18const geometry = this.fromGeoJSON(geojson);
19return this.knex.raw('?? && ?', [key, geometry]);
20}
21
22asGeoJSON(table: string, column: string): Knex.Raw {
23return this.knex.raw('st_asgeojson(??.??) as ??', [table, column, column]);
24}
25}
26