PostGIS étend les capacités de Hologres en ajoutant des types de données, des fonctions et des opérateurs dédiés aux données spatiales. Utilisez cette extension pour stocker, interroger et analyser des données géographiques : filtres par zone englobante, recherches de proximité, vérifications d'intersection de polygones ou calculs de distance.
Hologres prend en charge la version 3.0.0 de PostGIS. À partir de la version V1.3 de Hologres, la plupart des fonctions PostGIS s'exécutent sur le moteur de requête Hologres (HQE), développé par Alibaba Cloud, qui offre de meilleures performances. Sur les versions antérieures, l'exécution repose sur le moteur de requête PostgreSQL (PQE).
Limites
Les champs de type
geometryougeographyne peuvent pas servir de clés primaires. Privilégiez une clé de substitution de type entier.Les index spatiaux ne sont pas pris en charge. Pour les jeux de données volumineux, appliquez des préfiltres basés sur la zone englobante (par exemple
ST_MakeBox2Dcombiné àST_Covers) avant d'utiliser des prédicats spatiaux plus coûteux, afin de réduire la portée de l'analyse.Sur les instances Hologres antérieures à la version V1.3, toutes les fonctions PostGIS s'exécutent via PQE. Les performances peuvent être inférieures à celles offertes par HQE.
Installer l'extension PostGIS
Exécutez l'instruction suivante en tant que superutilisateur pour installer PostGIS dans une base de données. L'installation s'effectue au niveau de chaque base de données : répétez cette opération pour chacune des bases nécessitant la prise en charge des données spatiales.
CREATE EXTENSION IF NOT EXISTS postgis;
Il est impossible d'installer PostGIS dans le schéma pg_catalog.
Pour vérifier l'installation, exécutez la commande suivante :
SELECT postgis_full_version();
En cas de succès, le système renvoie une chaîne de version telle que POSTGIS="3.0.0 ...".
Pour supprimer l'extension :
DROP EXTENSION postgis;
N'utilisez pas DROP EXTENSION postgis CASCADE. L'option CASCADE supprime tous les objets dépendants, y compris les données PostGIS, les données bitmap dynamiques (roaring bitmap), les données Proxima, les journaux binaires, les données BSI ainsi que les métadonnées associées (tables, vues, données serveur). Cette action est irréversible.
Créer et interroger une table geometry
Dans Hologres, PostGIS prend en charge deux types de données spatiales : geometry (coordonnées planes/cartésiennes) et geography (coordonnées sphériques longitude/latitude). Pour plus de détails sur le type geography, consultez la documentation PostGIS sur geography.
Le type geometry est le plus couramment utilisé. Les étapes suivantes expliquent comment créer une table geometry et exécuter des requêtes spatiales.
1. Créer une table geometry
Lors de la création d'une table, vous pouvez spécifier un sous-type geometry. Sous-types pris en charge : Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon.
Sans sous-type :
CREATE TABLE holo_gis_1 (
id INT,
geom geometry,
PRIMARY KEY (id)
);
Avec un sous-type et un identifiant de système de référence spatiale (SRID) :
CREATE TABLE holo_gis_2 (
id INT,
geom geometry(point, 4326),
PRIMARY KEY (id)
);
Dans cet exemple, le sous-type est Point et le SRID est 4326 (WGS 84). Si aucun SRID n'est indiqué, la valeur par défaut est 0. Pour en savoir plus sur les SRID, reportez-vous à la documentation PostGIS.
2. Insérer des données spatiales
-- Without SRID
INSERT INTO holo_gis_1 VALUES (1, ST_GeomFromText('point(116 39)'));
-- With SRID 4326
INSERT INTO holo_gis_2 VALUES (1, ST_GeomFromText('point(116 39)', 4326));
Pour plus d'informations sur les fonctions spatiales, consultez Fonctions spatiales.
3. Interroger des données spatiales
Après l'insertion des données, plusieurs types de requêtes sont possibles.
Requête par plage rectangulaire
Renvoie tous les points situés dans une zone englobante.
Sans SRID :
SELECT st_astext(geom)
FROM holo_gis_1
WHERE ST_Covers(
ST_MakeBox2D(ST_Point(116, 39), ST_Point(117, 40)),
geom
);
Avec SRID :
SELECT st_astext(geom)
FROM holo_gis_2
WHERE ST_Covers(
ST_SetSRID(ST_MakeBox2D(ST_Point(116, 39), ST_Point(117, 40)), 4326),
geom
);
Ces deux requêtes renvoient le résultat suivant :
st_astext
-------------
POINT(116 39)
Vérification d'intersection avec un polygone
Pour identifier les points situés à l'intérieur ou sur la limite d'un polygone, utilisez ST_Covers. La syntaxe est identique à celle de la requête par plage rectangulaire présentée ci-dessus : ST_MakeBox2D génère un polygone rectangulaire dont la limite est incluse dans le test de couverture.
Sans SRID :
SELECT st_astext(geom)
FROM holo_gis_1
WHERE ST_Covers(
ST_MakeBox2D(ST_Point(116, 39), ST_Point(117, 40)),
geom
);
Avec SRID :
SELECT st_astext(geom)
FROM holo_gis_2
WHERE ST_Covers(
ST_SetSRID(ST_MakeBox2D(ST_Point(116, 39), ST_Point(117, 40)), 4326),
geom
);
Ces deux requêtes renvoient le résultat suivant :
st_astext
-------------
POINT(116 39)
Fonctions spatiales
PostGIS fournit des fonctions permettant de convertir et d'analyser les valeurs geometry. La syntaxe de ces fonctions utilise les paramètres suivants :
geom : une valeur
geometryou une expression évaluée commegeometryprecision :
INTEGER; précision des coordonnées comprise entre 1 et 20 ; valeur par défaut15index :
INTEGER; indice basé sur 1, sauf indication contrairesrid :
INTEGER; identifiant du système de référence spatiale
La colonne Required engine indique le moteur de requête chargé d'exécuter chaque fonction :
| Engine | When it applies | Performance |
|---|---|---|
| HQE (Hologres Query Engine) | Hologres V1.3 et versions ultérieures | Plus élevée — optimisée pour les charges de travail analytiques |
| PQE (PostgreSQL Query Engine) | Toutes les versions ; requis pour certaines fonctions | Moins élevée — mode de compatibilité |
Pour la spécification complète des fonctions PostGIS, consultez la documentation de référence PostGIS.
Constructeurs de geometry
Toutes les fonctions de ce groupe nécessitent HQE dans Hologres V1.3.
| Function | Syntax | Returns | Description |
|---|---|---|---|
ST_LineFromMultiPoint |
ST_LineFromMultiPoint(geom) |
GEOMETRY |
Crée une ligne brisée (linestring) à partir d'une géométrie multipoint, en conservant l'ordre des points. La géométrie renvoyée conserve le même SRID que l'entrée. |
ST_MakeEnvelope |
ST_MakeEnvelope(xmin, ymin, xmax, ymax)ST_MakeEnvelope(xmin, ymin, xmax, ymax, srid) |
GEOMETRY (POINT, LINESTRING ou POLYGON) |
Crée une géométrie à partir des coordonnées des coins. Renvoie un point si les coordonnées se réduisent à un point unique, une ligne brisée si elles forment une ligne, ou un polygone dans les autres cas. Si un SRID est fourni, la géométrie résultante utilise ce SRID. |
ST_MakeLine |
ST_MakeLine(geom1, geom2) |
GEOMETRY (LINESTRING) |
Crée une ligne brisée à partir de deux géométries d'entrée. |
ST_MakePoint |
ST_MakePoint(x, y) |
GEOMETRY (POINT) |
Crée un point à partir de valeurs de coordonnées. |
ST_Point |
ST_Point(x, y) |
GEOMETRY (POINT) |
Crée un point à partir de valeurs de coordonnées. |
ST_Polygon |
ST_Polygon(linestring, srid) |
GEOMETRY (POLYGON) |
Crée un polygone dont l'anneau extérieur correspond à la ligne brisée d'entrée, avec le SRID indiqué. |
Accesseurs de geometry
Toutes les fonctions de ce groupe nécessitent HQE dans Hologres V1.3.
| Function | Syntax | Returns | Description |
|---|---|---|---|
GeometryType |
GeometryType(geom) |
VARCHAR |
Renvoie le nom du sous-type de la géométrie d'entrée sous forme de chaîne. |
ST_Boundary |
ST_Boundary(geom) |
GEOMETRY |
Renvoie la limite de la géométrie d'entrée. Une géométrie vide renvoie l'entrée telle quelle ; un point ou un multipoint non vide renvoie une collection de géométries vide ; une ligne brisée renvoie un multipoint constitué de ses points limites ; un polygone sans anneaux intérieurs renvoie une ligne brisée fermée ; un polygone avec anneaux intérieurs ou un multipolygone renvoie une multiligne constituée de tous les anneaux limites. |
ST_Dimension |
ST_Dimension(geom) |
INTEGER |
Renvoie la dimension intrinsèque du sous-type de géométrie. |
ST_Envelope |
ST_Envelope(geom) |
GEOMETRY |
Renvoie la zone englobante minimale de la géométrie d'entrée. Renvoie un point si la zone se réduit à un point, une ligne brisée à deux points si elle est unidimensionnelle, ou un polygone orienté dans le sens horaire dans les autres cas. La géométrie renvoyée conserve le même SRID que l'entrée. |
ST_ExteriorRing |
ST_ExteriorRing(geom) |
GEOMETRY (LINESTRING) |
Renvoie l'anneau extérieur d'un polygone sous forme de ligne brisée fermée. |
ST_GeometryN |
ST_GeometryN(geom, index) |
GEOMETRY |
Renvoie la géométrie située à l'indice donné (basé sur 1). Pour les géométries simples (point, ligne brisée, polygone) avec l'indice 1, renvoie la géométrie elle-même ; sinon, renvoie null. Pour les collections, renvoie l'élément correspondant à l'indice. |
ST_GeometryType |
ST_GeometryType(geom) |
VARCHAR |
Renvoie le nom du sous-type de la géométrie d'entrée sous forme de chaîne. |
ST_InteriorRingN |
ST_InteriorRingN(geom, index) |
GEOMETRY (LINESTRING) |
Renvoie l'anneau intérieur d'un polygone à la position d'indice donnée sous forme de ligne brisée fermée. |
ST_IsClosed |
ST_IsClosed(geom) |
BOOLEAN |
Renvoie true si la géométrie est fermée. Un point ou un multipoint est toujours fermé. Une ligne brisée est fermée lorsque ses points de départ et d'arrivée coïncident. Un polygone est fermé lorsque tous ses anneaux sont non vides et que leurs points de départ et d'arrivée coïncident. |
ST_IsCollection |
ST_IsCollection(geom) |
BOOLEAN |
Renvoie true si la géométrie est une GEOMETRYCOLLECTION, un MULTIPOINT, une MULTILINESTRING ou un MULTIPOLYGON. |
ST_IsEmpty |
ST_IsEmpty(geom) |
BOOLEAN |
Renvoie true si la géométrie ne contient aucun point. |
ST_IsPolygonCCW |
ST_IsPolygonCCW(geom) |
BOOLEAN |
Renvoie true si le polygone d'entrée est orienté dans le sens antihoraire. Renvoie également true pour les points, les lignes brisées, les multipoints et les multilignes, ainsi que pour les collections de géométries dont tous les éléments sont orientés dans le sens antihoraire. |
ST_IsSimple |
ST_IsSimple(geom) |
BOOLEAN |
Renvoie true si la géométrie ne présente aucune anomalie géométrique, telle qu'une auto-intersection. |
ST_NPoints |
ST_NPoints(geom) |
INTEGER |
Renvoie le nombre de points contenus dans la géométrie. |
ST_NRings |
ST_NRings(geom) |
INTEGER |
Renvoie le nombre d'anneaux de la géométrie. |
ST_NumGeometries |
ST_NumGeometries(geom) |
INTEGER |
Renvoie le nombre d'éléments d'une collection de géométries. |
ST_NumInteriorRings |
ST_NumInteriorRings(geom) |
INTEGER |
Renvoie le nombre d'anneaux intérieurs d'un polygone. |
ST_NumPoints |
ST_NumPoints(geom) |
INTEGER |
Renvoie le nombre de points contenus dans la géométrie. |
ST_PointN |
ST_PointN(geom, index) |
GEOMETRY (POINT) |
Renvoie le point situé à l'indice donné dans une ligne brisée. Les indices négatifs comptent à partir de la fin : -1 renvoie le dernier point. |
ST_Points |
ST_Points(geom) |
GEOMETRY (MULTIPOINT) |
Renvoie tous les points non vides de la géométrie sous forme de multipoint. Les points dupliqués, y compris les points de début et de fin des anneaux, sont conservés. |
ST_StartPoint |
ST_StartPoint(geom) |
GEOMETRY |
Renvoie le premier point d'une ligne brisée. La géométrie renvoyée conserve le même SRID que l'entrée. |
ST_X |
ST_X(point) |
DOUBLE |
Renvoie la coordonnée X d'un point. |
ST_Y |
ST_Y(point) |
DOUBLE |
Renvoie la coordonnée Y d'un point. |
Éditeurs de geometry
Toutes les fonctions de ce groupe nécessitent HQE dans Hologres V1.3.
| Function | Syntax | Returns | Description |
|---|---|---|---|
ST_AddPoint |
ST_AddPoint(geom1, geom2) |
GEOMETRY |
Renvoie une ligne brisée à laquelle un point a été ajouté. |
ST_Multi |
ST_Multi(geom) |
GEOMETRY (MULTIPOINT, MULTILINESTRING, MULTIPOLYGON ou GEOMETRYCOLLECTION) |
Convertit une géométrie vers son type multi correspondant. Si l'entrée est déjà un type multi ou une collection, renvoie une copie. |
ST_RemovePoint |
ST_RemovePoint(geom, index) |
GEOMETRY |
Renvoie une ligne brisée dont le point à l'indice donné (basé sur zéro) a été supprimé. La géométrie renvoyée conserve le même SRID que l'entrée. |
ST_Reverse |
ST_Reverse(geom) |
GEOMETRY |
Inverse l'ordre des sommets d'une géométrie linéaire ou surfacique. Pour un point ou un multipoint, renvoie une copie. Pour une collection, inverse les sommets de chaque élément. |
ST_SetPoint |
ST_SetPoint(geom1, index, geom2) |
GEOMETRY |
Renvoie une ligne brisée dont le point à l'indice donné est remplacé par les coordonnées du point d'entrée. |
Validation de geometry
| Function | Syntax | Returns | Required engine | Description |
|---|---|---|---|---|
ST_IsValid |
ST_IsValid(geom) |
BOOLEAN |
PQE | Renvoie true si la géométrie est valide selon la spécification OGC. |
Fonctions de système de référence spatiale
Toutes les fonctions de ce groupe nécessitent HQE dans Hologres V1.3.
| Function | Syntax | Returns | Description |
|---|---|---|---|
ST_SetSRID |
ST_SetSRID(geom, srid) |
GEOMETRY |
Renvoie la géométrie d'entrée avec son SRID mis à jour vers la valeur indiquée. Ne reprojettes pas les coordonnées. |
ST_SRID |
ST_SRID(geom) |
INTEGER |
Renvoie le SRID de la géométrie d'entrée. |
Entrée de geometry
| Function | Syntax | Returns | Required engine | Description |
|---|---|---|---|---|
ST_GeomFromText |
ST_GeomFromText(wkt_string)ST_GeomFromText(wkt_string, srid) |
GEOMETRY |
PQE | Construit une géométrie à partir de sa représentation textuelle connue (WKT). |
Sortie de geometry
Toutes les fonctions de ce groupe nécessitent HQE dans Hologres V1.3.
| Function | Syntax | Returns | Description |
|---|---|---|---|
ST_AsBinary |
ST_AsBinary(geom) |
BYTEA |
Renvoie la représentation binaire connue (WKB) de la géométrie, encodée sous forme de chaîne hexadécimale utilisant les caractères ASCII 0 à 9 et A à F. |
ST_AsEWKB |
ST_AsEWKB(geom) |
BYTEA |
Renvoie la représentation binaire connue étendue (EWKB) de la géométrie. |
ST_AsEWKT |
ST_AsEWKT(geom) |
VARCHAR |
Renvoie la représentation textuelle connue étendue (EWKT) de la géométrie. |
ST_AsGeoJSON |
ST_AsGeoJSON(geom)ST_AsGeoJSON(geom, precision) |
VARCHAR |
Renvoie la représentation GeoJSON de la géométrie. |
ST_AsText |
ST_AsText(geom)ST_AsText(geom, precision) |
VARCHAR |
Renvoie la représentation WKT de la géométrie. |
Prédicats de relation spatiale
La plupart des fonctions de ce groupe s'exécutent sur PQE. ST_DWithin_S2 s'exécute sur HQE (Hologres V2.0.8 et versions ultérieures).
| Function | Syntax | Returns | Required engine | Description |
|---|---|---|---|---|
ST_Contains |
ST_Contains(geom1, geom2) |
BOOLEAN |
PQE | Renvoie true si chaque point de geom2 se trouve dans geom1 et que leurs intérieurs s'intersectent. Équivalent à ST_Within(geom2, geom1). |
ST_ContainsProperly |
ST_ContainsProperly(geom1, geom2) |
BOOLEAN |
PQE | Renvoie true si les deux géométries sont non vides et que tous les points de geom2 se situent à l'intérieur (et non sur la limite) de geom1. |
ST_CoveredBy |
ST_CoveredBy(geom1, geom2) |
BOOLEAN |
PQE | Renvoie true si chaque point de geom1 se trouve dans geom2. Équivalent à ST_Covers(geom2, geom1). |
ST_Covers |
ST_Covers(geom1, geom2) |
BOOLEAN |
PQE | Renvoie true si chaque point de geom2 se trouve dans geom1. Équivalent à ST_CoveredBy(geom2, geom1). |
ST_Crosses |
ST_Crosses(geom1, geom2) |
BOOLEAN |
N/A | Renvoie true si les deux géométries s'intersectent. |
ST_Disjoint |
ST_Disjoint(geom1, geom2) |
BOOLEAN |
N/A | Renvoie true si les deux géométries ne partagent aucun point. |
ST_DWithin |
ST_DWithin(geom1, geom2, threshold) |
BOOLEAN |
PQE | Renvoie true si la distance euclidienne entre les deux géométries ne dépasse pas le seuil indiqué. |
ST_DWithin_S2 |
ST_DWithin_S2(x1, y1, x2, y2, threshold) |
BOOLEAN |
HQE (V2.0.8) | Renvoie true si la distance sphérique entre deux emplacements géographiques est inférieure ou égale au threshold (unité : mètres). Paramètres dans l'ordre : longitude de l'emplacement 1, latitude de l'emplacement 1, longitude de l'emplacement 2, latitude de l'emplacement 2, seuil de distance. Les valeurs d'entrée ne peuvent pas être des constantes. |
ST_Equals |
ST_Equals(geom1, geom2) |
BOOLEAN |
PQE | Renvoie true si les deux géométries possèdent des ensembles de points égaux et que leurs intérieurs s'intersectent. |
ST_Intersects |
ST_Intersects(geom1, geom2) |
BOOLEAN |
PQE | Renvoie true si les deux géométries partagent au moins un point. |
ST_Touches |
ST_Touches(geom1, geom2) |
BOOLEAN |
PQE | Renvoie true si les deux géométries se touchent, c'est-à-dire qu'elles s'intersectent mais ne partagent aucun point intérieur. |
ST_Within |
ST_Within(geom1, geom2) |
BOOLEAN |
PQE | Renvoie true si chaque point de geom1 se trouve dans geom2 et que leurs intérieurs s'intersectent. Équivalent à ST_Contains(geom2, geom1). |
Fonctions de mesure
| Function | Syntax | Returns | Required engine | Description |
|---|---|---|---|---|
ST_Angle |
ST_Angle(geom1, geom2, geom3)ST_Angle(geom1, geom2, geom3, geom4) |
DOUBLE |
PQE | Renvoie l'angle horaire en radians dans l'intervalle [0, 2π). Avec trois points, mesure la rotation de P1 vers P3 autour de P2. Avec quatre points, mesure l'angle entre les droites orientées P1–P2 et P3–P4 ; renvoie null si P1 est égal à P2 ou si P3 est égal à P4. |
ST_Area |
ST_Area(geom) |
DOUBLE |
HQE (V1.3) | Renvoie la surface cartésienne de la géométrie dans les mêmes unités que le système de coordonnées. Renvoie 0 pour les points, les lignes brisées et leurs types multi. Pour les collections, renvoie la somme des surfaces de tous les éléments. |
ST_Azimuth |
ST_Azimuth(point1, point2) |
DOUBLE |
HQE (V1.3) | Renvoie l'azimut cartésien basé sur le nord défini par deux points. |
ST_Distance |
ST_Distance(geom1, geom2) |
DOUBLE |
HQE (V1.3) | Renvoie l'angle central sphérique entre deux géométries. |
ST_Distance_Sphere_S2 |
ST_Distance_Sphere_S2(x1, y1, x2, y2) |
DOUBLE |
HQE (V2.0.8) | Renvoie la distance sphérique entre deux emplacements géographiques en mètres. Paramètres dans l'ordre : longitude de l'emplacement 1, latitude de l'emplacement 1, longitude de l'emplacement 2, latitude de l'emplacement 2. Plage de latitude valide : [−90, +90]. Plage de longitude valide : [−180, +180]. Les valeurs d'entrée ne peuvent pas être des constantes. |
ST_Length |
ST_Length(geom) |
DOUBLE |
HQE (V1.3) | Renvoie la longueur cartésienne d'une géométrie linéaire dans les mêmes unités que le système de coordonnées. Renvoie 0 pour les points, les multipoints et les géométries surfaciques. Pour les collections, renvoie la longueur totale. |
ST_Perimeter |
ST_Perimeter(geom) |
DOUBLE |
HQE (V1.3) | Renvoie le périmètre cartésien (longueur de la limite) d'une géométrie surfacique dans les mêmes unités que le système de coordonnées. Renvoie 0 pour les points, les multipoints et les géométries linéaires. Pour les collections, renvoie la somme des périmètres de tous les éléments. |
Fonction de superposition
| Function | Syntax | Returns | Required engine | Description |
|---|---|---|---|---|
ST_Intersection |
ST_Intersection(geom1, geom2) |
GEOMETRY |
HQE (V1.3) | Renvoie l'intersection géométrique de deux géométries. |
Fonctions de traitement de geometry
| Function | Syntax | Returns | Required engine | Description |
|---|---|---|---|---|
ST_Buffer |
ST_Buffer(geography, float8) |
GEOMETRY |
PQE | Renvoie la géométrie représentant tous les points situés à la distance indiquée de la géographie d'entrée. |
ST_ConvexHull |
ST_ConvexHull(geom) |
GEOMETRY |
HQE (V1.3) | Renvoie l'enveloppe convexe de tous les points non vides de la géométrie d'entrée. |
ST_Simplify |
ST_Simplify(geom, tolerance) |
GEOMETRY |
HQE (V1.3) | Renvoie une copie simplifiée de la géométrie en utilisant l'algorithme Ramer-Douglas-Peucker avec la tolérance indiquée. La topologie peut ne pas être préservée. |
Fonctions de zone englobante
Toutes les fonctions de ce groupe s'exécutent sur PQE.
| Function | Syntax | Returns | Description |
|---|---|---|---|
ST_XMax |
ST_XMax(geom) |
DOUBLE |
Renvoie la coordonnée X maximale de la géométrie. |
ST_XMin |
ST_XMin(geom) |
DOUBLE |
Renvoie la coordonnée X minimale de la géométrie. |
ST_YMax |
ST_YMax(geom) |
DOUBLE |
Renvoie la coordonnée Y maximale de la géométrie. |
ST_YMin |
ST_YMin(geom) |
DOUBLE |
Renvoie la coordonnée Y minimale de la géométrie. |
Fonction de référencement linéaire
| Function | Syntax | Returns | Required engine | Description |
|---|---|---|---|---|
ST_LineInterpolatePoint |
ST_LineInterpolatePoint(geom, fraction) |
GEOMETRY (POINT) |
HQE (V1.3) | Renvoie le point situé à une distance fractionnaire le long de la ligne, mesurée depuis le début. Par exemple, fraction=0.5 renvoie le point médian. |
Bonnes pratiques pour l'utilisation des fonctions spatiales
Pour des exemples complets illustrant les modèles d'analyse géographique courants, consultez Utiliser des fonctions spatiales pour interroger des données.