Manuel PostGIS 3.6.0dev

DEV (Thu 03 Oct 2024 08:35:42 AM UTC rev. 4fcfd0f )

Le groupe de développement PostGIS

Abstract

PostGIS est une extension du système de base de PostgreSQL données relationnel-objet qui permet de stocker des objets SIG (Système d'Information Géographique) dans la base. PostGIS comporte un support des index spatiaux R-Tree basé sur GiST et des fonctions d'analyse et de traitement des objets SIG.

Manuel de la version 3.6.0dev

Ce travail est soumis à une licence Creative Commons Attribution-Share Alike 3.0 License. Vous pouvez utiliser ce matériel comme bon vous semble, mais nous vous demandons de mentionner le projet PostGIS et, dans la mesure du possible, d'ajouter un lien vers https://postgis.net.


Table of Contents

Chapter 1. Introduction

PostGIS est une extension spatiale pour la base de données relationnelle PostgreSQL. Elle a été créée par Refractions Research Inc, sous la forme d'un projet de recherche sur les technologies de base de données spatiales. Refractions est une société de conseil en SIG et base de données basée à Victoria, British Columbia, Canada, et spécialisée en intégration de données et développement logiciel.

PostGIS est désormais un projet de la OSGeo Foundation. PostGIS est développé et financé par de nombreux développeurs et organismes FOSS4G dans le monde entier, qui bénéficient de manière significative de ses fonctionnalités et de sa polyvalence.

Le groupe de développement du projet PostGIS a en charge la maintenance et l'amélioration de PostGIS pour un meilleur support de fonctionnalités importantes en SIG, dans les domaines des standards OGC et SQL/MM, des constructions topologiques avancées (couvertures, surfaces, réseaux), des sources de données pour les outils graphiques de bureautique pour la visualisation et l'édition des donnée SIG, ainsi que dans le domaine des outils web.

1.1. Comité de direction du projet (Project Steering Committee)

Le comité de direction du projet (PSC) coordonne la direction générale, les cycles de publication, la documentation et les efforts spécifiques pour le projet PostGIS. De plus, le PSC fournit un support général aux utilisateurs, accepte et approuve les patches de la communauté PostGIS et vote sur divers points concernant PostGIS, tels que les accès commit pour les développeurs, les nouveaux membres du PSC ou les changements majeurs d'API.

Raúl Marín Rodríguez

Support MVT, Correction de bugs, Améliorations des performances et de la stabilité, Nettoyage du GitHub, Alignement de PostGIS avec les publications PostgreSQL

Regina Obe

Maintenance de l'IC (intégration continue) et du site web, production Windows et builds expérimentaux, documentation, alignement de PostGIS sur les versions de PostgreSQL, support X3D, support du géocodeur TIGER, fonctions de gestion.

Darafei Praliaskouski

Amélioration de l'index, correction de bugs et amélioration des fonctions de géométrie/géographie, SFCGAL, raster, curation GitHub, et maintenance ci (intégration continue).

Paul Ramsey (Directeur)

Co-fondateur de PostGIS. Maintenance générale, maintenance des Geography, maintenance des index Geography et Geometry (index 2D, 3D, nD et tout index spatial), structures internes des Geometry, intégration des fonctionnalités GEOS et alignement avec les publications GEOS, alignement de PostGIS avec les publications PostgreSQL, loader/dumper, IHM de chargement Shapefile.

Sandro Santilli

Corrections de bugs et maintenance, maintenance des CI (intégration continue), gestion des miroirs git, fonctions de gestion, intégration de nouvelles fonctionnalités GEOS et alignement sur les versions GEOS, support topologique, framework raster et fonctions API de bas niveau.

1.2. Contributeurs cœur actuels

Nicklas Avén

Améliorations et ajouts de fonctions de distance (notamment fonctions de distance 3D et relations), format de sortie Tiny WKB (TWKB) et support utilisateur

Loïc Bartoletti

Améliorations et maintenance de SFCGAL et maintien de l'intégration continue

Dan Baston

Ajout de fonctions sur le clustering de géométries, améliorations sur les algorithmes sur les géométries, améliorations GEOS et support utilisateur

Martin Davis

Améliorations GEOS et documentation

Björn Harrtell

Fonctions MapBox Vector Tile, GeoBuf et Flatgeobuf. Tests Gitea et expérimentation GitLab.

Aliaksandr Kalenik

Traitement des géométries, PostgreSQL gist, correction de bugs

1.3. Anciens contributeurs cœur

Bborie Park

Ancien membre du PSC. Développement raster, intégration avec GDAL, loader raster, support utilisateur, correction de bugs, tests sur divers systèmes d'exploitation (Slackware, Mac, Windows, et autres)

Mark Cave-Ayland

Ancien membre du PSC. Coordination de l'effort de correction de bugs et de maintenance, sélectivité et liaisons des index spatiaux, loader/dumper, IHM de chargement Shapefile, intégration et amélioration de nouvelles fonctions.

Jorge Arévalo

Développement Raster, support du driver GDAL, outil de chargement

Olivier Courtin

(Émérite) Fonctions d'entrée/sortie XML (KML,GML) et fonctions GeoJSON, support 3D et correction de bugs.

Chris Hodgson

Ancien membre du PSC. Développement général, maintenance du site et du robot de build, gestion de l'incubation OSGeo

Mateusz Loskot

Support de CMake pour PostGIS, a développé le loader raster original en python et les fonctions d'API bas-niveau raster

Kevin Neufeld

Ancien membre du PSC. Documentation et outils pour la documentation, maintenance du robot de build, support utilisateur avancé sur le newsgroup PostGIS, et maintenance et améliorations des fonctions PostGIS.

Dave Blasby

Développeur originel et co-fondateur de PostGIS. Dave a écrit les objets côté serveur, les liaisons des index, et de nombreuses fonctions d'analyse côté serveur.

Jeff Lounsbury

Développement originel de l'outil de chargement/export de shapefiles.

Mark Leslie

Maintenance générale et développement de fonctions du noyau PostGIS. Amélioration du support des courbes. Interface graphique de chargement des shapefiles.

Pierre Racine

Architecte de l'implémentation raster de PostGIS. Architecture globale raster, prototypage, support au développement

David Zwarg

Développement raster (principalement fonctions analytiques d'algèbre cartographique)

1.4. Autres contributeurs

Contributeurs individuels

Alex BodnaruGino LucreziMaxime Guillaud
Alex MayrhoferGreg TroxelMaxime van Noppen
Andrea PeriGuillaume LelargeMaxime Schoemans
Andreas Forø TollefsenGiuseppe BroccoloMichael Fuhr
Andreas NeumannHan WangMike Toews
Andrew GierthHans LemuetNathan Wagner
Anne GhislaHaribabu KommiNathaniel Clay
Antoine BajoletHavard TveiteNikita Shulga
Arthur LesuisseIIDA TetsushiNorman Vine
Artur ZakirovIngvild NystuenPatricia Tozer
Barbara PhillipotJackie LengRafal Magda
Ben JubbJames AddisonRalph Mason
Bernhard ReiterJames MarcaRémi Cura
Björn EsserJan KatinsRichard Greenwood
Brian HamlinJan TojnarRobert Coup
Bruce RindahlJason SmithRoger Crew
Bruno Wolff IIIJeff AdamsRon Mayer
Bryce L. NordgrenJelte FennemaSam Peters
Carl AndersonJim JonesSebastiaan Couwenberg
Charlie SavageJoe ConwaySergei Shoulbakov
Chris MayoJonne SavolainenSergey Fedoseev
Christian SchroederJose Carlos Martinez LlariShinichi Sugiyama
Christoph BergJörg HabenichtShoaib Burq
Christoph Moench-TegederJulien RouhaudSilvio Grosso
Dane SpringmeyerKashif RasulStefan Corneliu Petrea
Dapeng WangKlaus FoersterSteffen Macke
Daryl HerzmannKris JurkaStepan Kuzmin
Dave FuhryLaurenz AlbeStephen Frost
David GarnierLars RoessigerSteven Ottens
David SkeaLeo HsuTalha Rizwan
David TecherLoic DacharyTeramoto Ikuhiro
Dian M FayLuca S. PercichTom Glancy
Dmitry VasilyevLucas C. Villa RealTom van Tilburg
Eduin CarrilloMaria Arias de ReynaVictor Collod
Esteban ZimanyiMarc DucobuVincent Bre
Eugene AntimirovMark SondheimVincent Mora
Even RouaultMarkus SchaberVincent Picavet
Florian WeimerMarkus WannerVolf Tomáš
Frank WarmerdamMatt AmosZuo Chenwei
George SilvaMatt Bretl 
Gerald FenoyMatthias Bay 

Organisations sponsors

Certaines organisations ont contribué du temps de développeur, de l'hébergement, ou du financement direct pour le projet PostGIS. Par ordre alphabétique :

Campagnes de financement participatif

Les campagnes de financement participatif sont des campagnes que nous organisons pour financer des fonctionnalités très demandées qui peuvent servir à une large communauté. Chaque campagne est centrée sur une fonctionnalité, ou un lot de fonctionnalités. Chaque sponsor apporte une petite fraction du financement nécessaire, et avec assez de personnes et d'organisations contribuant, nous obtenons les fonds nécessaires pour payer le travail qui aidera la communauté. Si vous pensez qu'une fonctionnalité pourrait être co-financée par de nombreux acteurs, vous pouvez poster votre idée sur le newsgroup PostGIS et ensemble nous pourrons la réaliser.

PostGIS 2.0.0 a été la première version où cette stratégie a été testée. Nous avons utilisé PledgeBank et avons eu deux campagnes de financement réussies.

postgistopology - Plus de 10 sponsors ont contribué chacun 250USD pour créer la fonction toTopoGeometry et sortir le support de la topologie dans la version 2.0.0. Ce fut une réussite.

postgis64windows - Plus de 20 sponsors ont contribué chacun 100USD pour le support PostGIS 64-bit sur Windows. Ce fut une réussite.

Bibliothèques de base importantes

GEOS, la bibliothèque pour les opérations sur les géometries

GDAL (Geospatial Data Abstraction Library), la bibliothèque utilisée pour propulser la plupart des fonctionnalités raster introduites dans PostGIS 2. En retour, les améliorations requises dans GDAL pour supporter PostGIS sont reversées dans le projet GDAL.

PROJ, la bibliothèque gérant les projections cartographiques

Enfin, mais non des moindres, le projet de SGBD PostgreSQL, géant sur les épaules duquel PostGIS s'appuie. La rapidité et flexibilité de PostGIS serait impossible sans l'extensibilité, le planificateur de requêtes, les index GiST et les nombreuses fonctionnalités SQL que fournit PostgreSQL.

Chapter 2. Installation de PostGIS

Ce chapitre décrit les étapes nécessaires pour installer PostGIS.

2.1. Version courte

Pour compiler, en supposant que toutes les dépendances soient dans votre chemin de recherche :

tar -xvzf postgis-3.6.0dev.tar.gz
cd postgis-3.6.0dev
./configure
make
make install

Une fois PostGIS installé, il est nécessaire de l'activer (Section 3.3, “Création de bases de données spatiales”) ou de le mettre à jour (Section 3.4, “Mise à jour des bases de données spatiales”) dans chaque base de données où vous voulez l'utiliser.

2.2. Compilation et installation depuis les sources

[Note]

La plupart des systèmes d'exploitation dispose de paquets pré-compilés de PostgreSQL/PostGIS. La compilation est réellement nécessaire uniquement pour disposer des toutes dernières fonctionnalités ou pour les responsables de paquets PostGIS.

Cette section décrit le processus générique de compilation. Si vous compilez pour Windows ou d'autres systèmes d'exploitation, vous trouverez des instructions plus détaillées dans les wiki de la communauté guides de compilation et PostGIS Dev Wiki.

Les paquets pré-compilés pour de multiples systèmes d'exploitation sont listés dans PostGIS Pre-built Packages

Pour les utilisateurs Windows, des versions stables sont disponibles sur Stackbuilder ou sur le site de téléchargement PostGIS Windows. Des compilations expérimentales incluant les dernières fonctionnalités sont disponibles. Ces compilations sont généralement mises à jour une ou deux fois par semaines, ou chaque fois qu'une nouvelle fonctionnalité intéressante est ajoutée. Vous pouvez les utiliser pour suivre l'avancée des versions de PostGIS

Le module PostGIS est une extensions pour le serveur backend PostgreSQL. Par conséquent, PostGIS 3.6.0dev nécessite l'ensemble des entêtes du serveur PostgreSQL pour pouvoir être compilé. PostGIS peut être compilé pour les versions PostgreSQL 12 à 17. Les versions précédentes de PostgreSQL ne sont pas supportées.

Référez-vous aux guides d'installation de PostgreSQL si vous ne l'avez pas encore installé : https://www.postgresql.org .

[Note]

Pour les fonctionnalités de GEOS, quand vous installez PostgreSQL, vous aurez peut-être besoin de lier explicitement PostgreSQL avec la bibliothèque standard C++ :

LDFLAGS=-lstdc++ ./configure [YOUR OPTIONS HERE]

Ceci est une solution de contournement d'exceptions C++ d'interactions bugués dans des outils de développements plus ancien. Si vous tombez sur ce genre de problèmes (backend soudainement fermé ou des choses similaires) essayez cette astuce. Cela nécessite de recompiler votre PostgreSQL du début, bien sur.

Les étapes suivantes résument la configuration et la compilation des sources PostGIS. Elles ont été rédigées pour les utilisateurs sous Linux et ne fonctionneront pas pour Windows et Mac.

2.2.1. Obtenir les Sources

Les sources de PostGIS sont disponible depuis https://postgis.net/stuff/postgis-3.6.0dev.tar.gz

wget https://postgis.net/stuff/postgis-3.6.0dev.tar.gz
tar -xvzf postgis-3.6.0dev.tar.gz
cd postgis-3.6.0dev

Un répertoire appelé postgis-3.6.0dev sera créé dans le répertoire courant.

Les sources peuvent également être obtenues depuis le dépôt git https://git.osgeo.org/gitea/postgis/postgis/ .

git clone https://git.osgeo.org/gitea/postgis/postgis.git postgis
cd postgis
sh autogen.sh
    

Se placer dans le nouveau répertoire créé postgis-3.6.0dev pour poursuivre l'installation.

./configure

2.2.2. Pré requis à l'installation

La compilation et l'utilisation de PostGIS nécessitent les éléments suivants :

Obligatoire

  • PostgreSQL 12 - 17. Une installation complète de PostgreSQL (y compris les en-têtes du serveur) est nécessaire. PostgreSQL est disponible à partir de https://www.postgresql.org .

    Pour une matrice complète de compatibilité PostgreSQL/PostGIS et PostGIS/GEOS, référez-vous à https://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS

  • Un compilateur GNUC C (gcc). D'autres compilateurs ANSI C peuvent être utilisés, mais la compilation avec gcc est source de moins de problèmes.

  • GNU Make (gmake ou make). Sur beaucoup de systemes, GNU make est la version par défaut de make. Vous pouvez vérifier la version de make avec la commande make -v. D'autres versions de make peuvent ne pas être compatibles avec le Makefile de PostGIS.

  • Proj, bibliothèque de reprojection. Proj 6.1 ou supérieur est nécessaire. La bibliothèque Proj est utilisée pour fournir le support de reprojection de coordonnées dans PostGIS. Proj est disponible au téléchargement depuis https://proj.org/ .

  • La bibliothèque de géométrie GEOS, version 3.8.0 ou supérieure, mais GEOS 3.12+ est nécessaire pour profiter pleinement de toutes les nouvelles fonctions et caractéristiques. GEOS peut être téléchargé à partir de https://libgeos.org .

  • LibXML2, version 2.5.x ou supérieur. LibXML2 est actuellement utilisée dans certaines fonctions d'import (ST_GeomFromGML et ST_GeomFromKML). LibXML2 est disponible au téléchargement depuis https://gitlab.gnome.org/GNOME/libxml2/-/releases.

  • JSON-C, version 0.9 ou supérieure. JSON-C est utilisé pour l'import GeoJSON avec la fonction ST_GeomFromGeoJson. JSON-C est disponible depuis https://github.com/json-c/json-c/releases/.

  • GDAL, version 3+ is preferred. This is required for raster support. https://gdal.org/download.html.

  • Si vous compilez avec PostgreSQL+JIT, LLVM version >=6 est nécessaire https://trac.osgeo.org/postgis/ticket/4125.

Optionnel

  • GDAL (pseudo optionnel) vous pouvez l'omettre seulement si vous ne voulez pas du support raster. Pensez également à activer les pilotes que vous souhaitez utiliser, comme décrit dans Section 3.2, “Configurer la prise en charge du raster”.

  • GTK (GTK+2.0, 2.8+) pour compiler le chargeur de shape file shp2pgsql-gui. http://www.gtk.org/ .

  • SFCGAL, 1.4.1 or higher is required and 1.5.0+ is needed to be able to use all functionality. SFCGAL can be used to provide additional 2D and 3D advanced analysis functions to PostGIS cf Chapter 8, Référence des fonctions SFCGAL. And also allow to use SFCGAL rather than GEOS for some 2D functions provided by both backends (like ST_Intersection or ST_Area, for instance). A PostgreSQL configuration variable postgis.backend allow end user to control which backend he want to use if SFCGAL is installed (GEOS by default). Nota: SFCGAL 1.2 require at least CGAL 4.3 and Boost 1.54 (cf: https://sfcgal.org) https://gitlab.com/sfcgal/SFCGAL/.

  • Pour compiler Section 12.1, “Address Standardizer”, vous aurez également besoin de PCRE http://www.pcre.org (qui est généralement déjà installé sur les systèmes nix). Section 12.1, “Address Standardizer” sera automatiquement compilé s'il détecte une bibliothèque PCRE, ou si vous passez un --with-pcre-dir=/path/to/pcre valide pendant la configuration.

  • Pour permettre d'utiliser ST_AsMVT, la bibliothèque protobuf-c 1.1.0 ou supérieur (pour l'utilisation) et le compilateur protoc-c (pour la compilation) sont nécessaires. Également, pkg-config est nécessaire pour vérifier la version minimale correcte de protobuf-c. Voir protobuf-c. Par défaut, PostGIS utilise Wagyu pour valider les polygones MVT plus rapidement, ce qui nécessite un compilateur c++11. Ceci utilisera les CXXFLAGS et le même compilateur que l'installation PostgreSQL. Pour désactiver cela et utiliser GEOS à la place, utilisez la variable --without-wagyu pendant l'étape de configuration.

  • CUnit (CUnit). Nécessaire pour les tests de régression. http://cunit.sourceforge.net/

  • DocBook (xsltproc) est nécessaire pour générer la documentation. Docbook est disponible depuis le site http://www.docbook.org/ .

  • DBLatex (dblatex) est nécessaire pour générer la documentation au format PDF. DBLatex est disponible depuis http://dblatex.sourceforge.net/ .

  • ImageMagick (convert) est nécessaire pour générer les images de la documentation. ImageMagick is available from http://www.imagemagick.org/ .

2.2.3. Configuration de la compilation

Comme pour la plupart des installations linux, la première étape est de générer le Makefile qui sera utilisé pour compiler le code source. Ceci est réalisée en lançant le script shell

./configure

Sans paramètre supplémentaire, cette commande tentera de localiser automatiquement les composants requis et les bibliothèques nécessaires à la compilation de PostGIS. Bien que cela soit l'utilisation la plus commune de la commande ./configure, vous pouvez également ajouter différents paramètres à ce script. Par exemple, vous pouvez définir l'emplacement de bibliothèques ou de programmes si ceux-ci ne sont pas localisés à un emplacement standard.

La liste suivante présente les options les plus courantes. Pour consulter la liste complète utilisez l'option --help ou --help=short.

--with-library-minor-version

À partir de PostGIS 3.0, les fichiers de bibliothèque générés par défaut n'auront plus la version mineur dans le nom de fichier. Ceci signifie que les libs PostGIS 3 se termineront par postgis-3. Ceci a été fait pour faciliter l'usage de pg_upgrade, avec la contrainte que vous ne pouvez installer qu'une seule version de PostGIS 3 sur votre serveur. Pour basculer sur l'ancien comportement et avoir des fichiers qui incluent la version mineure : e.g. postgis-3.0, ajoutez ce paramètre dans la commande de configuration.

--prefix=PREFIX

Cela correspond à l'emplacement où les exécutables et librairies de PostGIS seront installés. Par défaut, cet emplacement est le même que celui de l'installation de PostgreSQL.

[Caution]

Ce paramètre est actuellement défectueux : le paquet s'installe uniquement dans le répertoire d'installation de PostgreSQL. Le suivi de ce bug est disponible depuis http://trac.osgeo.org/postgis/ticket/635 .

--with-pgconfig=FILE

PostgreSQL fournit l'utilitaire pg_config permettant aux extensions comme PostGIS de localiser le répertoire d'installation de PostgreSQL. Utiliser ce paramètre (--with-pgconfig=/path/to/pg_config) pour spécifier une installation particulière de PostgreSQL pour laquelle PostGIS doit être compilée.

--with-gdalconfig=FILE

GDAL, une des bibliothèques requises pour le support des rasters. gdal-config pour permettre au logiciel de localiser le répertoire d'installation de GDAL. Utiliser ce paramètre (--with-gdalconfig=/path/to/gdal-config) pour spécifier un répertoire d'installation particulier de GDAL qui sera utilisé pour compiler PostGIS.

--with-geosconfig=FILE

GEOS, une des bibliothèques requises, fournit un utilitaire appelé geos-config permettant aux logiciels de localiser le répertoire d'installation de GEOS. Utiliser ce paramètre (--with-geosconfig=/path/to/geos-config) pour spécifier le repertoire de GEOS qui sera utilisé pour la compilation de PostGIS.

--with-xml2config=FILE

LibXML est la bibliothèque requise pour les processus GeomFromKML/GML. Elle est normalement trouvée si libxml est installé, mais si ce n'est pas le cas ou si vous souhaitez qu'une version spécifique soit utilisée, vous devrez indiquer à PostGIS un fichier confi xml2-config spécifique pour permettre aux installations logicielles de localiser le répertoire d'installation de LibXML. Utilisez ce paramètre (>--with-xml2config=/path/to/xml2-config) pour spécifier manuellement une installation LibXML particulière avec laquelle PostGIS sera construit.

--with-projdir=DIR

Proj4 est la bibliothèque de reprojection nécessaire à PostGIS. Utilisez ce paramètre (--with-projdir=/path/to/projdir) pour spécifier le répertoire de Proj qui sera utilisé pour la compilation de PostGIS.

--with-libiconv=DIR

Répertoire d'installation d'iconv.

--with-jsondir=DIR

JSON-C est une bibliothèque sous licence MIT utilisée par PostGIS pour les traitements JSON (ST_GeomFromJSON par exemple). Utiliser ce paramètre (--with-jsondir=/path/to/jsondir) pour spécifier le répertoire de JSON-C qui sera utilisé pour la compilation de PostGIS.

--with-pcredir=DIR

PCRE (Perl Compatible Regular Expression) est une bibliothèque sous licence BSD requise par l'extension address_standardizer. Utilisez ce paramètre (--with-pcredir=/chemin/vers/pcredir) pour spécifier un répertoire contenant PCRE qui sera utilisé par PostGIS.

--with-gui

Compile l'interface graphique d'import de données (nécessite GTK+2.0). Ceci créé l'interface graphique shp2pgsql-gui à shp2pgsql.

--without-raster

Compilation sans support des raster.

--without-topology

Désactive le support des topologies. Il n'y a pas de bibliothèque correspondante car toute la logique requise pour les topologies est incluse dans postgis-3.6.0dev.

--with-gettext=no

Par défaut PostGIS tentera de détecter la gestion de gettext et de reposer dessus pour la compilation, cependant si vous tombez sur des problèmes d'incompatibilités qui cause la cassure du chargeur, vous pouvez le désactiver entièrement avec cette commande. Référez vous au ticket http://trac.osgeo.org/postgis/ticket/748 pour un exemple de problème résolu par cette configuration. NOTE : que vous perdez beaucoup de chose en le désactivant. Cela est utilisé pour la gestion de l'aide et des labels internationaux dans le chargeur graphique qui n'est pas documenté et encore expérimental.

--with-sfcgal=PATH

Par défaut, PostGIS ne contiendra pas le support sfcgal sans cet argument. PATH est un argument optionnel permettant de préciser un chemin alternatif vers sfcgal-config.

--without-phony-revision

Désactive la mise à jour de postgis_revision.h à partir du HEAD courant du dépôt git.

[Note]

Si vous avez téléchargé PostGIS depuis le dépôt du code , la première étape est d'exécuter le script

./autogen.sh

Ce script générera le script configure qui est utilisé pour personnaliser votre installation de PostGIS.

Si vous avez obtenu PostGIS comme archive, lancer la commande ./autogen.sh n'est pas nécessaire puisque configure a déjà été généré.

2.2.4. Compiler

Une fois le Makefile généré, compiler PostGIS est aussi simple que lancer

make

La dernière ligne de la sortie doit être "PostGIS was built successfully. Ready to install."

À partir de PostGIS v1.4.0, toutes les fonctions ont leur commentaire généré à partir de la documentation. Si vous souhaitez installer ces commentaires dans votre base de données spatiale plus tard, exécutez la commande suivante, qui nécessite docbook. Les fichiers de commentaires pour PostGIS postgis_comments.sql et pour les autres paquets raster_comments.sql, topology_comments.sql sont aussi inclus dans le paquet tar.gz de la distribution, dans le répertoire doc, il est donc inutile d'utiliser cette commande si vous installez depuis l'archive tar. Les commentaires sont aussi inclus par l'installation via CREATE EXTENSION.

make comments

Introduit dans PostGIS 2.0. Cela génère un mémo en html disponible pour une référence rapide ou pour les étudiants. La compilation nécessite xsltproc et génèrera 4 fichiers dans le répertoire doc topology_cheatsheet.html, tiger_geocoder_cheatsheet.html, raster_cheatsheet.html, postgis_cheatsheet.html

Vous pouvez télécharger des pré-compilations disponibles en HTML et PDF à partir de PostGIS / PostgreSQL Study Guides

make cheatsheets

2.2.5. Compiler les Extensions PostGIS et les déployer

Les extensions PostGIS sont compilées et installées automatiquement si vous utilisez PostgreSQL 9.1+.

Si vous compilez à partir des dépôts des sources, vous devez compiler les descriptions de fonction d'abord. Ceci est compilé si vous avez docbook installé. Vous pouvez également compiler manuellement avec cette commande :

make comments

Compiler les commentaires n'est pas nécessaire si vous avez compilé à partir d'une release d'archive puisque ceux-ci sont des pré-compilations packagés avec le tar ball.

Les extensions devraient être automatiquement compilées lors du make install. Vous pouvez, si nécessaire, compiler à partir des répertoires d'extensions ou copier les fichiers si vous en avez besoin sur un serveur différent.

cd extensions
cd postgis
make clean
make
export PGUSER=postgres #overwrite psql variables
make check #to test before install
make install
# to test extensions
make check RUNTESTFLAGS=--extension
[Note]

make check utilise psql pour faire tourner les tests, et peut donc utiliser les variables d'environnement psql. Les variables classiques utiles à définir sont PGUSER,PGPORT, and PGHOST. Voir variables d'environnement psql

Les fichiers extensions seront toujours les mêmes pour les mêmes versions de PostGIS et PostgreSQL indépendamment de l'OS, par conséquent il n'y a pas de problème à copier les fichiers extensions d'un OS à un autre du moment que vous avez les binaires PostGIS déjà installés sur vos serveurs.

Si vous voulez installer les extensions manuellement sur un serveur différent séparé de votre développement, vous devez copier les fichiers suivants à partir du répertoire extension dans le répertoire PostgreSQL / share / extension de votre installation PostgreSQL ainsi que les binaires nécessaires pour une version correcte de PostGIS si vous ne les avez pas déjà sur le serveur.

  • Ceux-ci sont les fichiers de contrôle qui renvoie les informations telles que la version de l'extension à installer si non spécifié. postgis.control, postgis_topology.control.

  • Tous les fichiers dans le répertoire /sql de chaque extension. Notez que ceux-ci nécessitent d'être copiées à la racine du répertoire share/extension de PostgreSQL extensions/postgis/sql/*.sql, extensions/postgis_topology/sql/*.sql

Une fois que vous avez fait cela, vous devriez voir postgis, postgis_topology comme extensions disponibles dans PgAdmin -> extensions.

Si vous utilisez psql, vous pouvez vérifier que les extensions sont installées en lançant cette requête :

SELECT name, default_version,installed_version
FROM pg_available_extensions WHERE name LIKE 'postgis%' or name LIKE 'address%';

             name             | default_version | installed_version
------------------------------+-----------------+-------------------
 address_standardizer         | 3.6.0dev         | 3.6.0dev
 address_standardizer_data_us | 3.6.0dev         | 3.6.0dev
 postgis                      | 3.6.0dev         | 3.6.0dev
 postgis_raster               | 3.6.0dev         | 3.6.0dev
 postgis_sfcgal               | 3.6.0dev         |
 postgis_tiger_geocoder       | 3.6.0dev         | 3.6.0dev
 postgis_topology             | 3.6.0dev         |
(6 rows)

Si vous avez l'extension installée dans la base de données que vous interrogez, vous verrez la mention dans la colonne installed_version. Si vous n'obtenez aucun enregistrement , cela signifie que vous n'avez pas d'extension postgis installés sur le serveur. PgAdmin III 1.14+ fournira aussi cette information dans la section extensions dans l'arbre de l'explorateur de la base de données et autorisera même la mise à jour ou la désinstallation par clic-droit.

Si vous avez les extensions disponibles, vous pouvez installer les extensions postgis dans votre base de données de votre choix soit en utilisant l'interface d'extension de PgAdmin ou lançant ces commandes SQL :

CREATE EXTENSION postgis;
CREATE EXTENSION postgis_raster;
CREATE EXTENSION postgis_sfcgal;
CREATE EXTENSION fuzzystrmatch; --needed for postgis_tiger_geocoder
--optional used by postgis_tiger_geocoder, or can be used standalone
CREATE EXTENSION address_standardizer;
CREATE EXTENSION address_standardizer_data_us;
CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION postgis_topology;

Avec psql, vous pouvez contrôler les versions installées ainsi que les schémas d'installation.

\connect mygisdb
\x
\dx postgis*
List of installed extensions
-[ RECORD 1 ]-------------------------------------------------
Name        | postgis
Version     | 3.6.0dev
Schema      | public
Description | PostGIS geometry, geography, and raster spat..
-[ RECORD 2 ]-------------------------------------------------
Name        | postgis_raster
Version     | 3.0.0dev
Schema      | public
Description | PostGIS raster types and functions
-[ RECORD 3 ]-------------------------------------------------
Name        | postgis_tiger_geocoder
Version     | 3.6.0dev
Schema      | tiger
Description | PostGIS tiger geocoder and reverse geocoder
-[ RECORD 4 ]-------------------------------------------------
Name        | postgis_topology
Version     | 3.6.0dev
Schema      | topology
Description | PostGIS topology spatial types and functions
[Warning]

Les tables d'extension spatial_ref_sys, layer, topology ne peuvent pas être explicitement sauvegardées. Elles peuvent être uniquement sauvegardées quand les extensions respectives postgis ou postgis_topology sont sauvegardées, ce qui semble seulement arriver quand vous sauvegardez l'ensemble de la base. À partir de PostGIS 2.0.1, seulement les enregistrements des srid non packagés avec PostGIS sont sauvegardés quand la base de données est sauvegardée. Par conséquent, ne vous attendez pas à ce vos modifications persistent si vous changez les srids que nous fournissons. Créez un ticket si vous trouvez un problème. Les structures des tables d'extensions ne sont jamais sauvegardées puisque créées avec CREATE EXTENSION et sont supposées être identiques à version égale d'une extension. Ce comportement fait partie du modèle actuel d'extensions de PostgreSQL, nous ne pouvons donc rien faire à ce sujet.

Si vous avez installé la version 3.6.0dev sans utiliser le système d'extensions, il est possible de l'activer via les commandes suivantes pour packager les fonctions dans leurs extensions respectives. L'installation via `unpackaged` a été supprimé dans PostgreSQL 13, nous vous invitons donc à basculer sur une installation utilisant le système d'extensions avant de migrer à PostgreSQL 13.

CREATE EXTENSION postgis FROM unpackaged;
CREATE EXTENSION postgis_raster FROM unpackaged;
CREATE EXTENSION postgis_topology FROM unpackaged;
CREATE EXTENSION postgis_tiger_geocoder FROM unpackaged;

2.2.6. Tests

Si vous désirez tester la compilation de PostGIS, lancez

make check

La commande ci-dessus fonctionnera pour différentes tests de vérification et de régression en utilisant la bibliothèque générée selon la base de données actuelle.

[Note]

Si vous avez configuré PostGIS en utilisant un emplacement non standard de PostgreSQL, GEOS, ou Proj4, vous pourrez avoir besoin d'ajouter l'emplacement des bibliothèques à la variable d'environnement LD_LIBRARY_PATH.

[Caution]

Pour le moment, make check repose sur les variables d'environnement PATH et PGPORT lors de la réalisation des vérifications - il n'utilise pas la version de PostgreSQL qui a pu être définie en utilisant la paramètre de configuration --with-pgconfig. Assurez vous donc de modifier votre PATH pour correspondre l'installation de PostgreSQL détectée durant la configuration ou préparez vous à gérer des maux de tête à venir.

Si réussi, make check sortira les résultats de près de 500 tests. Les résultats seront similaires à la sortie ci-dessous (avec de nombreuses lignes omises) :

CUnit - A unit testing framework for C - Version 2.1-3
     http://cunit.sourceforge.net/

        .
        .
        .

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites     44     44    n/a      0        0
               tests    300    300    300      0        0
             asserts   4215   4215   4215      0      n/a
Elapsed time =    0.229 seconds

        .
        .
        .

Running tests

        .
        .
        .

Run tests: 134
Failed: 0


-- if you build with SFCGAL

        .
        .
        .

Running tests

        .
        .
        .

Run tests: 13
Failed: 0

-- if you built with raster support

        .
        .
        .

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites     12     12    n/a      0        0
               tests     65     65     65      0        0
             asserts  45896  45896  45896      0      n/a


        .
        .
        .

Running tests

        .
        .
        .

Run tests: 101
Failed: 0

-- topology regress

.
.
.

Running tests

        .
        .
        .

Run tests: 51
Failed: 0

-- if you built --with-gui, you should see this too

     CUnit - A unit testing framework for C - Version 2.1-2
     http://cunit.sourceforge.net/

        .
        .
        .

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites      2      2    n/a      0        0
               tests      4      4      4      0        0
             asserts      4      4      4      0      n/a

Les extensions postgis_tiger_geocoder et address_standardizer ne supportent actuellement que l'installcheck de PostgreSQL. Pour les tester, cf ci-dessous. Note : Il n'est pas nécessaire de lancer make install si cette commande a déjà été lancée dans le répertoire racine des sources PostGIS.

Pour l'extension address_standardize :

cd extensions/address_standardizer
make install
make installcheck
          

La sortie de la commande devrait ressembler à :

============== dropping database "contrib_regression" ==============
DROP DATABASE
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test test-init-extensions     ... ok
test test-parseaddress        ... ok
test test-standardize_address_1 ... ok
test test-standardize_address_2 ... ok

=====================
 All 4 tests passed.
=====================

Le géocodeur tiger nécessite d'avoir les extensions postgis et fuzzystrmatch installée sur l'instance PostgreSQL. Les tests de l'extension address_standardizer seront lancés si PostGIS est compilé avec le support address_standardizer :

cd extensions/postgis_tiger_geocoder
make install
make installcheck
          

La sortie de la commande devrait ressembler à :

============== dropping database "contrib_regression" ==============
DROP DATABASE
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== installing fuzzystrmatch               ==============
CREATE EXTENSION
============== installing postgis                     ==============
CREATE EXTENSION
============== installing postgis_tiger_geocoder      ==============
CREATE EXTENSION
============== installing address_standardizer        ==============
CREATE EXTENSION
============== running regression test queries        ==============
test test-normalize_address   ... ok
test test-pagc_normalize_address ... ok

=====================
All 2 tests passed.
=====================

2.2.7. Installation

Pour installer PostGIS, entrez

make install

Ceci copiera les fichiers d'installation de PostGIS dans leur sous-répertoires appropriés définis par le paramètre de configuration --prefix. En particulier :

  • Les binaires du chargeur et du dumper sont installés dans [prefix]/bin.

  • Les fichiers SQL, tel que postgis.sql, sont installé dans [prefix]/share/contrib.

  • Les bibliothèques PostGIS sont installées dans [prefix]/lib.

Si vous avez déjà lancé la commande make comments pour générer les fichiers postgis_comments.sql, raster_comments.sql, installer le fichier sql en lançant

make comments-install

[Note]

postgis_comments.sql, raster_comments.sql, topology_comments.sql ont été séparés de la compilation initiale et des cibles de l'installation depuis qu'ils sont dépendant de xsltproc.

2.3. Installation et utilisation de l'extension address standardize

L'extension address_standardizer était précédemment livrée sous forme d'un paquet séparé nécessitant son propre téléchargement. Depuis la version 2.2 de PostGIS, cette extension est intégrée. Pour de plus amples informations sur cette extension, sa configuration, son utilisation, se référer à Section 12.1, “Address Standardizer”.

Ce normalisateur d'adresses peut être utilisé avec l'extension PostGIS tiger en remplacement de Normalize_Address. Se référer à la page Section 2.4.2, “Utilisation de l'Extension Address Standardizer avec le Geocodeur Tiger” pour mettre en place ce remplacement. Il peut également être utilisé pour fabriquer son propre géocodeur ou pour normaliser des adresses pour les comparer plus facilement.

Le normalisateur d'adresses se base sur PCRE, généralement installé sur les systèmes Nix. Il peut également être téléchargé ici : http://www.pcre.org. Durant la phase Section 2.2.3, “Configuration de la compilation”, si PCRE est détecté, le normalisateur d'adresses sera automatiquement compilé. Pour utiliser une installation personnalisée de PCRE, passer le paramètre --with-pcredir=/chemin/vers/pcre dans la commande configure, où /chemin/vers/pcre est le répertoire contenant les sous-répertoires pcre include et lib.

Pour les utilisateurs de Windows®, les versions 2.1 et supérieures de PostGIS sont livrées avec l'extension address_standardizer. Il n'est donc pas besoin de compiler cette extension. La commande CREATE EXTENSION suffit.

Une fois installée, vous pouvez vous connecter à votre base de données et lancer le SQL :

CREATE EXTENSION address_standardizer;

Le test suivant ne nécessite pas de table rules, gas, ou lex

SELECT num, street, city, state, zip
 FROM parse_address('1 Devonshire Place PH301, Boston, MA 02109');

La sortie de la commande devrait ressembler à

num |         street         |  city  | state |  zip
-----+------------------------+--------+-------+-------
 1   | Devonshire Place PH301 | Boston | MA    | 02109

2.4. Installation, mise à jour et chargement de données pour le géocodeur Tiger

L'extension géocodeur Tiger peut ne pas être distribué avec votre installation de PostGIS. Si vous n'avez pas l'extension géocodeur Tiger, ou si vous souhaitez utiliser une version plus récente de celle de votre installation, vous pouvez utiliser les fichiers share/extension/postgis_tiger_geocoder.* depuis les paquets disponibles à Windows Unreleased Versions, dans la section pour votre version de PostgreSQL. Même si ces paquets sont pour Windows, les fichiers d'extension postgis_tiger_geocoder fonctionneront quel que soit votre système d'exploitation car c'est une extension en SQL/plpgsql.

2.4.1. Tiger Geocoder Activation de votre base de données PostGIS

  1. Ces instructions supposent que l'extension postgis_tiger_geocoder soit déjà installée dans votre installation PostgreSQL.

  2. Connectez-vous à la base de données avec psql ou PgAdmin (ou tout autre client) et lancez la commande SQL suivante. Note : Si l'installation se déroule sur une base de données contenant déjà PostGIS, la première étape n'est pas nécessaire. Si l'extension fuzzystrmatch est déjà installée, la seconde étape n'est pas nécessaire non plus.

    CREATE EXTENSION postgis;
    CREATE EXTENSION fuzzystrmatch;
    CREATE EXTENSION postgis_tiger_geocoder;
    --this one is optional if you want to use the rules based standardizer (pagc_normalize_address)
    CREATE EXTENSION address_standardizer;

    Si l'extension postgis_tiger_geocoder est déjà installée et que vous souhaitez la mettre à jour, lancez :

    ALTER EXTENSION postgis UPDATE;
    ALTER EXTENSION postgis_tiger_geocoder UPDATE;

    Si vous avez modifié tiger.loader_platform ou tiger.loader_variables, vous devrez peut être les mettre à jour.

  3. Pour tester l'installation, lancez cette commande SQL sur la base de données :

    SELECT na.address, na.streetname,na.streettypeabbrev, na.zip
            FROM normalize_address('1 Devonshire Place, Boston, MA 02109') AS na;

    Qui devrait afficher

    address | streetname | streettypeabbrev |  zip
    ---------+------------+------------------+-------
               1 | Devonshire | Pl               | 02109
  4. Créez un nouvel enregistrement dans la table tiger.loader_platform contenant les chemins vers les exécutables et le serveur.

    Par exemple, pour créer un profil nommé debbie suivant la convention sh, vous feriez :

    INSERT INTO tiger.loader_platform(os, declare_sect, pgbin, wget, unzip_command, psql, path_sep,
                       loader, environ_set_command, county_process_command)
    SELECT 'debbie', declare_sect, pgbin, wget, unzip_command, psql, path_sep,
               loader, environ_set_command, county_process_command
      FROM tiger.loader_platform
      WHERE os = 'sh';

    Et modifiez les chemins dans la colonne declare_sect pour les faire correspondre aux chemins des programmes pg, unzip, shp2pgsql, psql, etc. sur le serveur Debbie.

    Si vous ne modifiez pas la table loader_platform, elle contiendra des chemins par défaut pour les programmes, et vous aurez à modifier les scripts après leur génération.

  5. Depuis PostGIS 2.4.1, le chargement des données de "ZIP Code Tabulation Area" zcta5 a été modifié pour charger les données actuelles zcta5, celui-ci est inclus dans Loader_Generate_Nation_Script si activé. Le chargement est désactivé par défaut car cela prend du temps (20 à 60 minutes), occupe de l'espace disque, et n'est pas souvent utile.

    Pour l'activer, exécutez :

    UPDATE tiger.loader_lookuptables SET load = true WHERE table_name = 'zcta520';

    Si disponible, la fonction Geocode peut l'utiliser lorsqu'un filtre de frontière est utilisé avec des codes zips. La fonction Reverse_Geocode l'utilise si l'adresse retournée n'a pas de code zip, ce qui arrive souvent avec le géocodage inverse sur des autoroutes.

  6. Créez un répertoire nommé gisdata à la racine du serveur ou de la machine locale si le réseau entre les deux est suffisamment rapide. Ce répertoire contiendra les fichiers tiger téléchargés et traités. Pour changer ce répertoire, modifier le champ staging_fold dans la table tiger.loader_variables.

  7. Créez un répertoire nommé temp dans le répertoire gisdata (ou dans le répertoire que vous avez configuré dans le champ staging_fold). Ce répertoire contiendra les données tiger extraites.

  8. Puis exécutez la fonction SQL Loader_Generate_Nation_Script, pour vous assurer que votre libellé de profil personnalisé est utilisé, et sauvegardez le script dans un fichier .sh ou .bat. Par exemple pour générer le script de chargement d'une nation :

    psql -c "SELECT Loader_Generate_Nation_Script('debbie')" -d geocoder -tA > /gisdata/nation_script_load.sh
  9. Exécutez en ligne de commande les scripts de chargement précédemment générés.

    cd /gisdata
    sh nation_script_load.sh
  10. Lorsque vous avez terminé d'exécuter les scripts, vous devriez avoir trois tables dans votre schéma tiger_data, avec des données déjà remplies. Vous pouvez confirmer cela avec les requêtes suivantes, à exécuter dans psql ou pgAdmn

    SELECT count(*) FROM tiger_data.county_all;
    count
    -------
      3235
    (1 row)
    SELECT count(*) FROM tiger_data.state_all;
    count
    -------
        56
    (1 row)
    

    Celle-ci n'aura des données que si vous avez spécifié le chargement de zcta5

    SELECT count(*) FROM tiger_data.zcta5_all;
    count
    -------
      33931
    (1 row)
    
  11. Par défaut, les tables correspondant à bg, tract, tabblock20 ne sont pas chargées. Ces tables ne sont pas utilisées par le géocodeur, mais sont typiquement utilisées pour les statistiques de population. Si vous souhaitez charger ces données lors du chargement des états, exécutez la requête suivante.

    UPDATE tiger.loader_lookuptables SET load = true WHERE load = false AND lookup_name IN('tract', 'bg', 'tabblock20');

    Autrement, il est possible de charger juste ces tables après le chargement des données sur les états en utilisant le Loader_Generate_Census_Script

  12. Pour chaque état dont vous voulez charger les données, générez un script d'état Loader_Generate_Script.

    [Warning]

    NE GÉNÉREZ PAS le script d'état avant d'avoir chargé les données de nation, car le script d'état utilise la liste des comtés chargés par le script de nation.

  13. psql -c "SELECT Loader_Generate_Script(ARRAY['MA'], 'debbie')" -d geocoder -tA > /gisdata/ma_load.sh
  14. Lancez alors les lignes de commande générées.

    cd /gisdata
    sh ma_load.sh
  15. Après le chargement des données, ou lors d'une pause dans le chargement, il peut être utile de lancer analyze sur toutes les tables tiger pour mettre à jour les statistiques (y compris les statistiques héritées)

    SELECT install_missing_indexes();
    vacuum (analyze, verbose) tiger.addr;
    vacuum (analyze, verbose) tiger.edges;
    vacuum (analyze, verbose) tiger.faces;
    vacuum (analyze, verbose) tiger.featnames;
    vacuum (analyze, verbose) tiger.place;
    vacuum (analyze, verbose) tiger.cousub;
    vacuum (analyze, verbose) tiger.county;
    vacuum (analyze, verbose) tiger.state;
    vacuum (analyze, verbose) tiger.zcta5;
    vacuum (analyze, verbose) tiger.zip_lookup_base;
    vacuum (analyze, verbose) tiger.zip_state;
    vacuum (analyze, verbose) tiger.zip_state_loc;

2.4.2. Utilisation de l'Extension Address Standardizer avec le Geocodeur Tiger

Une des plaintes les plus récurrentes concerne la fonction Normalize_Address, qui normalise l'adresse avant de la géocoder. La normalisation est loin d'être parfaite, et corriger ces imperfections consomme énormément de ressources. Par conséquent, nous avons intégré un autre projet qui a un moteur de standardisation d'adresses bien meilleur. Pour utiliser ce nouveau address_standardizer, compilez l'extension en suivant Section 2.3, “Installation et utilisation de l'extension address standardize” et installez l'extension dans votre base de données.

Une fois que vous avez installé cette extension dans la même base de données où vous avez installé postgis_tiger_geocoder, vous pouvez utiliser Pagc_Normalize_Address à la place de Normalize_Address. Cette extension ne dépend pas de Tiger, et peut donc être utilisée avec d'autres sources de données telles que des adresses internationales. L'extension de géocodage Tiger est installée avec ses propres versions spécifiques de rules table ( tiger.pagc_rules) , gaz table (tiger.pagc_gaz), et lex table (tiger.pagc_lex). Vous pouvez les améliorer et ajouter des règles pour avoir de meilleurs résultats de géocodage pour vos besoins spécifiques.

2.4.3. Outils nécessaires pour charger des données tiger

Le processus de chargement télécharge les données du site web census pour respectivement les fichiers nation, état demandé, extrait les fichiers, puis charge chaque état dans son ensemble de tables état. Chaque table state hérite de la table définie dans le schéma tiger, il est suffisant d'interroger ces tables pour accéder à toutes les données et supprimer un ensemble de table state n'importe quand en utilisant Drop_State_Tables_Generate_Script si vous devez recharger un état ou si vous en avez plus besoin.

Dans l'objectif de charger des données vous avez besoin des outils suivants :

  • Un outils pour décompresser les fichiers zip du site web census.

    Pour les systèmes Unix-like : un exécutable unzip qui est habituellement installé sur la plupart des plateformes Unix-like.

    Pour Windows, 7-zip qui est un outils de compression/décompression libre, vous pouvez le récupérer à partir de http://www.7-zip.org/

  • La commande shp2pgsql qui est installé par défaut quand vous installez PostGIS.

  • wget qui est un outil de récupération de lien habituellement installé sur les systèmes Unix/Linux.

    Si vous êtes sous Windows, vous pouvez obtenir des binaires pré-compilés à partir de http://gnuwin32.sourceforge.net/packages/wget.htm

Si vous mettez à jour depuis tiger_2010, vous aurez besoin d'abord de générer et exécuter le Drop_Nation_Tables_Generate_Script. Avant de charger les données d'états, vous devez charger les données de nation via Loader_Generate_Nation_Script. Celui-ci va générer un script de chargement pour vous. Loader_Generate_Nation_Script est une étape à exécuter une seule fois, pour la mises à jour (depuis des données tiger précédentes) ou pour de nouvelles installations.

Pour charger les données d'états, voir Loader_Generate_Script pour générer un script pour charger les données pour votre plateforme et les états que vous souhaitez. Note : vous pouvez les charger peu à peu, vous n'avez pas besoin de tout charger d'un coup. Vous pouvez les charger lorsque vous en avez besoin.

Après que les états que vous désirez aient été chargé, assurez vous de lancer la commande :

SELECT install_missing_indexes();

comme décrit dans Install_Missing_Indexes.

Pour tester que les choses fonctionnent comme elles le devraient, essayez de lancer un géocodage sur une adresse de votre état en utilisant Geocode

2.4.4. Mise à jour du géocoder Tiger et de ses données

Tout d'abord, mettez à jour l'extension postgis_tiger_geocoder en exécutant :

ALTER EXTENSION postgis_tiger_geocoder UPDATE;

Puis supprimez toutes les tables nation et chargez les nouvelles. Générez un script de suppression avec la requête SQL comme détaillée dans Drop_Nation_Tables_Generate_Script

SELECT drop_nation_tables_generate_script();

Lancement des requêtes SQL de suppression générées.

Générez un script de chargement des pays avec la requête SELECT comme détaillé dans Loader_Generate_Nation_Script

Pour windows

SELECT loader_generate_nation_script('windows'); 

Pour unix/linux

SELECT loader_generate_nation_script('sh');

Reportez-vous à Section 2.4.1, “Tiger Geocoder Activation de votre base de données PostGIS” pour savoir comment exécuter le script de génération. Cette opération ne doit être effectuée qu'une seule fois.

[Note]

Vous pouvez avoir un mix de différentes années dans vos tables d'états et vous pouvez les mettre à jour indépendamment. Avant de mettre à jour un état, vous devez d'abord supprimer l'année précédente dans les tables d'états pour cet état en utilisant Drop_State_Tables_Generate_Script.

2.5. Problèmes courants pendant l'installation

Il y a plusieurs choses à vérifier quand votre installation ou mise à jour ne va pas dans la direction souhaitée.

  1. Vérifiez que vous avez installé PostgreSQL 12 ou plus récent et que vous êtes en train de compiler avec la même version du code source de PostgreSQL que la version qui fonctionne. Un mélange peut arriver lorsque votre distribution (Linux) a déjà une version de PostgreSQL installée ou que vous avez oublié que vous avez déjà installée une version. PostGIS fonctionnera uniquement avec PostgreSQL 12 ou plus récent, et des messages d'erreurs étranges et inhabituelles en résultera si vous utilisez une version plus ancienne. Pour vérifier la version de PostgreSQL qui fonctionne, connectez vous à la base en utilisant psql et lancez la requête :

    SELECT version();

    Si vous utilisez une distribution basé sur les RPM, vous pouvez vérifier l'existence de paquets pré-installés en utilisant la commande rpm comme suit : rpm -qa | grep postgresql

  2. Si votre mise à jour plante, assurez vous de la présence de PostGIS dans la nouvelle base de données.

    SELECT postgis_full_version();

Vérifiez également que le script configure a correctement détecté les chemins et versions de PostgreSQL, de la bibliothèque Proj.4 et de la blibliothèque GEOS.

  1. La sortie du configure est utilisée pour générer le fichier postgis_config.h. Vérifiez que les variables POSTGIS_PGSQL_VERSION, POSTGIS_PROJ_VERSION et POSTGIS_GEOS_VERSION ont été définies correctement.

Chapter 3. Administration de PostGIS

3.1. Optimisation des performances

Le réglage des performances de PostGIS est similaire à celui de n'importe quelle charge de travail PostgreSQL. La seule considération supplémentaire est que les géométries et les rasters sont généralement de grande taille, donc les optimisations liées à la mémoire ont généralement plus d'impact sur PostGIS que sur d'autres types de requêtes PostgreSQL.

Pour plus de détails sur l'optimisation de PostgreSQL, reportez-vous à Tuning your PostgreSQL Server.

Pour PostgreSQL 9.4+, la configuration peut être définie au niveau du serveur sans toucher à postgresql.conf ou postgresql.auto.conf en utilisant la commande ALTER SYSTEM.

ALTER SYSTEM SET work_mem = '256MB';
-- this forces non-startup configs to take effect for new connections
SELECT pg_reload_conf();
-- show current setting value
-- use SHOW ALL to see all settings
SHOW work_mem;

En plus des paramètres de Postgres, PostGIS a quelques paramètres personnalisés qui sont listés dans Section 7.22, “Variables PostGIS GUC (Grand Unified Custom Variables)”.

3.1.1. Démarrage

Ces paramètres sont configurés dans postgresql.conf :

constraint_exclusion

  • Valeur par défaut : partition

  • Ceci est généralement utilisé pour le partitionnement des tables. La valeur par défaut est "partition", ce qui est idéal pour PostgreSQL 8.4 et plus car cela force le planificateur à n'analyser les tables pour la prise en compte des contraintes que si elles sont dans une hiérarchie héritée et à ne pas payer de pénalité au planificateur dans le cas contraire.

shared_buffers

  • Valeur par défaut : ~128MB dans PostgreSQL 9.6

  • Réglez-le à environ 25 à 40 % de la mémoire vive disponible. Sous Windows, il se peut que vous ne puissiez pas définir une valeur aussi élevée.

max_worker_processes Ce paramètre n'est disponible que pour PostgreSQL 9.4+. Pour PostgreSQL 9.6+, ce paramètre a une importance supplémentaire car il contrôle le nombre maximum de processus que vous pouvez avoir pour les requêtes parallèles.

  • Valeur par défaut : 8

  • Définit le nombre maximum de processus d'arrière-plan que le système peut prendre en charge. Ce paramètre ne peut être défini qu'au démarrage du serveur.

3.1.2. Temps d'exécution

work_mem - définit la taille de la mémoire utilisée pour les opérations de tri et les requêtes complexes

  • Valeur par défaut : 1-4MB

  • Ajustement pour les grandes bases de données, les requêtes complexes, beaucoup de RAM

  • Ajuster à la baisse pour de nombreux utilisateurs simultanés ou une faible mémoire vive.

  • Si vous avez beaucoup de mémoire vive et peu de développeurs :

    SET work_mem TO '256MB';

maintenance_work_mem - la taille de la mémoire utilisée pour VACUUM, CREATE INDEX, etc.

  • Valeur par défaut : 16-64MB

  • Généralement trop faible - immobilise les Entrées/Sorties, bloque les objets pendant l'échange de mémoire

  • Nous recommandons 32MB à 1GB sur les serveurs de production avec beaucoup de RAM, mais cela dépend du nombre d'utilisateurs simultanés. Si vous avez beaucoup de RAM et peu de développeurs :

    SET maintenance_work_mem TO '1GB';

max_parallel_workers_per_gather

Ce paramètre n'est disponible que pour PostgreSQL 9.6+ et n'affecte que PostGIS 2.3+, puisque seul PostGIS 2.3+ supporte les requêtes parallèles. Si ce paramètre est supérieur à 0, certaines requêtes telles que celles impliquant des fonctions de relation comme ST_Intersects peuvent utiliser plusieurs processus et s'exécuter plus de deux fois plus rapidement. Si vous avez beaucoup de processeurs à disposition, vous devriez changer la valeur de ce paramètre pour autant de processeurs que vous avez. Assurez-vous également d'augmenter max_worker_processes à une valeur au moins égale à ce nombre.

  • Valeur par défaut : 0

  • Définit le nombre maximum de workers qui peuvent être démarrés par un seul nœud Gather. Les workers parallèles sont pris dans le pool de processus établi par max_worker_processes. Notez que le nombre de workers demandé peut ne pas être disponible au moment de l'exécution. Dans ce cas, le plan s'exécutera avec moins de workers que prévu, ce qui peut s'avérer inefficace. La définition de cette valeur à 0, qui est la valeur par défaut, désactive l'exécution parallèle des requêtes.

3.2. Configurer la prise en charge du raster

Si vous activez la prise en charge du raster, vous devriez lire ce qui suit afin de bien la configurer.

À partir de PostGIS 2.1.3, tous les pilotes raster, et la prise en charge des rasters hors-connexion (out-of-db) est désactivé par défaut. Pour les activer, vous devez définir les variables d'environnement suivantes dans l'environnement du serveur : POSTGIS_GDAL_ENABLED_DRIVERS and POSTGIS_ENABLE_OUTDB_RASTERS. Depuis PostGIS 2.2, vous pouvez utiliser la méthode plus générique en définissant les Section 7.22, “Variables PostGIS GUC (Grand Unified Custom Variables)” correspondantes.

Si vous souhaitez activer le raster hors connexion :

POSTGIS_ENABLE_OUTDB_RASTERS=1

Si la variable a n'importe quelle autre valeur, ou si elle n'a pas de valeur, le support du raster hors-connexion sera désactivé.

Pour utiliser tous les pilotes GDAL disponibles dans votre installation GDAL, définissez la variable d'environnement via

POSTGIS_GDAL_ENABLED_DRIVERS=ENABLE_ALL

Si vous souhaitez activer une liste de pilotes spécifiques, définissez la variable d'environnement via :

POSTGIS_GDAL_ENABLED_DRIVERS="GTiff PNG JPEG GIF XYZ"
[Note]

Si vous êtes sous Windows, ne pas mettre de guillemets autour de la liste des pilotes

La définition des variables d'environnement dépend de votre système d'exploitation. Sous Ubuntu ou Debian avec PostgreSQL installé via apt-postgresql, la méthode conseillée est d'éditer le fichier de configuration /etc/postgresql/10/main/environment où 10 est la version de PostgreSQL et main est le groupe de bases de données (cluster).

Sous Windows, si vous fonctionnez en tant que service, vous pouvez définir des variables système auxquelles vous pouvez accéder, sous Windows 7, en cliquant avec le bouton droit de la souris sur Ordinateur ->Propriétés - Paramètres système avancés ou, dans l'explorateur, en naviguant jusqu'à Panneau de configuration - Tous les éléments du panneau de configuration - Système. Cliquez ensuite sur Advanced System Settings ->Advanced->Environment Variables et ajoutez de nouvelles variables système.

Après avoir changé les variables d'environnement, vous devrez redémarrer le service PostgreSQL pour prendre en compte les changements.

3.3. Création de bases de données spatiales

3.3.1. Base de données spatiale en utilisant EXTENSION

Si vous utilisez PostgreSQL 9.1+ et avez compilé et installé les modules extensions/postgis, vous pouvez transformer une base de données en base de données spatiale en utilisant le mécanisme EXTENSION.

L'extension cœur postgis inclus le support des types geometry et geography, la table spatial_ref_sys ainsi que toutes les fonctions et commentaires. Les supports de raster et topologie sont fournis par des extensions dédiées.

Exécutez les requêtes SQL suivantes dans la base de données où vous souhaitez activer le support spatial :

CREATE EXTENSION IF NOT EXISTS plpgsql;
      CREATE EXTENSION postgis;
      CREATE EXTENSION postgis_raster; -- OPTIONAL
      CREATE EXTENSION postgis_topology; -- OPTIONAL

3.3.2. Base de données spatiale sans utiliser EXTENSION (non recommandé)

[Note]

Cette méthode n'est en générale nécessaire que si vous ne pouvez pas ou ne voulez pas que PostGIS soit installé dans le répertoire des extensions PostgreSQL (par exemple pour des tests, du développement, ou dans un environnement restreint).

L'ajout des objets et définitions des fonctions PostGIS dans votre base de données se fait en chargeant plusieurs fichiers sql présents dans [prefix]/share/contrib, cet emplacement est celui qui a été défini durant la phase de compilation.

Les objets au cœur de PostGIS (types geometry et geography, et les fonctions associées) sont dans le script postgis.sql. Les objets raster sont dans le script rtpostgis.sql. Les objets de topologie sont dans le script topology.sql.

Pour avoir la liste complète des définitions des systèmes de coordonnées EPSG, vous pouvez aussi charger le script spatial_ref_sys.sql pour remplir la table spatial_ref_sys. Cela permettre d'utiliser la fonction ST_Transform() pour effectuer des reprojections sur les géométries.

Si vous souhaitez ajouter les commentaires sur les fonctions PostGIS, vous pouvez les trouver dans le script postgis_comments.sql. Vous pouvez accéder aux commentaires d'une fonction en tapant \dd [nom_de_la_fonction] depuis un terminal psql.

Exécutez les commandes Shell suivantes dans votre terminal :

DB=[yourdatabase]
    SCRIPTSDIR=`pg_config --sharedir`/contrib/postgis-3.4/

    # Core objects
    psql -d ${DB} -f ${SCRIPTSDIR}/postgis.sql
    psql -d ${DB} -f ${SCRIPTSDIR}/spatial_ref_sys.sql
    psql -d ${DB} -f ${SCRIPTSDIR}/postgis_comments.sql # OPTIONAL

    # Raster support (OPTIONAL)
    psql -d ${DB} -f ${SCRIPTSDIR}/rtpostgis.sql
    psql -d ${DB} -f ${SCRIPTSDIR}/raster_comments.sql # OPTIONAL

    # Topology support (OPTIONAL)
    psql -d ${DB} -f ${SCRIPTSDIR}/topology.sql
    psql -d ${DB} -f ${SCRIPTSDIR}/topology_comments.sql # OPTIONAL

3.4. Mise à jour des bases de données spatiales

La mise à jour des bases de données spatiales existantes peut s'avérer délicate car elle nécessite le remplacement ou l'introduction de nouvelles définitions d'objets PostGIS.

Malheureusement, toutes les définitions ne peuvent pas être facilement remplacées dans une base de données active, de sorte que la meilleure solution consiste parfois à effectuer un processus de dump/rechargement.

PostGIS propose une procédure SOFT UPGRADE pour les versions mineures ou les corrections de bugs, et une procédure HARD UPGRADE pour les versions majeures.

Avant d'essayer de mettre à jour PostGIS, il est toujours utile de sauvegarder vos données. Si vous utilisez l'option -Fc pour pg_dump, vous serez toujours en mesure de restaurer le dump lors d'un HARD UPGRADE.

3.4.1. Mise à niveau progressive (Soft upgrade)

Si vous avez installé votre base de données en utilisant des extensions, vous devrez également mettre à jour en utilisant le modèle d'extension. Si vous avez installé votre base de données à l'aide de l'ancien script SQL, il vous est conseillé de passer à l'extension car le script n'est plus pris en charge.

3.4.1.1. Mise à niveau progressive (Soft upgrade) 9.1+ utilisant des extensions

Si vous avez installé PostGIS à l'origine avec des extensions, vous devez également effectuer une mise à jour en utilisant des extensions. Faire une mise à jour mineure avec les extensions est assez facile.

Si vous utilisez PostGIS 3 ou une version supérieure, vous devez utiliser la fonction PostGIS_Extensions_Upgrade pour passer à la dernière version que vous avez installée.

SELECT postgis_extensions_upgrade();

Si vous utilisez PostGIS 2.5 ou une version inférieure, procédez comme suit :

ALTER EXTENSION postgis UPDATE;
SELECT postgis_extensions_upgrade();
-- This second call is needed to rebundle postgis_raster extension
SELECT postgis_extensions_upgrade();

Si plusieurs versions de PostGIS sont installées et que vous ne souhaitez pas mettre à niveau vers la dernière version, vous pouvez spécifier explicitement la version comme suit :

ALTER EXTENSION postgis UPDATE TO "3.6.0dev";
ALTER EXTENSION postgis_topology UPDATE TO "3.6.0dev";

Si vous obtenez un message d'erreur du type :

No migration path defined for … to 3.6.0dev

Vous devrez alors sauvegarder votre base de données, en créer une nouvelle comme décrit dans Section 3.3.1, “Base de données spatiale en utilisant EXTENSION”, puis restaurer votre sauvegarde sur cette nouvelle base de données.

Si vous obtenez un message du type :

Version "3.6.0dev" of extension "postgis" is already installed

Dans ce cas, tout est déjà à jour et vous pouvez l'ignorer en toute sécurité. Sauf vous essayez de passer d'une version de développement à la suivante (qui ne reçoit pas de nouveau numéro de version) ; dans ce cas, vous pouvez ajouter "next" à la chaîne de caractères de la version, et la prochaine fois, vous devrez à nouveau supprimer le suffixe "next" :

ALTER EXTENSION postgis UPDATE TO "3.6.0devnext";
ALTER EXTENSION postgis_topology UPDATE TO "3.6.0devnext";
[Note]

Si vous avez installé PostGIS à l'origine sans spécifier de version, vous pouvez souvent ignorer la réinstallation de l'extension postgis avant la restauration puisque la sauvegarde a juste exécuté CREATE EXTENSION postgis et récupère donc la dernière version la plus récente lors de la restauration.

[Note]

Si vous mettez à jour l'extension PostGIS à partir d'une version antérieure à 3.0.0, vous aurez une nouvelle extension postgis_raster que vous pouvez abandonner en toute sécurité, si vous n'avez pas besoin du support raster. Vous pouvez abandonner l'extension comme suit :

DROP EXTENSION postgis_raster;

3.4.1.2. Mise à niveau progressive (Soft Upgrade) Pre 9.1+ ou sans extensions

Cette section ne s'applique qu'à ceux qui ont installé PostGIS sans utiliser d'extensions. Si vous avez des extensions et que vous essayez de faire une mise à jour avec cette approche, vous obtiendrez des messages comme :

can't drop … because postgis extension depends on it

NOTE : si vous passez de PostGIS 1.* à PostGIS 2.* ou de PostGIS 2.* antérieur à r7409, vous ne pouvez pas utiliser cette procédure mais devrez plutôt faire une HARD UPGRADE.

Après la compilation et l'installation (make install), vous devriez trouver un ensemble de fichiers *_upgrade.sql dans les dossiers d'installation. Vous pouvez les lister avec :

ls `pg_config --sharedir`/contrib/postgis-3.6.0dev/*_upgrade.sql

Chargez-les tous à tour de rôle, en commençant par postgis_upgrade.sql.

psql -f postgis_upgrade.sql -d your_spatial_database

La même procédure s'applique aux extensions raster, topologie et sfcgal, avec des fichiers de mise à niveau nommés respectivement rtpostgis_upgrade.sql, topology_upgrade.sql et sfcgal_upgrade.sql. Si vous en avez besoin :

psql -f rtpostgis_upgrade.sql -d your_spatial_database
psql -f topology_upgrade.sql -d your_spatial_database
psql -f sfcgal_upgrade.sql -d your_spatial_database

Il est conseillé de passer à une installation basée sur l'extension en lançant

psql -c "SELECT postgis_extensions_upgrade();"
[Note]

Si vous ne trouvez pas le postgis_upgrade.sql spécifique à la mise à niveau de votre version, vous utilisez une version trop ancienne pour une mise à niveau progressive (Soft Upgrade) et vous devez faire une HARD UPGRADE.

La fonction PostGIS_Full_Version devrait vous informer de la nécessité d'exécuter ce type de mise à niveau à l'aide d'un message "procs need upgrade".

3.4.2. Mise à niveau complète (Hard upgrade)

Par HARD UPGRADE, nous entendons un dump/recharge complet des bases de données compatibles avec PostGIS. Vous avez besoin d'une mise à jour complète lorsque le stockage interne des objets PostGIS change ou lorsque la mise à jour progressive (Soft upgrade) n'est pas possible. L'annexe Release Notes indique pour chaque version si vous avez besoin d'un dump/recharge (HARD UPGRADE) pour effectuer la mise à jour.

Le processus de dump/rechargement est assisté par le script postgis_restore.pl qui se charge de sauter du dump toutes les définitions qui appartiennent à PostGIS (y compris les anciennes), ce qui vous permet de restaurer vos schémas et vos données dans une base de données où PostGIS est installé sans obtenir d'erreurs de symboles dupliqués ou d'avancer des objets obsolètes.

Des instructions supplémentaires pour les utilisateurs de Windows sont disponibles sur Windows Hard upgrade.

La procédure est la suivante :

  1. Créer un dump au format personnalisé de la base de données que vous souhaitez mettre à jour (appelons-le olddb) et inclure des blobs binaires (-b) et une sortie verbose (-v). L'utilisateur peut être le propriétaire de la base de données, il n'a pas besoin d'être le super utilisateur postgres.

    pg_dump -h localhost -p 5432 -U postgres -Fc -b -v -f "/somepath/olddb.backup" olddb
  2. Effectuez une nouvelle installation de PostGIS dans une nouvelle base de données - nous appellerons cette base de données newdb. Veuillez vous référer à Section 3.3.2, “Base de données spatiale sans utiliser EXTENSION (non recommandé)” et Section 3.3.1, “Base de données spatiale en utilisant EXTENSION” pour les instructions sur la façon de procéder.

    Les entrées spatial_ref_sys trouvées dans votre dump seront restaurées, mais elles ne remplaceront pas les entrées existantes dans spatial_ref_sys. Cela permet de s'assurer que les corrections du jeu officiel seront correctement propagées dans les bases de données restaurées. Si, pour une raison quelconque, vous souhaitez vraiment que vos propres entrées standard soient remplacées, ne chargez pas le fichier spatial_ref_sys.sql lors de la création de la nouvelle base de données.

    Si votre base de données est très ancienne ou si vous savez que vous avez utilisé des fonctions dépréciées depuis longtemps dans vos vues et fonctions, vous devrez peut-être charger legacy.sql pour que toutes vos fonctions, vues, etc. reviennent correctement. Ne le faites que si c'est _vraiment_ nécessaire. Envisagez plutôt de mettre à jour vos vues et fonctions avant de faire le dumping, si possible. Les fonctions dépréciées peuvent être supprimées plus tard en chargeant uninstall_legacy.sql.

  3. Restaurez votre sauvegarde dans votre nouvelle base de données newdb à l'aide de postgis_restore. Les erreurs inattendues, s'il y en a, seront imprimées par psql dans le flux d'erreurs standard. Conservez un journal de ces erreurs.

    postgis_restore "/somepath/olddb.backup" | psql -h localhost -p 5432 -U postgres newdb 2> errors.txt

Des erreurs peuvent survenir dans les cas suivants :

  1. Certaines de vos vues ou fonctions utilisent des objets PostGIS obsolètes. Pour y remédier, vous pouvez essayer de charger le script legacy.sql avant la restauration ou vous devrez restaurer vers une version de PostGIS qui contient encore ces objets et réessayer une migration après le portage de votre code. Si la méthode legacy.sql fonctionne pour vous, n'oubliez pas de corriger votre code pour arrêter d'utiliser les fonctions dépréciées et de les supprimer en chargeant uninstall_legacy.sql.

  2. Certains enregistrements personnalisés de spatial_ref_sys dans le fichier dump ont une valeur SRID invalide. Les valeurs SRID valides sont supérieures à 0 et inférieures à 999000. Les valeurs comprises entre 999000 et 999999 sont réservées à un usage interne, tandis que les valeurs > 999999 ne peuvent pas être utilisées du tout. Tous vos enregistrements personnalisés avec des SRID invalides seront conservés, avec les valeurs > 999999 déplacées dans la plage réservée, mais la table spatial_ref_sys perdrait une contrainte de contrôle qui protège cet invariant et peut-être aussi sa clé primaire (lorsque plusieurs SRIDS invalides sont convertis en la même valeur SRID réservée).

    Pour résoudre ce problème, vous devez copier votre SRS personnalisé vers un SRID avec une valeur valide (peut-être dans la plage 910000..910999), convertir toutes vos tables vers le nouveau SRID (voir UpdateGeometrySRID), supprimer l'entrée invalide de spatial_ref_sys et reconstruire le(s) contrôle(s) avec :

    ALTER TABLE spatial_ref_sys ADD CONSTRAINT spatial_ref_sys_srid_check check (srid 
    > 0 AND srid < 999000 );
    
    ALTER TABLE spatial_ref_sys ADD PRIMARY KEY(srid));
        

    Si vous mettez à jour une ancienne base de données contenant une cartographie française IGN , vous aurez probablement des SRID hors limites et vous verrez, lors de l'importation de votre base de données, des problèmes comme celui-ci :

    WARNING: SRID 310642222 converted to 999175 (in reserved zone)

    Dans ce cas, vous pouvez essayer les étapes suivantes : d'abord supprimer complètement l'IGN du sql qui résulte de postgis_restore. Ainsi, après avoir exécuté :

    postgis_restore "/somepath/olddb.backup" > olddb.sql

    Exécutez cette commande :

    grep -v IGNF olddb.sql > olddb-without-IGN.sql

    Créez ensuite votre newdb, activez les extensions Postgis nécessaires, et insérez correctement l'IGN du système français avec : ce script Après ces opérations, importez vos données :

    psql -h localhost -p 5432 -U postgres -d newdb -f olddb-without-IGN.sql  2> errors.txt

Chapter 4. Gestion des données

4.1. Modèle de données spatiales

4.1.1. Géométrie OGC

L'Open Geospatial Consortium (OGC) a développé le standard Simple Features Access (SFA) pour fournir un modèle de données géospatiales. Ce standard définit le type spatial Geometry, ainsi que les opérations pour manipuler et transformer des géométries, et permettre des tâches d'analyses spatiales. PostGIS implémente le modèle OGC Geometry sous forme de types PostgreSQL geometry et geography.

Geometry est un type abstrait. Les valeurs géométriques utilisent les sous-types concrets, qui représentent les diverses formes géométriques. Ces types incluent les types atomiques Point, LineString, LinearRing et Polygon, ainsi que les types de collections MultiPoint, MultiLineString, MultiPolygon et GeometryCollection. Le standard Simple Features Access - Part 1: Common architecture v1.2.1 ajoute les sous-types pour les structures PolyhedralSurface, Triangle et TIN.

Geometry représente des formes dans le plan cartésien en 2 dimensions. Les types PolyhedralSurface, Triangle, et TIN peuvent également représenter des formes en 3 dimensions. La taille et la localisation des formes sont spécifiées par leurs coordonnées. Chaque coordonnées a une dimension X et une Y, qui déterminent sa position sur le plan. Les formes sont construites à partir de points ou de segments. Les points sont spécifiés par une seul coordonnée ; les segments par deux coordonnées.

Les coordonnées peuvent inclure des valeurs pour les dimensions optionnelles Z et M. La dimension Z est souvent utilisée pour représenter l'élévation. La dimension M contient une mesure, qui représente par exemple le temps ou une distance. Si la dimension Z ou M est présente pour une valeur géométrique, elle doit être définie pour tous les points de la géométrie. Si une géométrie a une dimension Z ou M, la dimension de la coordonnée est 3D ; si elle a à la fois les dimension Z et M, la dimension de la coordonnée est 4D.

Les valeurs géométriques sont associées à un système de coordonnées de référence (SCR, ou en anglais spatial reference system, SRS), qui indique dans quel système de coordonnées les valeurs sont définies. Le SCR est identifié par un identifiant appelé SRID. Les unités sur les axes X et Y sont déterminées par ce système de coordonnées de référence. Dans un système planaire, les coordonnées X et Y représentent les distances respectivement selon l'Est et le Nord. Dans un système géodésique elles représentent la longitude et la latitude. L'identifiant SRID 0 représente un plan cartésien infini, sans unité sur ses axes. Voir Section 4.5, “Systèmes de référence spatiale”.

La dimension d'une géométrie est une propriété des types géométriques. Les types Point ont une dimension 0, les types linéaires ont une dimension 1, et les types polygonaux ont une dimension 2. Les collections ont la dimension de leur élément de plus grande dimension.

Une valeur géométrique peut être vide. Une valeur vide ne contient aucun vertex (pour les types de géométriques atomiques) ou aucun élément (pour les collections).

Une propriété important des valeurs géométriques est leur emprise spatiale (extent en anglais) ou leur boîte englobante (bounding box en anglais), que le modèle OGC nomme enveloppe (envelope). La boîte englobante est la boîte 2D ou 3D qui contient les coordonnées d'une géométrie. C'est une façon efficace de représenter l'emprise d'une géométrie dans un espace et de tester comment deux géométries interagissent.

Le modèle de géométrie permet d'évaluer les relations topologiques, telles que décrites dans Section 5.1.1, “Modèle à 9 intersections dimensionnellement étendu”. Pour supporter cela, les concepts de intérieur (interior en anglais), frontière (boundary en anglais) et extérieur (exterior en anglais) sont définis pour tous les types de géométries. Les géométries sont topologiquement fermées, donc elle contiennent toujours leur frontière. La dimension de la géométrie de la frontière est la dimension de la géométrie moins un.

Le modèle de géométrie OGC définie des règles de validité pour chaque type géométrique. Ces règles permettent de s'assurer que les valeurs géométriques représentent des situations réalistes (e.g. il est possible de définir un polygone avec un trou à l'extérieur, mais cela n'a pas de sens au niveau géométrique, et est donc invalide). PostGIS permet de stocker et de manipuler des valeurs géométriques invalides, ceci permet de les détecter et de les corriger si besoin. Voir Section 4.4, “Validation de la géométrie”

4.1.1.1. Point

Un objet de type Point est une géométrie de dimension 0, qui représente un seul point dans l'espace.

POINT (1 2)
POINT Z (1 2 3)
POINT ZM (1 2 3 4)

4.1.1.2. LineString

Le type LineString est une ligne, de dimension 1, formée par une séquence de segments linéaires contigus. Chaque segment est défini par deux points, l'extrémité d'un segment étant le point de départ du segment suivant. Un LineString valide au sens OGC a soit zéro, soit deux points ou plus, mais PostGIS permet d'avoir des LineStrings avec un seul point. LineStrings peuvent se croiser (auto-intersection). Un LineString peut être fermé si les points de début et fin sont les mêmes. Un LineString est dit simple s'il ne s'auto-intersecte pas.

LINESTRING (1 2, 3 4, 5 6)

4.1.1.3. LinearRing

Le type LinearRing définit un LineString qui est à la fois fermé et simple. Autrement dit, le premier et dernier points doivent être égaux, et la ligne ne doit pas s'auto-intersecter.

LINEARRING (0 0 0, 4 0 0, 4 4 0, 0 4 0, 0 0 0)

4.1.1.4. Polygon

Un polygone, de type Polygon est une région d'un plan, de dimension 2, délimité par une frontière extérieure (la coquille, shell en anglais) et zéro, une ou plusieurs frontières intérieures (trous, holes en anglais). Chaque frontière est un LinearRing.

POLYGON ((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0))

4.1.1.5. MultiPoint

Le type MultiPoint est une collection de Points.

MULTIPOINT ( (0 0), (1 2) )

4.1.1.6. MultiLineString

Le type MultiLineString est une collection de LineStrings. Un MultiLineString est fermé si tous ses éléments sont fermés.

MULTILINESTRING ( (0 0,1 1,1 2), (2 3,3 2,5 4) )

4.1.1.7. MultiPolygon

Un MultiPolygon est une collection de Polygons, non superposés et non adjacents. Les polygones de la collection peuvent se toucher, mais uniquement en un nombre fini de points.

MULTIPOLYGON (((1 5, 5 5, 5 1, 1 1, 1 5)), ((6 5, 9 1, 6 1, 6 5)))

4.1.1.8. GeometryCollection

Le type GeometryCollection représente une collection hétérogène de géométries (i.e. de types différents).

GEOMETRYCOLLECTION ( POINT(2 3), LINESTRING(2 3, 3 4))

4.1.1.9. PolyhedralSurface

Le type PolyhedralSurface modélise une surface polyédrique, sous la forme d'une collection de faces qui partagent des arêtes. Chaque face est un Polygon plan. Si les coordonnées du Polygon ont une dimension Z, alors la surface est de dimension 3.

POLYHEDRALSURFACE Z (
  ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
  ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
  ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
  ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
  ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)),
  ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )

4.1.1.10. Triangle

Un Triangle est un polygone définit par trois sommets non colinéaires. Un Triangle étant un Polygon, et donc est fermé, il est définit par quatre coordonnées, la première et la dernière étant égales.

TRIANGLE ((0 0, 0 9, 9 0, 0 0))

4.1.1.11. TIN

Un TIN est une collection de Triangles non superposés, représentant un réseau irrégulier triangulé (Triangulated Irregular Network).

TIN Z ( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )

4.1.2. SQL/MM Part 3 - Courbes

La norme ISO/IEC 13249-3 SQL Multimedia - Spatial (SQL/MM) étend l'OGC SFA pour définir des sous-types de géométrie contenant des courbes avec des arcs circulaires. Les types SQL/MM prennent en charge les coordonnées 3DM, 3DZ et 4D.

[Note]

Toutes les comparaisons en flottant dans l'implémentation de SQL-MM sont effectuées avec une tolérance spécifiée, actuellement 1E-8.

4.1.2.1. CircularString

CircularString est le type de courbe de base, similaire à LineString dans le monde linéaire. Un segment d'arc unique est spécifié par trois points : les points de départ et d'arrivée (premier et troisième) et un autre point de l'arc. Pour spécifier un cercle fermé, les points de départ et d'arrivée sont les mêmes et le point central est le point opposé sur le diamètre du cercle (qui est le centre de l'arc). Dans une séquence d'arcs, le point final de l'arc précédent est le point de départ de l'arc suivant, tout comme les segments d'une LineString. Cela signifie qu'une CircularString doit avoir un nombre impair de points supérieur à 1.

CIRCULARSTRING(0 0, 1 1, 1 0)

CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0)

4.1.2.2. CompoundCurve

Une CompoundCurve est une courbe continue unique qui peut contenir à la fois des segments d'arc de cercle et des segments linéaires. Cela signifie qu'en plus d'avoir des composantes bien formées, le point final de chaque composante (sauf la dernière) doit coïncider avec le point de départ de la composante suivante.

COMPOUNDCURVE( CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))

4.1.2.3. CurvePolygon

Un CurvePolygon est semblable à un polygone, avec un anneau extérieur et zéro ou plusieurs anneaux intérieurs. La différence est qu'un anneau peut être une CircularString ou une CompoundCurve ainsi qu'une LineString.

Depuis PostGIS 1.4, PostGIS prend en charge les courbes composées dans un polygone de courbe.

CURVEPOLYGON(
  CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),
  (1 1, 3 3, 3 1, 1 1) )

Exemple : Un PolygoneCourbe dont l'enveloppe est définie par une CompoundCurve contenant une CircularString et une LineString, et dont le trou est défini par une CircularString

CURVEPOLYGON(
  COMPOUNDCURVE( CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),
                 (4 3, 4 5, 1 4, 0 0)),
  CIRCULARSTRING(1.7 1, 1.4 0.4, 1.6 0.4, 1.6 0.5, 1.7 1) )

4.1.2.4. MultiCurve

Une MultiCurve est un ensemble de courbes qui peuvent inclure des LineStrings, des CircularStrings ou des CompoundCurves.

MULTICURVE( (0 0, 5 5), CIRCULARSTRING(4 0, 4 4, 8 4))

4.1.2.5. MultiSurface

Une MultiSurface est un ensemble de surfaces, qui peuvent être des polygones (linéaires) ou des polygones courbes.

MULTISURFACE(
  CURVEPOLYGON(
    CIRCULARSTRING( 0 0, 4 0, 4 4, 0 4, 0 0),
    (1 1, 3 3, 3 1, 1 1)),
  ((10 10, 14 12, 11 10, 10 10), (11 11, 11.5 11, 11 11.5, 11 11)))

4.1.3. WKT et WKB

La spécification OGC SFA définit deux formats pour représenter des valeurs géométriques : Well-Known Text (WKT) et Well-Known Binary (WKB). Ces deux formats incluent les informations sur le type d'objet et sur les coordonnées qui le définissent.

Well-Known Text (WKT) fournit un standard pour représenter de façon textuelle des données spatiales. Voici quelques exemples de représentations WKT :

  • POINT(0 0)

  • POINT Z (0 0 0)

  • POINT ZM (0 0 0 0)

  • POINT EMPTY

  • LINESTRING(0 0,1 1,1 2)

  • LINESTRING EMPTY

  • POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))

  • MULTIPOINT((0 0),(1 2))

  • MULTIPOINT Z ((0 0 0),(1 2 3))

  • MULTIPOINT EMPTY

  • MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))

  • MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))

  • GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4))

  • GEOMETRYCOLLECTION EMPTY

Des méthodes d'entrée/sortie en WKT sont fournies via les fonctions ST_AsText et ST_GeomFromText :

text WKT = ST_AsText(geometry);
geometry = ST_GeomFromText(text WKT, SRID);

Par exemple, une requête pour créer et insérer une objet spatial sous forme de WKT et avec un SRID :

INSERT INTO geotable ( geom, name )
  VALUES ( ST_GeomFromText('POINT(-126.4 45.32)', 312), 'A Place');

Well-Known Binary (WKB) fournit un moyen portable et sans perte de précision pour représenter des données spatiales sous la forme de données binaires (tableau d'octets). Voici quelques exemples de représentations WKB :

  • WKT : POINT(1 1)

    WKB : 0101000000000000000000F03F000000000000F03

  • WKT : LINESTRING (2 2, 9 9)

    WKB : 0102000000020000000000000000000040000000000000004000000000000022400000000000002240

Des méthodes d'entrée/sortie en WKB sont fournies via les fonctions ST_AsBinary et ST_GeomFromWKB :

bytea WKB = ST_AsBinary(geometry);
geometry = ST_GeomFromWKB(bytea WKB, SRID);

Par exemple, une requête pour créer et insérer une objet spatial sous forme de WKB :

INSERT INTO geotable ( geom, name )
  VALUES ( ST_GeomFromWKB('\x0101000000000000000000f03f000000000000f03f', 312), 'A Place');

4.2. Type de données Geometry

PostGIS implémente le modèle Simple Features de l'OGC via un type PostgreSQL geometry. Ce type représente tous les sous-types de géométries en utilisant un type interne (voir GeometryType et ST_GeometryType). Cela permet de modéliser les entités spatiales comme lignes de tables qui contiennent une colonne de type geometry.

Le type geometry est opaque, ce qui veut dire que tout accès est fait en appelant des fonctions sur les valeurs géométriques. Des fonctions permettent la création d'objets géométriques, l'accès et la mise à jour des champs internes, ainsi que le calcul de nouvelles valeurs géométriques. PostGIS supporte toutes les fonctions spécifiées par la spécification OGC Simple feature access - Part 2: SQL option (SFS), ainsi que de nombreuses autres. voir Chapter 7, Référence PostGIS pour une liste complète des fonctions disponibles.

[Note]

PostGIS respecte le standard SFA en préfixant toutes les fonctions spatiales par "ST_". Initialement, cela voulait dire "Spatial and Temporal" (Spatial et Temporel), mais l'aspect temporel du standard n'a pas été développé. À la place, ceci peut être interprété comme "Spatial Type" (Type Spatial).

La standard SFA spécifie que les objets spatiaux doivent inclure un identifiant de système de coordonnées de référence (SRID). Ce SRID est obligatoire lors de la création d'objets spatiaux pour l'insertion dans la base de données (mais peut être défini par défaut à 0). Voir ST_SRID et Section 4.5, “Systèmes de référence spatiale”

Pour optimiser les requêtes sur les géométries, PostGIS définit plusieurs types d'index spatiaux, ainsi que des opérateurs spatiaux pour les utiliser. Voir Section 4.9, “Index spatiaux” et Section 5.2, “Utilisation des index spatiaux” pour plus d'informations.

4.2.1. PostGIS EWKB et EWKT

Les spécifications OGC SFA ne supportaient initialement que les géométries 2D, et le SRID de la géométrie n'est pas inclut dans les représentations d'entrée/sortie. La spécification OGC SFA 1.2.1 (qui est alignée avec le standard ISO 19125) ajoute le support pour la 3D (ZYZ) et les mesures (XYM et XYZM), mais n'inclut toujours pas la valeur du SRID.

À cause de ces limitations, PostGIS définit les formats étendus EWKB ((Extended Well-Known Binary) et EWKT (Extended Well-Known Text). Ils supportent la 3D (XYZ et XYM) et 4D (XYZM) et incluent l'information de SRID. Le format EWKB incluant toutes les informations de la géométrie, cela permet à PostGIS d'utiliser ce format pour les enregistrements (e.g. dans les fichiers DUMP).

EWKB et EWKT sont utilisés pour les "formes canoniques" des objets spatiaux de PostGIS. En tant qu'entrée, la forme canonique pour les données binaires est EWKB ; pour les données textuelles EWKB et EWKT sont tous deux acceptés. Cela permet de créer des valeurs géométriques en transtypant une valeur textuelle en HEXEWKB ou EWKT vers une valeur géométrique en utilisant ::geometry. Pour la sortie, la forme canonique pour les données binaires est EWKB et HEXEWKB (hex-encoded EWKB) pour les données textuelles.

Par exemple, cette requête créé une géométrie en transtypant depuis une chaîne de caractères contenant du EKWT, et retourne sa valeur sous sa forme canonique en HEXEWKB :

SELECT 'SRID=4;POINT(0 0)'::geometry;
  geometry
  ----------------------------------------------------
  01010000200400000000000000000000000000000000000000

La sortie PostGIS EWKT a quelques différences avec le OGC WKT :

  • Pour les géométries 3DZ, le qualificatif Z est omis :

    OGC : POINT Z (1 2 3)

    EWKT : POINT (1 2 3)

  • Pour les géométries 3DM, le qualificatif M est inclus :

    OGC : POINT M (1 2 3)

    EWKT : POINTM (1 2 3)

  • Pour les géométries 4D, le qualificatif ZM est omis :

    OGC : POINT ZM (1 2 3 4)

    EWKT : POINT (1 2 3 4)

EWKT évite de sur-spécifier les dimensions et ainsi éviter les inconsistances possibles avec le format OGC/ISO, comme :

  • POINT ZM (1 1)

  • POINT ZM (1 1 1)

  • POINT (1 1 1 1)

[Caution]

Les formats étendus PostGIS sont des sur-ensembles des formats OGC, donc les représentations valides WKB/WKT sont aussi des représentations EWKB/EWKT valides. Cependant, cela pourrait changer à l'avenir, si l'OGC définit un format qui rentrerait en conflit avec la définition de PosGIS. Vous ne devriez donc PAS vous appuyer sur cette compatibilité !

Voici quelques exemples de représentations d'objets spatiaux sous forme EWKT :

  • POINT(0 0 0) -- XYZ

  • SRID=32632;POINT(0 0) -- XY avec SRID

  • POINTM(0 0 0) -- XYM

  • POINT(0 0 0 0) -- XYZM

  • SRID=4326;MULTIPOINTM(0 0 0,1 2 1) -- XYM avec SRID

  • MULTILINESTRING((0 0 0,1 1 0,1 2 1),(2 3 1,3 2 1,5 4 1))

  • POLYGON((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0))

  • MULTIPOLYGON(((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)),((-1 -1 0,-1 -2 0,-2 -2 0,-2 -1 0,-1 -1 0)))

  • GEOMETRYCOLLECTIONM( POINTM(2 3 9), LINESTRINGM(2 3 4, 3 4 5) )

  • MULTICURVE( (0 0, 5 5), CIRCULARSTRING(4 0, 4 4, 8 4) )

  • POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )

  • TRIANGLE ((0 0, 0 10, 10 0, 0 0))

  • TIN( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )

Des méthodes d'entrée/sortie sont fournies via les fonctions suivantes :

bytea EWKB = ST_AsEWKB(geometry);
text EWKT = ST_AsEWKT(geometry);
geometry = ST_GeomFromEWKB(bytea EWKB);
geometry = ST_GeomFromEWKT(text EWKT);

Par exemple, une requête pour créer et insérer une objet spatial sous forme de EWKT :

INSERT INTO geotable ( geom, name )
  VALUES ( ST_GeomFromEWKT('SRID=312;POINTM(-126.4 45.32 15)'), 'A Place' )

4.3. Type de données Geography

Le type de données PostGIS geography permet le support des entités spatiales utilisant un système de coordonnées géographique (parfois appelé géodésique, ou "latitude/longitude" ou "longitude/latitude"). Les coordonnées géographiques sont des coordonnées sphériques, exprimées en unités d'angle (degrés).

Le type geometry de PostGIS est lié à un plan. Ainsi, le chemin le plus court entre deux points sur un plan est la ligne droite. Les fonctions sur les types geometry (aires, distances, intersections, etc.) sont donc calculées en utilisant des lignes droites et les mathématiques cartésiennes. Cela permet des implémentations plus faciles et plus rapides à exécuter, mais cela devient imprécis lorsque la rotondité de la Terre entre en jeu.

Le type PostGIS geography repose sur un modèle sphérique. Le chemin le plus court entre deux points sur une sphère est l'arc de cercle. Les fonctions sur les types geography (aires, distances, intersections, etc.) sont donc calculées en utilisant des arcs de cercle sur une sphère. En prenant en compte la rotondité de la Terre, ces fonctions permettent d'avoir une meilleure précision.

Les mathématiques utilisées pour les calculs étant plus compliquées, moins de fonctions sont définies pour le type geography que pour le type geometry. De nouveaux algorithmes sont ajoutés au fur et à mesure des versions de PostGIS, donc le support du type geography s'étend petit à petit. Si une fonction n'est pas disponible, il est toutefois possible de convertir un type geography en geometry puis vice-versa.

Comme le type geometry, les données géographiques sont liées à un identifiant de système de coordonnées de référence (SRID). Tout système géodésique (reposant sur longitude/latitude) peut être utilisé, tant qu'il défini dans la table spatial_ref_sys. (Avant PostGIS 2.2, le type geography ne supportait que le SCR WGS 84 (SRID:4326)). Vous pouvez ajouter votre propre SCR géodésique, comme décrit dans Section 4.5.2, “Systèmes de référence spatiale définis par l'utilisateur”.

Pour tous les systèmes de coordonnées de référence, les unités des valeurs retournées par les fonctions de mesure (e.g. ST_Distance, ST_Length, ST_Perimeter, ST_Area) et le paramètre de distance de ST_DWithin sont en mètres.

4.3.1. Création de tables géographiques

Vous pouvez créer une table pour stocker des données géographiques en utilisant la requête SQL CREATE TABLE, avec une colonne de type geography. L'exemple suivant créé une table avec une colonne géographique pour stocker des lignes 2D dans un SCR géodésique WGS84 (SRID 4326) :

CREATE TABLE global_points (
    id SERIAL PRIMARY KEY,
    name VARCHAR(64),
    location geography(POINT,4326)
  );

Le type geography supporte deux modificateurs de type :

  • le modificateur de type spatial restreint le type de formes et dimensions de la colonne. Les valeurs permises pour le type spatial sont : POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION. Le type geography ne supporte pas les CURVEs, TINS, ni POLYHEDRALSURFACEs. Le modificateur permet de restreindre la dimension, en ajoutant les suffixes : Z, M ou ZM. Par exemple, un modificateur 'LINESTRINGM' permet uniquement de stocker des LineStrings en 3D, et traite la troisième dimension comme une mesure. De façon similaire, 'POINTZM' limite aux données 4D (XYZM).

  • le modificateur SRID restreint à un SCR spécifique. Si omis, le SRID 4326 (WGS84 géodésique) est utilisé, et tous les calculs sont effectués en utilisant WGS84.

Exemples de création de tables utilisant des colonnes géographiques :

  • Création d'une table avec une géographie POINT 2D avec le SRID par défaut 4326 (WGS84 longitude/latitude) :

    CREATE TABLE ptgeogwgs(gid serial PRIMARY KEY, geog geography(POINT) );
  • Création d'une table avec une géographie POINT 2D dans le CRS NAD83 longlat :

    CREATE TABLE ptgeognad83(gid serial PRIMARY KEY, geog geography(POINT,4269) );
  • Création d'une table avec une géographie POINT 3D (XYZ) avec le SCR explicite 4326 :

    CREATE TABLE ptzgeogwgs84(gid serial PRIMARY KEY, geog geography(POINTZ,4326) );
  • Création d'une table avec une géographie LINESTRING 2D avec le SRID par défaut 4326 :

    CREATE TABLE lgeog(gid serial PRIMARY KEY, geog geography(LINESTRING) );
  • Création d'une table avec une géographie POLYGON 2D avec le SRC 4267 (NAD 1927 long lat) :

    CREATE TABLE lgeognad27(gid serial PRIMARY KEY, geog geography(POLYGON,4267) );

Les colonnes géographiques sont enregistrées dans la vue système geography_columns. Vous pouvez effectuer un requête sur la vue geography_columns et vérifier que la table est bien listée :

SELECT * FROM geography_columns;

La création d'index spatiaux sur les colonnes de type geography fonctionne de la même manière qu'avec le type geometry. PostGIS va prendre en compte que le type de la colonne est GEOGRAPHY et créer un index sphérique au lieu d'un index planaire utilisé pour GEOMETRY.

-- Index the test table with a spherical index
CREATE INDEX global_points_gix ON global_points USING GIST ( location );

4.3.2. Utilisation des tables géographiques

Vous pouvez insérer des données dans des tables géographiques de la même façon qu'avec les géométries. Les données géométriques seront automatiquement transtypées en type geography si le SRID des données est 4326. Les formats EWKT et EWKB peuvent aussi être utilisés pour spécifier les valeurs géographiques.

-- Add some data into the test table
INSERT INTO global_points (name, location) VALUES ('Town', 'SRID=4326;POINT(-110 30)');
INSERT INTO global_points (name, location) VALUES ('Forest', 'SRID=4326;POINT(-109 29)');
INSERT INTO global_points (name, location) VALUES ('London', 'SRID=4326;POINT(0 49)');

Tout CRS géodésique (longitude/latitude) disponible dans la table spatial_ref_sys peut être utilisé comme SRID d'une géographie. L'utilisation d'un CRS non géodésique provoquera une erreur.

-- NAD 83 lon/lat
SELECT 'SRID=4269;POINT(-123 34)'::geography;
                    geography
----------------------------------------------------
 0101000020AD1000000000000000C05EC00000000000004140
-- NAD27 lon/lat
SELECT 'SRID=4267;POINT(-123 34)'::geography;
                    geography
----------------------------------------------------
 0101000020AB1000000000000000C05EC00000000000004140
-- NAD83 UTM zone meters - gives an error since it is a meter-based planar projection
SELECT 'SRID=26910;POINT(-123 34)'::geography;

ERROR:  Only lon/lat coordinate systems are supported in geography.

Les requêtes et les fonctions de mesure utilisent le mètre comme unité. Les paramètres de distance doivent être exprimés en mètres, et les valeurs de retours seront également en mètres (ou en mètres carré pour les surfaces).

-- A distance query using a 1000km tolerance
SELECT name FROM global_points WHERE ST_DWithin(location, 'SRID=4326;POINT(-110 29)'::geography, 1000000);

Vous pouvez vérifier la puissance des géographies en calculant à quel point un avion s'approche de Reykjavik (POINT(-21.96 64.15)) lors d'un trajet en arc de cercle depuis Seattle à Londres (LINESTRING(-122.33 47.606, 0.0 51.5)) (voir la route).

Le type geography donne la plus petite distance réelle de 122,235 km sur la sphère entre Reykjavik et l'arc de cercle entre Seattle et Londres.

-- Distance calculation using GEOGRAPHY
SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geography, 'POINT(-21.96 64.15)'::geography);
   st_distance
-----------------
 122235.23815667

Le type geometry quant à lui calcule la distance cartésienne entre Reykjavik et la ligne droite entre Seattle et Londres, telle qu'elle serait tracée sur un plan. Cette distance n'a pas de sens réel, d'autant que l'unité du résultat est techniquement en degrés, mais que le résultat ne correspond à aucune différence angulaire entre les points, donc même considérer le résultat comme des degrés serait faux.

-- Distance calculation using GEOMETRY
SELECT ST_Distance('LINESTRING(-122.33 47.606, 0.0 51.5)'::geometry, 'POINT(-21.96 64.15)'::geometry);
      st_distance
--------------------
 13.342271221453624

4.3.3. Quand utiliser le type de données Geography

Le type de données geography permet de stocker des données en utilisant les coordonnées longitude/latitude, mais cela a un prix : il y a moins de fonctions disponibles sur le type GEOGRAPHY que sur le type GEOMETRY, et les fonctions disponibles prendront plus de temps CPU pour s'exécuter.

Le type de données à choisir devrait être déterminé par la zone de travail de l'application que vous construisez. Est-ce que vos données s'étendront sur l'ensemble du globe ou sur un continent, ou bien est-ce qu'elle seront locales, comme une région, un département ou une ville ?

  • Si vous données sont limitées à une petite zone, utiliser un SCR adéquat et le type GEOMETRY est la meilleure solution, à la fois en terme de performances que de fonctionnalités disponibles.

  • Si vos données s'étendent sur le monde entier ou couvrent un continent, le type GEOGRAPHY peut vous permettre de construire votre application sans trop vous soucier des projections. Vous pouvez stocker vos données en utilisant les coordonnées longitude/latitude, et utiliser les fonctions définies sur les GEOGRAPHY.

  • Si vous n'êtes pas à l'aise avec les projections, que vous ne souhaitez pas approfondir le sujet, et que vous êtes prêts à accepter les limitations sur les fonctionnalités offertes par GEOGRAPHY, alors ce peut être plus facile d'utiliser GEOGRAPHY au lieu de GEOMETRY. Chargez vos données en longitude/latitude et partez de là.

Référez-vous à Section 13.11, “Matrice d'aide aux fonctions de PostGIS” pour comparer les supports Geography et Geometry. Pour avoir un résumé des fonctions géographiques disponibles, référez-vous à Section 13.4, “Fonctions d'aide au type geography de PostGIS”

4.3.4. FAQ Geography avancée

4.3.4.1.

Les calculs sont-ils faits sur la sphère ou sur la sphéroïde ?

Par défaut, tous les calculs sur les distances et les surfaces sont effectués sur la sphéroïde. Les résultats des calculs sur les petites zones devraient coïncider avec les résultats des calculs planaire en utilisant les projections locales adéquates. Sur de plus grandes zones, les calculs sphéroïdaux seront plus précis que ceux effectués sur un plan projeté.

Toutes les fonctions géographiques ont une option pour calculer sur une sphère, en passant comme tout dernier paramètre booléen 'FALSE'. Ceci améliorera les performances des calculs, en particulier pour les géométries très simples.

4.3.4.2.

Qu'en est-il de la ligne de changement de date et des pôles ?

Tous les calculs omettent les concepts de ligne de changement de date et de pôles. Les coordonnées étant sphériques (longitude/latitude), une forme traversant la ligne de changement de date n'est, d'un point de vue calculs, pas différente de toute autre forme.

4.3.4.3.

Quel est l'arc le plus long que vous puissiez traiter ?

Nous utilisons les arcs de grand cercle comme "ligne d'interpolation" entre deux points. Cela signifie que deux points quelconques sont en fait reliés de deux manières différentes, selon la direction dans laquelle vous vous déplacez le long du grand cercle. Tout notre code suppose que les points sont reliés par le *plus court* des deux chemins le long du grand cercle. Par conséquent, les formes qui ont des arcs de plus de 180 degrés ne seront pas correctement modélisées.

4.3.4.4.

Pourquoi est-il si lent de calculer la superficie de l'Europe / de la Russie / insérer une grande région géographique ici ?

Parce que le polygone est vraiment énorme ! Les grandes zones sont néfastes pour deux raisons : leurs limites sont énormes, de sorte que l'index a tendance à tirer l'élément, quelle que soit la requête que vous exécutez ; le nombre de sommets est énorme, et les tests (distance, confinement) doivent parcourir la liste des sommets au moins une fois et parfois N fois (N étant le nombre de sommets dans l'autre élément candidat).

Comme pour la GÉOMÉTRIE, nous vous recommandons, lorsque vous avez de très grands polygones, mais que vous effectuez des requêtes sur de petites zones, de "dénormaliser" vos données géométriques en morceaux plus petits, de sorte que l'index puisse effectivement interroger des parties de l'objet et que les requêtes n'aient pas à extraire l'objet entier à chaque fois. Veuillez consulter la documentation de la fonction ST_Subdivide. Ce n'est pas parce que vous *pouvez* stocker toute l'Europe dans un polygone que vous *devriez* le faire.

4.4. Validation de la géométrie

PostGIS est conforme à la spécification Simple Features de l'Open Geospatial Consortium (OGC). Cette norme définit les concepts de géométrie comme étant simple et valide. Ces définitions permettent au modèle géométrique Simple Features de représenter les objets spatiaux d'une manière cohérente et non ambiguë qui permet un calcul efficace. (Remarque : l'OGC SF et SQL/MM ont les mêmes définitions pour simple et valide.)

4.4.1. Géométrie simple

Une géométrie simple est une géométrie qui ne présente pas de points géométriques anormaux, tels qu'une intersection ou une tangence propre.

Un POINT est intrinsèquement simple en tant qu'objet géométrique à 0 dimension.

Les MULTIPOINT sont simples si deux coordonnées (POINTs) ne sont pas égales (ont des valeurs de coordonnées identiques).

Une LINESTRING est simple si elle ne passe pas deux fois par le même point, à l'exception des extrémités. Si les extrémités d'une simple LineString sont identiques, elle est dite fermée et appelée anneau linéaire.

(a) et (c) sont des LINESTRING simples. (b) et (d) ne sont pas simples. (c) est un anneau linéaire fermé.

(a)

(b)

(c)

(d)

Un MULTILINESTRING est simple uniquement si tous ses éléments sont simples et si la seule intersection entre deux éléments quelconques se produit en des points situés sur les limites des deux éléments.

(e) et (f) sont de simples MULTILINESTRINGs. (g) n'est pas simple.

(e)

(f)

(g)

Les POLYGON sont formés à partir d'anneaux linéaires, de sorte que la géométrie polygonale valide est toujours simple.

Pour tester si une géométrie est simple, utilisez la fonction ST_IsSimple :

SELECT
   ST_IsSimple('LINESTRING(0 0, 100 100)') AS straight,
   ST_IsSimple('LINESTRING(0 0, 100 100, 100 0, 0 100)') AS crossing;

 straight | crossing
----------+----------
 t        | f

En général, les fonctions PostGIS n'exigent pas que les arguments géométriques soient simples. La simplicité est principalement utilisée comme base pour définir la validité géométrique. C'est également une exigence pour certains types de modèles de données spatiales (par exemple, les réseaux linéaires interdisent souvent les lignes qui se croisent). La géométrie multipoint et linéaire peut être rendue simple en utilisant ST_UnaryUnion.

4.4.2. Géométrie valide

La validité géométrique s'applique principalement aux géométries bidimensionnelles (POLYGONs et MULTIPOLYGONs). La validité est définie par des règles qui permettent à la géométrie polygonale de modéliser des zones planes sans ambiguïté.

Un POLYGON est valide si :

  1. les anneaux de délimitation du polygone (l'anneau extérieur de la coquille et les anneaux intérieurs des trous) sont simples (ils ne se croisent pas et ne se touchent pas). Pour cette raison, un polygone ne peut pas avoir de lignes de coupe, de pointes ou de boucles. Cela implique que les trous des polygones doivent être représentés par des anneaux intérieurs, plutôt que par l'anneau extérieur qui se touche (ce qu'on appelle un "trou inversé").

  2. les anneaux de délimitation ne se croisent pas

  3. Les anneaux de délimitation peuvent se toucher en certains points, mais uniquement sous la forme d'une tangente (c'est-à-dire pas sous la forme d'une ligne)

  4. les anneaux intérieurs sont contenus dans l'anneau extérieur

  5. l'intérieur du polygone est simplement connecté (c'est-à-dire que les anneaux ne doivent pas se toucher d'une manière qui divise le polygone en plus d'une partie)

(h) et (i) sont des POLYGON valides. (j-m) ne sont pas valides. (j) peut être représenté comme un MULTIPOLYGON valide.

(h)

(i)

(j)

(k)

(l)

(m)

Un MULTIPOLYGON est valide si :

  1. ses éléments POLYGON sont valides

  2. les éléments ne se chevauchent pas (c'est-à-dire que leurs intérieurs ne doivent pas se croiser)

  3. les éléments ne se touchent que par des points (c'est-à-dire pas le long d'une ligne)

(n) est un MULTIPOLYGON valide. (o) et (p) ne sont pas valides.

(n)

(o)

(p)

Ces règles signifient que la géométrie polygonale valide est également simple.

Pour la géométrie linéaire, la seule règle de validité est que les LINESTRING doivent avoir au moins deux points et une longueur non nulle (ou, de façon équivalente, au moins deux points distincts).

SELECT
   ST_IsValid('LINESTRING(0 0, 1 1)') AS len_nonzero,
   ST_IsValid('LINESTRING(0 0, 0 0, 0 0)') AS len_zero,
   ST_IsValid('LINESTRING(10 10, 150 150, 180 50, 20 130)') AS self_int;

 len_nonzero | len_zero | self_int
-------------+----------+----------
 t           | f        | t

Les géométries POINT et MULTIPOINT n'ont pas de règles de validité.

4.4.3. Gestion de la validité

PostGIS permet de créer et de stocker des géométries valides et non valides. Cela permet de détecter les géométries non valides et de les signaler ou de les corriger. Il existe également des situations où les règles de validité de l'OGC sont plus strictes que souhaité (par exemple, les lignes de longueur nulle et les polygones avec des trous inversés.)

De nombreuses fonctions fournies par PostGIS reposent sur l'hypothèse que les arguments géométriques sont valides. Par exemple, il n'est pas logique de calculer la surface d'un polygone dont le trou est défini à l'extérieur du polygone, ou de construire un polygone à partir d'une ligne de démarcation non simple. Le fait de supposer que les entrées géométriques sont valides permet aux fonctions de fonctionner plus efficacement, puisqu'elles n'ont pas besoin de vérifier l'exactitude topologique. (Les exceptions notables sont que les lignes de longueur nulle et les polygones avec des inversions sont généralement traités correctement). En outre, la plupart des fonctions PostGIS produisent une géométrie valide si les données d'entrée sont valides. Cela permet d'enchaîner les fonctions PostGIS en toute sécurité.

Si vous rencontrez des messages d'erreur inattendus lors de l'appel de fonctions PostGIS (tels que "GEOS Intersection() threw an error !"), vous devez d'abord vous assurer que les arguments de la fonction sont valides. Si ce n'est pas le cas, envisagez d'utiliser l'une des techniques ci-dessous pour vous assurer que les données que vous traitez sont valides.

[Note]

Si une fonction signale une erreur avec des entrées valides, il se peut que vous ayez trouvé une erreur dans PostGIS ou dans l'une des bibliothèques qu'il utilise, et vous devez le signaler au projet PostGIS. Il en va de même si une fonction PostGIS renvoie une géométrie non valide pour des données d'entrée valides.

Pour vérifier si une géométrie est valide, utilisez la fonction ST_IsValid :

SELECT ST_IsValid('POLYGON ((20 180, 180 180, 180 20, 20 20, 20 180))');
-----------------
 t

Les informations relatives à la nature et à la localisation d'une invalidité géométrique sont fournies par la fonction ST_IsValidDetail :

SELECT valid, reason, ST_AsText(location) AS location
    FROM ST_IsValidDetail('POLYGON ((20 20, 120 190, 50 190, 170 50, 20 20))') AS t;

 valid |      reason       |                  location
-------+-------------------+---------------------------------------------
 f     | Self-intersection | POINT(91.51162790697674 141.56976744186045)

Dans certaines situations, il est souhaitable de corriger automatiquement la géométrie non valide. Utilisez la fonction ST_MakeValid pour cela. (ST_MakeValid est un exemple de fonction spatiale qui doit permettre une entrée non valide !)

Par défaut, PostGIS ne vérifie pas la validité lors du chargement de la géométrie, car les tests de validité peuvent prendre beaucoup de temps CPU pour les géométries complexes. Si vous ne faites pas confiance à vos sources de données, vous pouvez imposer un contrôle de validité à vos tables en ajoutant une contrainte de contrôle :

ALTER TABLE mytable
  ADD CONSTRAINT geometry_valid_check
        CHECK (ST_IsValid(geom));

4.5. Systèmes de référence spatiale

Un système de référence spatiale (SRS) (également appelé système de référence des coordonnées (SRC)) définit la manière dont la géométrie est référencée par rapport à des emplacements sur la surface de la Terre. Il existe trois types de SRS :

  • Un SRS géodésique utilise des coordonnées angulaires (longitude et latitude) qui correspondent directement à la surface de la terre.

  • Un SRS projeté utilise une transformation mathématique de projection pour "aplatir" la surface de la terre sphéroïdale sur un plan. Il attribue des coordonnées de localisation d'une manière qui permet de mesurer directement des quantités telles que la distance, la surface et l'angle. Le système de coordonnées est cartésien, ce qui signifie qu'il a un point d'origine défini et deux axes perpendiculaires (généralement orientés vers le nord et l'est). Chaque SRS projeté utilise une unité de longueur définie (généralement des mètres ou des pieds). Un SRS projeté peut être limité dans sa zone d'applicabilité afin d'éviter toute distorsion et de s'inscrire dans les limites des coordonnées définies.

  • Un SRS local est un système de coordonnées cartésiennes qui n'est pas référencé à la surface de la terre. Dans PostGIS, ce système est spécifié par une valeur SRID de 0.

Il existe de nombreux systèmes de référence spatiale différents. Les SRS courants sont normalisés dans la base de données de l'European Petroleum Survey Group EPSG database. Par commodité, PostGIS (et de nombreux autres systèmes spatiaux) se réfère aux définitions des SRS à l'aide d'un identifiant entier appelé SRID.

Une géométrie est associée à un système de référence spatiale par sa valeur SRID, à laquelle on accède par ST_SRID. Le SRID d'une géométrie peut être assigné en utilisant ST_SetSRID. Certaines fonctions de construction de géométrie permettent de fournir un SRID (telles que ST_Point et ST_MakeEnvelope). Le format EWKT prend en charge les SRID avec le préfixe SRID=n;.

Les fonctions spatiales qui traitent des paires de géométries (telles que les fonctions overlay et relationship) exigent que les géométries d'entrée soient dans le même système de référence spatiale (qu'elles aient le même SRID). Les données géométriques peuvent être transformées dans un système de référence spatiale différent en utilisant ST_Transform et ST_TransformPipeline. Les géométries renvoyées par les fonctions ont le même SRS que les géométries d'entrée.

4.5.1. Table SPATIAL_REF_SYS

La table SPATIAL_REF_SYS utilisée par PostGIS est une table de base de données conforme à l'OGC qui définit les systèmes de référence spatiale disponibles. Elle contient les SRID numériques et les descriptions textuelles des systèmes de coordonnées.

La définition de la table spatial_ref_sys est la suivante :

CREATE TABLE spatial_ref_sys (
  srid       INTEGER NOT NULL PRIMARY KEY,
  auth_name  VARCHAR(256),
  auth_srid  INTEGER,
  srtext     VARCHAR(2048),
  proj4text  VARCHAR(2048)
)

Les colonnes sont :

srid

Un code entier qui identifie de manière unique le Système de référence spatiale (SRS) dans la base de données.

auth_name

Le nom de la norme ou de l'organisme de normalisation qui est cité pour ce système de référence. Par exemple, "EPSG" est un auth_name valide.

auth_srid

L'ID du système de référence spatiale tel que défini par l'autorité citée dans le auth_name. Dans le cas de l'EPSG, il s'agit du code EPSG.

srtext

Représentation Well-Known Text du système de référence spatiale. Un exemple de représentation WKT du SRS est le suivant :

PROJCS["NAD83 / UTM Zone 10N",
  GEOGCS["NAD83",
        DATUM["North_American_Datum_1983",
          SPHEROID["GRS 1980",6378137,298.257222101]
        ],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433]
  ],
  PROJECTION["Transverse_Mercator"],
  PARAMETER["latitude_of_origin",0],
  PARAMETER["central_meridian",-123],
  PARAMETER["scale_factor",0.9996],
  PARAMETER["false_easting",500000],
  PARAMETER["false_northing",0],
  UNIT["metre",1]
]

Pour une discussion sur le SRS WKT, voir la norme OGC Well-known text representation of coordinate reference systems.

proj4text

PostGIS utilise la bibliothèque PROJ pour fournir des capacités de transformation de coordonnées. La colonne proj4text contient la chaîne de caractères de définition des coordonnées PROJ pour un SRID particulier. Par exemple :

+proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m

Pour plus d'informations, consultez le site web de PROJ. Le fichier spatial_ref_sys.sql contient les définitions srtext et proj4text pour toutes les projections EPSG.

Lors de la récupération des définitions des systèmes de référence spatiale pour les utiliser dans les transformations, PostGIS utilise la stratégie suivante :

  • Si auth_name et auth_srid sont présents (non NULL), utiliser le PROJ SRS basé sur ces entrées (si au moins un existe).

  • Si srtext est présent, créez un SRS en l'utilisant, si possible.

  • Si proj4text est présent, créez un SRS en l'utilisant, si possible.

4.5.2. Systèmes de référence spatiale définis par l'utilisateur

La table PostGIS spatial_ref_sys contient plus de 3000 définitions des systèmes de référence spatiale les plus courants qui sont gérés par la bibliothèque de projection PROJ. Mais il existe de nombreux systèmes de coordonnées qu'elle ne contient pas. Vous pouvez ajouter des définitions de SRS à la table si vous disposez des informations requises sur le système de référence spatiale. Vous pouvez également définir votre propre système de référence spatiale personnalisé si vous êtes familiarisé avec les constructions PROJ. Gardez à l'esprit que la plupart des systèmes de référence spatiale sont régionaux et n'ont aucune signification lorsqu'ils sont utilisés en dehors des limites pour lesquelles ils ont été conçus.

Une ressource permettant de trouver des systèmes de référence spatiale non définis dans le jeu de base est http://spatialreference.org/

Les systèmes de référence spatiale les plus couramment utilisés sont les suivants : 4326 - WGS 84 Long Lat, 4269 - NAD 83 Long Lat, 3395 - WGS 84 World Mercator, 2163 - US National Atlas Equal Area, et les 60 zones UTM WGS84. Les zones UTM sont parmi les plus idéales pour les mesures, mais elles ne couvrent que des régions de 6 degrés. (Pour déterminer la zone UTM à utiliser pour votre zone d'intérêt, voir la utmzone PostGIS plpgsql helper function.)

Les États américains utilisent des systèmes de référence spatiale State Plane (basés sur le mètre ou le pied) - il en existe généralement un ou deux par État. La plupart des systèmes basés sur le mètre se trouvent dans le jeu de base, mais de nombreux systèmes basés sur le pied ou créés par ESRI devront être copiés à partir de spatialreference.org.

Vous pouvez même définir des systèmes de coordonnées non terrestres, tels que Mars 2000 Ce système de coordonnées martien n'est pas planaire (il est en degrés sphéroïdaux), mais vous pouvez l'utiliser avec le type géographie pour obtenir des mesures de longueur et de proximité en mètres au lieu de degrés.

Voici un exemple de chargement d'un système de coordonnées personnalisé à l'aide d'un SRID non attribué et de la définition PROJ pour une projection Lambert conforme centrée sur les États-Unis :

INSERT INTO spatial_ref_sys (srid, proj4text)
VALUES ( 990000,
  '+proj=lcc  +lon_0=-95 +lat_0=25 +lat_1=25 +lat_2=25 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs'
);

4.6. Tables spatiales

4.6.1. Créer une table spatiale

Vous pouvez créer une table pour stocker des données géométriques en utilisant l'instruction SQL CREATE TABLE avec une colonne de type geometry. L'exemple suivant crée une table avec une colonne géométrie stockant des chaînes de lignes 2D (XY) dans le système de coordonnées BC-Albers (SRID 3005) :

CREATE TABLE roads (
    id SERIAL PRIMARY KEY,
    name VARCHAR(64),
    geom geometry(LINESTRING,3005)
  );

Le type geometry prend en charge deux modificateurs de type facultatifs :

  • le modificateur de type spatial restreint le type de formes et de dimensions autorisées dans la colonne. La valeur peut être l'un des sous-types de géométrie pris en charge (par exemple POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION, etc). Le modificateur prend en charge les restrictions de dimensionnalité des coordonnées en ajoutant des suffixes : Z, M et ZM. Par exemple, le modificateur "LINESTRINGM" n'autorise que les lignes à trois dimensions et traite la troisième dimension comme une mesure. De même, "POINTZM" requiert des données à quatre dimensions (XYZM).

  • le modificateur SRID limite le système de référence spatiale SRID à un nombre particulier. S'il est omis, le SRID prend par défaut la valeur 0.

Exemples de création de tableaux avec des colonnes géométriques :

  • Créer une table contenant n'importe quel type de géométrie avec le SRID par défaut :

    CREATE TABLE geoms(gid serial PRIMARY KEY, geom geometry );
  • Créer une table avec une géométrie POINT 2D avec le SRID par défaut :

    CREATE TABLE pts(gid serial PRIMARY KEY, geom geometry(POINT) );
  • Créer une table avec des POINTS 3D (XYZ) et un SRID explicite de 3005 :

    CREATE TABLE pts(gid serial PRIMARY KEY, geom geometry(POINTZ,3005) );
  • Créer une table avec une géométrie 4D (XYZM) LINESTRING avec le SRID par défaut :

    CREATE TABLE lines(gid serial PRIMARY KEY, geom geometry(LINESTRINGZM) );
  • Créer une table avec une géométrie POLYGON 2D avec le SRID 4267 (NAD 1927 long lat) :

    CREATE TABLE polys(gid serial PRIMARY KEY, geom geometry(POLYGON,4267) );

Il est possible d'avoir plus d'une colonne de géométrie dans une table. Cela peut être spécifié lors de la création de la table, ou une colonne peut être ajoutée à l'aide de l'instruction SQL ALTER TABLE. Cet exemple ajoute une colonne qui peut contenir des LineStrings 3D :

ALTER TABLE roads ADD COLUMN geom2 geometry(LINESTRINGZ,4326);

4.6.2. Vue GEOMETRY_COLUMNS

L'OGC Simple Features Specification for SQL définit la table de métadonnées GEOMETRY_COLUMNS pour décrire la structure de la table géométrique. Dans PostGIS, geometry_columns est une vue qui lit les tables de catalogue du système de base de données. Cela garantit que les informations de métadonnées spatiales sont toujours cohérentes avec les tables et les vues actuellement définies. La structure de la vue est la suivante :

\d geometry_columns
View "public.geometry_columns"
      Column       |          Type          | Modifiers
-------------------+------------------------+-----------
 f_table_catalog   | character varying(256) |
 f_table_schema    | character varying(256) |
 f_table_name      | character varying(256) |
 f_geometry_column | character varying(256) |
 coord_dimension   | integer                |
 srid              | integer                |
 type              | character varying(30)  |

Les colonnes sont :

f_table_catalog, f_table_schema, f_table_name

Le nom complet de la table d'entités contenant la colonne géométrie. Il n'y a pas d'analogue PostgreSQL de "catalog", cette colonne est donc laissée vide. Pour "schema", le nom du schéma PostgreSQL est utilisé (public est la valeur par défaut).

f_geometry_column

Le nom de la colonne géométrique dans la table des caractéristiques.

coord_dimension

La dimension des coordonnées (2, 3 ou 4) de la colonne.

srid

L'ID du système de référence spatiale utilisé pour la géométrie des coordonnées dans cette table. Il s'agit d'une référence de clé étrangère à la table spatial_ref_sys (voir Section 4.5.1, “Table SPATIAL_REF_SYS”).

type

Le type de l'objet spatial. Pour limiter la colonne spatiale à un seul type, utilisez l'une des options suivantes : POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION ou les versions XYM correspondantes POINTM, LINESTRINGM, POLYGONM, MULTIPOINTM, MULTILINESTRINGM, MULTIPOLYGONM, GEOMETRYCOLLECTIONM. Pour les collections hétérogènes (de type mixte), vous pouvez utiliser "GEOMETRY" comme type.

4.6.3. Enregistrement manuel des colonnes de géométrie

Deux des cas où vous pouvez avoir besoin de cela sont les cas de vues SQL et les insertions en masse. Dans le cas des insertions en masse, vous pouvez corriger l'enregistrement dans la table geometry_columns en contraignant la colonne ou en effectuant une modification de la table. Pour les vues, vous pouvez exposer en utilisant une opération CAST. Notez que si votre colonne est basée sur un typmod, le processus de création l'enregistrera correctement, il n'est donc pas nécessaire de faire quoi que ce soit. De même, les vues qui n'ont pas de fonction spatiale appliquée à la géométrie s'enregistreront de la même manière que la colonne géométrique de la table sous-jacente.

-- Lets say you have a view created like this
CREATE VIEW public.vwmytablemercator AS
        SELECT gid, ST_Transform(geom, 3395) As geom, f_name
        FROM public.mytable;

-- For it to register correctly
-- You need to cast the geometry
--
DROP VIEW public.vwmytablemercator;
CREATE VIEW  public.vwmytablemercator AS
        SELECT gid, ST_Transform(geom, 3395)::geometry(Geometry, 3395) As geom, f_name
        FROM public.mytable;

-- If you know the geometry type for sure is a 2D POLYGON then you could do
DROP VIEW public.vwmytablemercator;
CREATE VIEW  public.vwmytablemercator AS
        SELECT gid, ST_Transform(geom,3395)::geometry(Polygon, 3395) As geom, f_name
        FROM public.mytable;
--Lets say you created a derivative table by doing a bulk insert
SELECT poi.gid, poi.geom, citybounds.city_name
INTO myschema.my_special_pois
FROM poi INNER JOIN citybounds ON ST_Intersects(citybounds.geom, poi.geom);

-- Create 2D index on new table
CREATE INDEX idx_myschema_myspecialpois_geom_gist
  ON myschema.my_special_pois USING gist(geom);

-- If your points are 3D points or 3M points,
-- then you might want to create an nd index instead of a 2D index
CREATE INDEX my_special_pois_geom_gist_nd
        ON my_special_pois USING gist(geom gist_geometry_ops_nd);

-- To manually register this new table's geometry column in geometry_columns.
-- Note it will also change the underlying structure of the table to
-- to make the column typmod based.
SELECT populate_geometry_columns('myschema.my_special_pois'::regclass);

-- If you are using PostGIS 2.0 and for whatever reason, you
-- you need the constraint based definition behavior
-- (such as case of inherited tables where all children do not have the same type and srid)
-- set optional use_typmod argument to false
SELECT populate_geometry_columns('myschema.my_special_pois'::regclass, false); 

Bien que l'ancienne méthode basée sur les contraintes soit toujours supportée, une colonne géométrique basée sur les contraintes utilisée directement dans une vue ne s'enregistrera pas correctement dans geometry_columns, tout comme une colonne typmod. Dans cet exemple, nous définissons une colonne à l'aide de typmod et une autre à l'aide de contraintes.

CREATE TABLE pois_ny(gid SERIAL PRIMARY KEY, poi_name text, cat text, geom geometry(POINT,4326));
SELECT AddGeometryColumn('pois_ny', 'geom_2160', 2160, 'POINT', 2, false);

Si nous exécutons dans psql

\d pois_ny;

Nous observons qu'ils sont définis différemment - l'un est un typmod, l'autre une contrainte

Table "public.pois_ny"
  Column   |         Type          |                       Modifiers

-----------+-----------------------+------------------------------------------------------
 gid       | integer               | not null default nextval('pois_ny_gid_seq'::regclass)
 poi_name  | text                  |
 cat       | character varying(20) |
 geom      | geometry(Point,4326)  |
 geom_2160 | geometry              |
Indexes:
    "pois_ny_pkey" PRIMARY KEY, btree (gid)
Check constraints:
    "enforce_dims_geom_2160" CHECK (st_ndims(geom_2160) = 2)
    "enforce_geotype_geom_2160" CHECK (geometrytype(geom_2160) = 'POINT'::text
        OR geom_2160 IS NULL)
    "enforce_srid_geom_2160" CHECK (st_srid(geom_2160) = 2160)

Dans geometry_columns, les deux s'enregistrent correctement

SELECT f_table_name, f_geometry_column, srid, type
        FROM geometry_columns
        WHERE f_table_name = 'pois_ny';
f_table_name | f_geometry_column | srid | type
-------------+-------------------+------+-------
pois_ny      | geom              | 4326 | POINT
pois_ny      | geom_2160         | 2160 | POINT

Cependant, si nous devions créer une vue comme celle-ci

CREATE VIEW vw_pois_ny_parks AS
SELECT *
  FROM pois_ny
  WHERE cat='park';

SELECT f_table_name, f_geometry_column, srid, type
        FROM geometry_columns
        WHERE f_table_name = 'vw_pois_ny_parks';

La colonne de la vue géométrique basée sur le modèle s'enregistre correctement, mais pas celle basée sur les contraintes.

f_table_name   | f_geometry_column | srid |   type
------------------+-------------------+------+----------
 vw_pois_ny_parks | geom              | 4326 | POINT
 vw_pois_ny_parks | geom_2160         |    0 | GEOMETRY

Cela pourrait changer dans les prochaines versions de PostGIS, mais pour l'instant, pour forcer la colonne de vue basée sur les contraintes à s'enregistrer correctement, vous devez procéder comme suit :

DROP VIEW vw_pois_ny_parks;
CREATE VIEW vw_pois_ny_parks AS
SELECT gid, poi_name, cat,
  geom,
  geom_2160::geometry(POINT,2160) As geom_2160
  FROM pois_ny
  WHERE cat = 'park';
SELECT f_table_name, f_geometry_column, srid, type
        FROM geometry_columns
        WHERE f_table_name = 'vw_pois_ny_parks';
f_table_name   | f_geometry_column | srid | type
------------------+-------------------+------+-------
 vw_pois_ny_parks | geom              | 4326 | POINT
 vw_pois_ny_parks | geom_2160         | 2160 | POINT

4.7. Chargement des données spatiales

Une fois que vous avez créé une table spatiale, vous êtes prêt à charger des données spatiales dans la base de données. Il existe deux façons d'intégrer des données spatiales dans une base de données PostGIS/PostgreSQL : à l'aide d'instructions SQL formatées ou à l'aide de l'utilitaire qui permet de charger des Shapefiles.

4.7.1. Utilisation de SQL pour charger des données

Si les données spatiales peuvent être converties en une représentation textuelle (WKT ou WKB), l'utilisation de SQL pourrait être le moyen le plus simple d'introduire les données dans PostGIS. Les données peuvent être chargées en masse dans PostGIS/PostgreSQL en chargeant un fichier texte d'instructions SQL INSERT à l'aide de l'utilitaire SQL psql.

Un fichier de chargement SQL (roads.sql par exemple) peut ressembler à ceci :

BEGIN;
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (1,'LINESTRING(191232 243118,191108 243242)','Jeff Rd');
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (2,'LINESTRING(189141 244158,189265 244817)','Geordie Rd');
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (3,'LINESTRING(192783 228138,192612 229814)','Paul St');
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (4,'LINESTRING(189412 252431,189631 259122)','Graeme Ave');
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (5,'LINESTRING(190131 224148,190871 228134)','Phil Tce');
INSERT INTO roads (road_id, roads_geom, road_name)
  VALUES (6,'LINESTRING(198231 263418,198213 268322)','Dave Cres');
COMMIT;

Le fichier SQL peut être chargé dans PostgreSQL en utilisant psql :

psql -d [database] -f roads.sql

4.7.2. Utilisation de l'utilitaire qui permet de charger des fichiers Shapefile

Le chargeur de données shp2pgsql convertit les Shapefiles en SQL pour les insérer dans une base de données PostGIS/PostgreSQL au format geometry ou geography. Le chargeur a plusieurs modes de fonctionnement sélectionnés par des indicateurs de ligne de commande.

Il existe également une interface graphique shp2pgsql-gui qui offre la plupart des options du chargeur en ligne de commande. Cette interface peut être plus facile à utiliser pour un chargement ponctuel sans script ou si vous êtes novice en matière de PostGIS. Il peut également être configuré comme un plugin pour PgAdminIII.

(c|a|d|p) Ces options s'excluent mutuellement :

-c

Crée une nouvelle table et la remplit à partir du fichier Shapefile. C'est le mode par défaut.

-a

Ajoute les données du fichier Shapefile dans la table de la base de données. Notez que pour utiliser cette option afin de charger plusieurs fichiers, les fichiers doivent avoir les mêmes attributs et les mêmes types de données.

-d

Supprime la table de la base de données avant de créer une nouvelle table avec les données du fichier Shapefile.

-p

Produit uniquement le code SQL de création de la table, sans ajouter de données réelles. Cette option peut être utilisée si vous souhaitez séparer complètement les étapes de création de la table et de chargement des données.

-?

Afficher l'écran d'aide.

-D

Utilise le format "dump" de PostgreSQL pour les données de sortie. Ce format peut être combiné avec -a, -c et -d. Il est beaucoup plus rapide à charger que le format SQL "insert" par défaut. Utilisez-le pour les très grands ensembles de données.

-s [<FROM_SRID>:]<SRID>

Crée et remplit les tables de géométrie avec le SRID spécifié. Il est possible de spécifier que le fichier de forme d'entrée utilise le FROM_SRID donné, auquel cas les géométries seront reprojetées dans le SRID cible.

-k

Conserver la casse des identifiants (colonne, schéma et attributs). Notez que les attributs dans Shapefile sont tous en majuscules.

-i

Contraindre tous les entiers à des entiers 32 bits standard, ne pas créer de bigints 64 bits, même si la signature de l'en-tête DBF semble le justifier.

-I

Créer un index GiST sur la colonne géométrie.

-m

-m nom_de_fichier Spécifier un fichier contenant un ensemble de correspondances entre les noms de colonnes (longs) et les noms de colonnes DBF à 10 caractères. Le contenu du fichier est une ou plusieurs lignes de deux noms séparées par un espace blanc, sans espace de départ ni de fin. Par exemple :

COLUMNNAME DBFFIELD1
AVERYLONGCOLUMNNAME DBFFIELD2

-S

Génère des géométries simples au lieu de géométries MULTI. Ne réussira que si toutes les géométries sont en fait simples (c'est-à-dire un MULTIPOLYGON avec une seule enveloppe, ou un MULTIPOINT avec un seul sommet).

-t <dimensionality>

Force la géométrie de sortie à avoir la dimensionnalité spécifiée. Utilisez les chaînes de caractères suivantes pour indiquer la dimensionnalité : 2D, 3DZ, 3DM, 4D.

Si l'entrée a moins de dimensions que celles spécifiées, la sortie aura ces dimensions remplies avec des zéros. Si l'entrée a plus de dimensions que celles spécifiées, les dimensions non désirées seront supprimées.

-w

Sortie au format WKT, au lieu de WKB. Notez que cela peut introduire des dérives de coordonnées dues à la perte de précision.

-e

Exécuter chaque instruction séparément, sans utiliser de transaction. Cela permet de charger la majorité des bonnes données lorsqu'il y a quelques mauvaises géométries qui génèrent des erreurs. Notez que cela ne peut pas être utilisé avec l'option -D car le format "dump" utilise toujours une transaction.

-W <encoding>

Spécifie l'encodage des données d'entrée (fichier dbf). Lorsqu'il est utilisé, tous les attributs du fichier dbf sont convertis en UTF8 à partir de l'encodage spécifié. La sortie SQL résultante contiendra une commande SET CLIENT_ENCODING to UTF8, afin que le backend puisse reconvertir de UTF8 à n'importe quel encodage que la base de données est configurée pour utiliser en interne.

-N <policy>

Politique de gestion des géométries NULL (insert*, skip, abort)

-n

-n Importer uniquement le fichier DBF. Si vos données n'ont pas de fichier de forme correspondant, il passera automatiquement à ce mode et ne chargera que le fichier DBF. Cette option n'est donc nécessaire que si vous disposez d'un fichier de forme complet et que vous ne voulez que les données d'attributs et pas de géométrie.

-G

Utiliser le type geography au lieu de geometry (nécessite des données lon/lat) dans WGS84 long lat (SRID=4326)

-T <tablespace>

Spécifiez le tablespace pour la nouvelle table. Les index utiliseront toujours le tablespace par défaut à moins que le paramètre -X ne soit également utilisé. La documentation de PostgreSQL contient une bonne description de l'utilisation des tablespaces personnalisés.

-X <tablespace>

Spécifier le tablespace pour les index de la nouvelle table. Ceci s'applique à l'index de clé primaire et à l'index spatial GIST si -I est également utilisé.

-Z

Lorsqu'il est utilisé, cet indicateur empêche la génération des instructions ANALYZE. Sans l'option -Z (comportement par défaut), les instructions ANALYZE seront générées.

Un exemple de session utilisant le chargeur pour créer un fichier d'entrée et le charger peut ressembler à ceci :

# shp2pgsql -c -D -s 4269 -i -I shaperoads.shp myschema.roadstable 
> roads.sql
# psql -d roadsdb -f roads.sql

Une conversion et un chargement peuvent être effectués en une seule étape à l'aide de pipes UNIX :

# shp2pgsql shaperoads.shp myschema.roadstable | psql -d roadsdb

4.8. Extraction de données spatiales

Les données spatiales peuvent être extraites de la base de données à l'aide de SQL ou de Shapefile dumper. La section sur SQL présente certaines des fonctions disponibles pour effectuer des comparaisons et des requêtes sur les tables spatiales.

4.8.1. Utiliser SQL pour extraire des données

La manière la plus simple d'extraire des données spatiales de la base de données consiste à utiliser une requête SQL SELECT pour définir l'ensemble de données à extraire et à transférer les colonnes résultantes dans un fichier texte analysable :

db=# SELECT road_id, ST_AsText(road_geom) AS geom, road_name FROM roads;

road_id | geom                                    | road_name
--------+-----------------------------------------+-----------
          1 | LINESTRING(191232 243118,191108 243242) | Jeff Rd
          2 | LINESTRING(189141 244158,189265 244817) | Geordie Rd
          3 | LINESTRING(192783 228138,192612 229814) | Paul St
          4 | LINESTRING(189412 252431,189631 259122) | Graeme Ave
          5 | LINESTRING(190131 224148,190871 228134) | Phil Tce
          6 | LINESTRING(198231 263418,198213 268322) | Dave Cres
          7 | LINESTRING(218421 284121,224123 241231) | Chris Way
(6 rows)

Il peut arriver qu'une restriction soit nécessaire pour réduire le nombre d'enregistrements renvoyés. Dans le cas de restrictions basées sur des attributs, utilisez la même syntaxe SQL que pour une table non spatiale. Dans le cas de restrictions spatiales, les fonctions suivantes sont utiles :

ST_Intersects

Cette fonction indique si deux géométries partagent un espace.

=

Cette fonction permet de vérifier si deux géométries sont géométriquement identiques. Par exemple, si 'POLYGON((0 0,1 1,1 0,0 0))' est identique à 'POLYGON((0 0,1 1,1 0,0 0))' (c'est le cas).

Vous pouvez ensuite utiliser ces opérateurs dans des requêtes. Notez que lorsque vous spécifiez des géométries et des box sur la ligne de commande SQL, vous devez explicitement transformer les représentations de chaînes de caractères en fonction géométrique. Le 312 est un système de référence spatiale fictif qui correspond à nos données. Ainsi, par exemple, le 312 est un système de référence spatiale fictif qui correspond à nos données :

SELECT road_id, road_name
  FROM roads
  WHERE roads_geom='SRID=312;LINESTRING(191232 243118,191108 243242)'::geometry;

La requête ci-dessus renverrait le seul enregistrement de la table "ROADS_GEOM" dont la géométrie est égale à cette valeur.

Vérifier si certaines routes passent dans la zone définie par un polygone :

SELECT road_id, road_name
FROM roads
WHERE ST_Intersects(roads_geom, 'SRID=312;POLYGON((...))');

La requête spatiale la plus courante sera probablement une requête "basée sur un cadre", utilisée par les logiciels clients, tels que les navigateurs de données et les cartographes web, pour saisir un "cadre de carte" d'une valeur de données pour l'affichage.

Lorsque vous utilisez l'opérateur "&&", vous pouvez spécifier soit une BOX3D comme élément de comparaison, soit une GEOMETRY. Toutefois, lorsque vous spécifiez une GEOMETRY, c'est sa boîte de délimitation qui sera utilisée pour la comparaison.

En utilisant un objet "BOX3D" pour le cadre, une telle requête se présente comme suit :

SELECT ST_AsText(roads_geom) AS geom
FROM roads
WHERE
  roads_geom && ST_MakeEnvelope(191232, 243117,191232, 243119,312);

Notez l'utilisation du SRID 312 pour spécifier la projection de l'enveloppe.

4.8.2. Utilisation de Shapefile Dumper

Le table dumper pgsql2shp se connecte à la base de données et convertit une table (éventuellement définie par une requête) en un fichier shape. La syntaxe de base est la suivante :

pgsql2shp [<options
>] <database
> [<schema
>.]<table>
pgsql2shp [<options
>] <database
> <query>

Les options de la ligne de commande sont les suivantes :

-f <filename>

Écriture de la sortie dans un fichier particulier.

-h <host>

L'hôte de la base de données auquel se connecter.

-p <port>

Le port auquel se connecter sur l'hôte de la base de données.

-P <password>

Le mot de passe à utiliser lors de la connexion à la base de données.

-u <user>

Le nom d'utilisateur à utiliser lors de la connexion à la base de données.

-g <geometry column>

Dans le cas de tableaux comportant plusieurs colonnes géométriques, la colonne géométrique à utiliser lors de l'écriture du fichier de forme.

-b

Utiliser un curseur binaire. L'opération sera plus rapide, mais ne fonctionnera pas si un attribut NON-geometry de la table n'est pas converti en texte.

-r

Mode brut. Ne pas supprimer le champ gid, ni échapper les noms de colonnes.

-m filename

Remapper les identifiants en noms de dix caractères. Le contenu du fichier est constitué de lignes de deux symboles séparées par un seul espace blanc, sans espace de départ ni de fin : VERYLONGSYMBOL SHORTONE ANOTHERYLONGSYMBOL SHORTER etc.

4.9. Index spatiaux

Les index spatiaux permettent d'utiliser une base de données spatiales pour de grands ensembles de données. Sans indexation, la recherche de caractéristiques nécessite un balayage séquentiel de chaque enregistrement de la base de données. L'indexation accélère la recherche en organisant les données dans une structure qui peut être rapidement parcourue pour trouver les enregistrements correspondants.

La méthode d'indexation B-tree couramment utilisée pour les données d'attributs n'est pas très utile pour les données spatiales, car elle ne permet de stocker et d'interroger les données que dans une seule dimension. Les données telles que la géométrie (qui a 2 dimensions ou plus) requièrent une méthode d'indexation qui supporte les requêtes sur toutes les dimensions des données. L'un des principaux avantages de PostgreSQL pour le traitement des données spatiales est qu'il offre plusieurs types de méthodes d'indexation qui fonctionnent bien pour les données multidimensionnelles : GiST, BRIN et SP-GiST.

  • Les index GiST (Generalized Search Tree) décomposent les données en "choses à côté", "choses qui se chevauchent", "choses qui sont à l'intérieur" et peuvent être utilisés sur un large éventail de types de données, y compris les données SIG. PostGIS utilise un index R-Tree implémenté au-dessus de GiST pour indexer les données spatiales. GiST est la méthode d'indexation spatiale la plus couramment utilisée et la plus polyvalente, et offre de très bonnes performances en matière de requêtes.

  • Les index BRIN (Block Range Index) fonctionnent en résumant l'étendue spatiale des plages d'enregistrements de la table. La recherche s'effectue par le biais d'un balayage des plages. L'index BRIN n'est approprié que pour certains types de données (triées dans l'espace, avec des mises à jour peu fréquentes ou inexistantes). Mais il permet une création d'index beaucoup plus rapide et une taille d'index beaucoup plus petite.

  • SP-GiST (Space-Partitioned Generalized Search Tree) est une méthode d'indexation générique qui prend en charge les arbres de recherche partitionnés tels que les arbres quadratiques, les arbres k-d et les arbres radix (tries).

Les index spatiaux ne stockent que la boîte de délimitation des géométries. Les requêtes spatiales utilisent l'index comme filtre primaire pour déterminer rapidement un ensemble de géométries correspondant potentiellement à la condition de la requête. La plupart des requêtes spatiales nécessitent un filtre secondaire qui utilise une fonction de prédicat spatial pour tester une condition spatiale plus spécifique. Pour plus d'informations sur les requêtes avec des prédicats spatiaux, voir Section 5.2, “Utilisation des index spatiaux”.

Voir également la section de l'atelier PostGIS sur les index spatiaux et le manuel de PostgreSQL.

4.9.1. Index GiST

GiST signifie "Generalized Search Tree" (arbre de recherche généralisé) et constitue une forme générique d'indexation pour les données multidimensionnelles. PostGIS utilise un index R-Tree implémenté au-dessus de GiST pour indexer les données spatiales. GiST est la méthode d'indexation spatiale la plus couramment utilisée et la plus polyvalente, et offre de très bonnes performances en matière de requêtes. D'autres implémentations de GiST sont utilisées pour accélérer les recherches sur toutes sortes de structures de données irrégulières (tableaux d'entiers, données spectrales, etc.) qui ne se prêtent pas à l'indexation B-Tree normale. Pour plus d'informations, voir le manuel PostgreSQL.

Dès qu'une table de données spatiales dépasse quelques milliers de lignes, vous devez créer un index pour accélérer les recherches spatiales dans les données (sauf si toutes vos recherches sont basées sur des attributs, auquel cas vous devez créer un index normal sur les champs d'attributs).

La syntaxe pour construire un index GiST sur une colonne "geometry" est la suivante :

CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] ); 

La syntaxe ci-dessus permet toujours de créer un index 2D. Pour obtenir un index à n dimensions pour le type de géométrie, vous pouvez en créer un à l'aide de cette syntaxe :

CREATE INDEX [indexname] ON [tablename] USING GIST ([geometryfield] gist_geometry_ops_nd);

La construction d'un index spatial est un exercice de calcul intensif. Il bloque également l'accès en écriture à votre table pendant le temps de sa création, donc sur un système de production, vous voudrez peut-être le faire d'une manière plus lente, en tenant compte de la notion de CONCURRENCE :

CREATE INDEX CONCURRENTLY [indexname] ON [tablename] USING GIST ( [geometryfield] ); 

Après avoir construit un index, il est parfois utile de forcer PostgreSQL à collecter les statistiques de la table, qui sont utilisées pour optimiser les plans de requête :

VACUUM ANALYZE [table_name] [(column_name)];

4.9.2. Index BRIN

BRIN signifie "Block Range Index". C'est une méthode d'indexation générale introduite dans PostgreSQL 9.5. BRIN est une méthode d'indexation lossy, ce qui signifie qu'une vérification secondaire est nécessaire pour confirmer qu'un enregistrement correspond à une condition de recherche donnée (ce qui est le cas pour tous les index spatiaux fournis). Elle permet une création d'index beaucoup plus rapide et une taille d'index beaucoup plus petite, avec des performances de lecture raisonnables. Son objectif principal est de permettre l'indexation de très grandes tables sur des colonnes qui ont une corrélation avec leur emplacement physique dans la table. Outre l'indexation spatiale, BRIN peut accélérer les recherches sur divers types de structures de données d'attributs (entiers, tableaux, etc.). Pour plus d'informations, voir le Manuel de PostgreSQL.

Dès qu'une table spatiale dépasse quelques milliers de lignes, vous voudrez construire un index pour accélérer les recherches spatiales dans les données. Les index GiST sont très performants tant que leur taille ne dépasse pas la quantité de mémoire vive disponible pour la base de données, et tant que vous pouvez vous permettre la taille de stockage de l'index et le coût de la mise à jour de l'index en écriture. Sinon, pour les très grandes tables, l'index BRIN peut être considéré comme une alternative.

Un index BRIN stocke la boîte englobant toutes les géométries contenues dans les lignes d'un ensemble contigu de blocs de table, appelé plage de blocs. Lors de l'exécution d'une requête à l'aide de l'index, les plages de blocs sont examinées pour trouver celles qui recoupent l'étendue de la requête. Cette méthode n'est efficace que si les données sont physiquement ordonnées de manière à ce que les zones de délimitation des plages de blocs se chevauchent le moins possible (et, dans l'idéal, s'excluent mutuellement). L'index qui en résulte est de très petite taille, mais il est généralement moins performant en lecture qu'un index GiST sur les mêmes données.

La construction d'un index BRIN est beaucoup moins gourmande en ressources CPU que la construction d'un index GiST. Il est courant de constater qu'un index BRIN est dix fois plus rapide à construire qu'un index GiST pour les mêmes données. Et comme un index BRIN ne stocke qu'une seule boîte englobante pour chaque plage de blocs de table, il est courant d'utiliser jusqu'à mille fois moins d'espace disque qu'un index GiST.

Vous pouvez choisir le nombre de blocs à résumer dans une plage. Si vous diminuez ce nombre, l'index sera plus volumineux mais offrira probablement de meilleures performances.

Pour que le BRIN soit efficace, les données de la table doivent être stockées dans un ordre physique qui minimise le chevauchement de l'étendue du bloc. Il se peut que les données soient déjà triées de manière appropriée (par exemple, si elles sont chargées à partir d'un autre jeu de données déjà trié dans l'ordre spatial). Dans le cas contraire, il est possible de trier les données en fonction d'une clé spatiale unidimensionnelle. Une façon de procéder consiste à créer une nouvelle table triée par les valeurs géométriques (qui, dans les versions récentes de PostGIS, utilisent un classement efficace par courbe de Hilbert) :

CREATE TABLE table_sorted AS
   SELECT * FROM table  ORDER BY geom;

Il est également possible de trier les données en place en utilisant un GeoHash comme index (temporaire) et en effectuant un regroupement sur cet index :

CREATE INDEX idx_temp_geohash ON table
    USING btree (ST_GeoHash( ST_Transform( geom, 4326 ), 20));
CLUSTER table USING idx_temp_geohash;

La syntaxe pour construire un index BRIN sur une colonne geometry est la suivante :

CREATE INDEX [indexname] ON [tablename] USING BRIN ( [geome_col] ); 

La syntaxe ci-dessus permet de créer un index en 2D. Pour construire un index à trois dimensions, utilisez la syntaxe suivante :

CREATE INDEX [indexname] ON [tablename]
    USING BRIN ([geome_col] brin_geometry_inclusion_ops_3d);

Vous pouvez également obtenir un index quadridimensionnel à l'aide de la classe d'opérateurs 4D :

CREATE INDEX [indexname] ON [tablename]
    USING BRIN ([geome_col] brin_geometry_inclusion_ops_4d);

Les commandes ci-dessus utilisent le nombre par défaut de blocs dans une plage, qui est de 128. Pour spécifier le nombre de blocs à résumer dans une plage, utilisez la syntaxe suivante

CREATE INDEX [indexname] ON [tablename]
    USING BRIN ( [geome_col] ) WITH (pages_per_range = [number]); 

Gardez à l'esprit qu'un index BRIN ne stocke qu'une entrée d'index pour un grand nombre de lignes. Si votre table stocke des géométries avec un nombre variable de dimensions, il est probable que l'index qui en résultera sera peu performant. Vous pouvez éviter cette pénalité de performance en choisissant la classe d'opérateur avec le plus petit nombre de dimensions des géométries stockées

Le type de données geography est pris en charge pour l'indexation BRIN. La syntaxe pour construire un index BRIN sur une colonne géographique est la suivante :

CREATE INDEX [indexname] ON [tablename] USING BRIN ( [geog_col] ); 

La syntaxe ci-dessus permet de créer un index 2D pour les objets géospatiaux sur le sphéroïde.

Actuellement, seul le "support d'inclusion" est fourni, ce qui signifie que seuls les opérateurs &&, ~ et @ peuvent être utilisés pour les cas 2D (à la fois pour geometry et geography), et seulement l'opérateur &&& pour les géométries 3D. Il n'y a actuellement pas de support pour les recherches kNN.

Une différence importante entre BRIN et les autres types d'index est que la base de données ne maintient pas l'index de manière dynamique. Les modifications apportées aux données spatiales de la table sont simplement ajoutées à la fin de l'index. Cela entraîne une dégradation des performances de recherche de l'index au fil du temps. L'index peut être mis à jour en effectuant un VACUUM, ou en utilisant une fonction spéciale brin_summarize_new_values(regclass). C'est la raison pour laquelle BRIN peut être plus approprié pour les données qui sont en lecture seule ou qui ne changent que rarement. Pour plus d'informations, consultez le manuel.

En résumé, l'utilisation de BRIN pour les données spatiales :

  • Le temps de construction de l'index est très rapide et la taille de l'index est très réduite.

  • Le temps d'interrogation de l'index est plus lent que celui de GiST, mais reste très acceptable.

  • Nécessite que les données du tableau soient triées dans un ordre spatial.

  • Nécessite une maintenance manuelle de l'index.

  • Plus approprié pour les tables de très grande taille, avec peu ou pas de chevauchement (par exemple des points), qui sont statiques ou qui changent peu souvent.

  • Plus efficace pour les requêtes qui renvoient un nombre relativement important d'enregistrements de données.

4.9.3. Index SP-GiST

SP-GiST signifie "Space-Partitioned Generalized Search Tree" et est une forme générique d'indexation pour les types de données multidimensionnelles qui prend en charge les arbres de recherche partitionnés, tels que les arbres quadratiques, les arbres k-d et les arbres radix (tries). La caractéristique commune de ces structures de données est qu'elles divisent de manière répétée l'espace de recherche en partitions qui ne sont pas nécessairement de taille égale. Outre l'indexation spatiale, SP-GiST est utilisé pour accélérer les recherches sur de nombreux types de données, telles que le routage téléphonique, le routage ip, la recherche de substrats, etc. Pour plus d'informations, voir le manuel PostgreSQL.

Comme pour les index GiST, les index SP-GiST sont avec perte, dans le sens où ils stockent la boîte englobante qui entoure les objets spatiaux. Les index SP-GiST peuvent être considérés comme une alternative aux index GiST.

Lorsqu'une table de données SIG dépasse quelques milliers de lignes, un index SP-GiST peut être utilisé pour accélérer les recherches spatiales dans les données. La syntaxe pour construire un index SP-GiST sur une colonne "géométrie" est la suivante :

CREATE INDEX [indexname] ON [tablename] USING SPGIST ( [geometryfield] ); 

La syntaxe ci-dessus permet de créer un index bidimensionnel. Un index tridimensionnel pour le type de géométrie peut être créé à l'aide de la classe d'opérateurs 3D :

CREATE INDEX [indexname] ON [tablename] USING SPGIST ([geometryfield] spgist_geometry_ops_3d);

La création d'un index spatial est une opération très gourmande en ressources informatiques. Elle bloque également l'accès en écriture à votre table pendant la durée de la création, donc sur un système de production, vous voudrez peut-être le faire d'une manière plus lente, en tenant compte de la notion de CONCURRENCE :

CREATE INDEX CONCURRENTLY [indexname] ON [tablename] USING SPGIST ( [geometryfield] ); 

Après avoir construit un index, il est parfois utile de forcer PostgreSQL à collecter les statistiques de la table, qui sont utilisées pour optimiser les plans de requête :

VACUUM ANALYZE [table_name] [(column_name)];

Un index SP-GiST peut accélérer les requêtes impliquant les opérateurs suivants :

  • <<, &<, &>, >>, <<|, &<|, |&>, |>>, &&, @>, <@, et ~=, pour les index à 2 dimensions,

  • &/&, ~==, @>>, et <<@, pour les index à 3 dimensions.

Il n'y a pas de support pour les recherches kNN pour le moment.

4.9.4. Optimisation de l'utilisation de l'index

Normalement, les index accélèrent de manière invisible l'accès aux données : une fois qu'un index est construit, le planificateur de requêtes de PostgreSQL décide automatiquement quand l'utiliser pour améliorer les performances de la requête. Mais dans certaines situations, le planificateur ne choisit pas d'utiliser les index existants, et les requêtes finissent par utiliser des balayages séquentiels lents au lieu d'un index spatial.

Si vous constatez que vos index spatiaux ne sont pas utilisés, il y a plusieurs choses que vous pouvez faire :

  • Examinez le plan de requête et vérifiez que votre requête calcule effectivement ce dont vous avez besoin. Un JOIN erroné, oublié ou vers la mauvaise table, peut récupérer plusieurs fois des enregistrements de la table de manière inattendue. Pour obtenir le plan de la requête, exécutez avec EXPLAIN devant la requête.

  • Assurez-vous que des statistiques sont collectées sur le nombre et la distribution des valeurs dans une table, afin de fournir au planificateur de requêtes de meilleures informations pour prendre des décisions concernant l'utilisation de l'index. La VACUUM ANALYZE calculera les deux.

    Vous devriez de toute façon vacuum régulièrement vos bases de données. De nombreux administrateurs de bases de données PostgreSQL exécutent VACUUM en tant que tâche cron en dehors des heures de pointe sur une base régulière.

  • Si vacuum ne suffit pas, vous pouvez temporairement forcer le planificateur à utiliser les informations d'index en utilisant la commande SET ENABLE_SEQSCAN TO OFF;. De cette façon, vous pouvez vérifier si le planificateur est capable de générer un plan de requête accéléré par l'index pour votre requête. Vous ne devez utiliser cette commande qu'à des fins de débogage ; en règle générale, le planificateur sait mieux que vous quand utiliser les index. Une fois que vous avez exécuté votre requête, n'oubliez pas de lancer la commande SET ENABLE_SEQSCAN TO ON; afin que le planificateur fonctionne normalement pour les autres requêtes.

  • Si SET ENABLE_SEQSCAN TO OFF; aide votre requête à s'exécuter plus rapidement, votre Postgres n'est probablement pas adapté à votre matériel. Si vous trouvez que le planificateur se trompe sur le coût des balayages séquentiels par rapport aux balayages d'index, essayez de réduire la valeur de RANDOM_PAGE_COST dans postgresql.conf, ou utilisez SET RANDOM_PAGE_COST TO 1.1;. La valeur par défaut de RANDOM_PAGE_COST est 4.0. Essayez de la fixer à 1.1 (pour les disques SSD) ou à 2.0 (pour les disques magnétiques rapides). En diminuant la valeur, le planificateur est plus enclin à utiliser les balayages d'index.

  • Si la SET ENABLE_SEQSCAN TO OFF; n'aide pas votre requête, il se peut qu'elle utilise une construction SQL que le planificateur Postgres n'est pas encore en mesure d'optimiser. Il peut être possible de réécrire la requête de manière à ce que le planificateur soit en mesure de la traiter. Par exemple, une sous-requête avec un SELECT en ligne peut ne pas produire un plan efficace, mais peut être réécrite en utilisant un JOIN LATERAL.

Pour plus d'informations, voir la section du manuel Postgres sur Query Planning.

Chapter 5. Requêtes spatiales

La raison d'être des bases de données spatiales est de réaliser à l'intérieur de la base de données des requêtes qui normalement nécessiteraient des fonctionnalités d'un SIG Desktop. Utiliser PostGIS requiert en effet la connaissance de quelles fonctions spatiales sont disponibles, comment les utiliser dans une requête, et de s'assurer de la mise en place adéquate des index, pour une bonne performance.

5.1. Déterminer les relations spatiales

Les relations spatiales indiquent comment deux géométries interagissent l'une avec l'autre. Elles constituent une fonctionnalité fondamentale pour effectuer des requêtes sur des géométries.

5.1.1. Modèle à 9 intersections dimensionnellement étendu

Selon le OpenGIS Simple Features Implementation Specification for SQL, "l'approche de base pour comparer deux géométries consiste à effectuer des tests par paire des intersections entre les intérieurs, les limites et les extérieurs des deux géométries et à classer la relation entre les deux géométries sur la base des entrées de la matrice "intersection" résultante."

Dans la théorie de la topologie des ensembles de points, les points d'une géométrie intégrée dans un espace à deux dimensions sont classés en trois ensembles :

Limites

La limite d'une géométrie est l'ensemble des géométries de la dimension immédiatement inférieure. Pour les POINT, qui ont une dimension de 0, la limite est l'ensemble vide. La limite d'une LINESTRING est constituée par ses deux extrémités. Pour les POLYGON, la limite est le réseau de lignes des anneaux extérieur et intérieur.

Intérieur

L'intérieur d'une géométrie est constitué des points de la géométrie qui ne se trouvent pas dans la limite. Pour les POINT, l'intérieur est le point lui-même. L'intérieur d'une LINESTRING est l'ensemble des points situés entre les extrémités. Pour les POLYGON, l'intérieur est la surface aréale à l'intérieur du polygone.

Extérieur

L'extérieur d'une géométrie est le reste de l'espace dans lequel la géométrie est intégrée ; en d'autres termes, tous les points qui ne se trouvent pas à l'intérieur ou sur la limite de la géométrie. Il s'agit d'une surface non fermée à 2 dimensions.

Le Dimensionally Extended 9-Intersection Model (DE-9IM) décrit la relation spatiale entre deux géométries en spécifiant les dimensions des 9 intersections entre les ensembles ci-dessus pour chaque géométrie. Les dimensions des intersections peuvent être représentées formellement dans une matrice d'intersections de 3x3.

Pour une géométrie g, les Limites, Intérieures, et Extérieures sont désignés par la notation I(g), B(g), et E(g). En outre, dim(s) désigne la dimension d'un ensemble s dont le domaine est {0,1,2,F} :

  • 0 => point

  • 1 => ligne

  • 2 => area

  • F => ensemble vide

En utilisant cette notation, la matrice d'intersection pour deux géométries a et b est :

 IntérieurLimiteExtérieur
Intérieurdim( I(a) ∩ I(b) )dim( I(a) ∩ B(b) )dim( I(a) ∩ E(b) )
Limitedim( B(a) ∩ I(b) )dim( B(a) ∩ B(b) )dim( B(a) ∩ E(b) )
Extérieurdim( E(a) ∩ I(b) )dim( E(a) ∩ B(b) )dim( E(a) ∩ E(b) )

Visuellement, pour deux géométries polygonales qui se chevauchent, cela ressemble à ce qui suit :

 
 IntérieurLimiteExtérieur
Intérieur

dim( I(a) ∩ I(b) ) = 2

dim( I(a) ∩ B(b) = 1

dim( I(a) ∩ E(b) ) = 2

Limite

dim( B(a) ∩ I(b) ) = 1

dim( B(a) ∩ B(b) ) = 0

dim( B(a) ∩ E(b) ) = 1

Extérieur

dim( E(a) ∩ I(b) ) = 2

dim( E(a) ∩ B(b) ) = 1

dim( E(a) ∩ E(b) = 2

En lisant de gauche à droite et de haut en bas, la matrice d'intersection est représentée par la chaîne de texte "212101212".

Pour plus d'informations, voir :

5.1.2. Relations spatiales nommées

Pour faciliter la détermination des relations spatiales communes, l'OGC SFS définit un ensemble de prédicats de relations spatiales. PostGIS fournit ces prédicats sous la forme des fonctions ST_Contains, ST_Crosses, ST_Disjoint, ST_Equals, ST_Intersects, ST_Overlaps, ST_Touches, ST_Within. Il définit également les prédicats de relation non standard ST_Covers, ST_CoveredBy, et ST_ContainsProperly.

Les prédicats spatiaux sont généralement utilisés comme conditions dans les clauses SQL WHERE ou JOIN. Les prédicats spatiaux nommés utilisent automatiquement un index spatial s'il existe, de sorte qu'il n'est pas nécessaire d'utiliser également l'opérateur de boîte de délimitation &&. Par exemple :

SELECT city.name, state.name, city.geom
FROM city JOIN state ON ST_Intersects(city.geom, state.geom);

Pour plus de détails et d'illustrations, voir l' Atelier PostGIS.

5.1.3. Relations spatiales générales

Dans certains cas, les relations spatiales nommées sont insuffisantes pour fournir une condition de filtrage spatial souhaitée.

Prenons l'exemple d'un ensemble de données linéaires représentant un réseau routier. Il peut être nécessaire d'identifier tous les segments de route qui se croisent, non pas en un point, mais en une ligne (peut-être pour valider une règle commerciale). Dans ce cas, ST_Crosses ne fournit pas le filtre spatial nécessaire, puisque pour les caractéristiques linéaires, il renvoie true uniquement lorsqu'elles se croisent en un point.

Une solution en deux étapes consisterait à calculer d'abord l'intersection réelle (ST_Intersection) des paires de lignes routières qui se croisent dans l'espace (ST_Intersects), puis vérifier si le ST_GeometryType de l'intersection est "LINESTRING" (en traitant correctement les cas qui renvoient des GEOMETRYCOLLECTIONs de [MULTI]POINTs, [MULTI]LINESTRINGs, etc. ).

Il est évident qu'une solution plus simple et plus rapide est souhaitable.

Un deuxième exemple est la localisation des quais qui coupent les limites d'un lac sur une ligne et dont l'une des extrémités se trouve sur le rivage. En d'autres termes, lorsqu'un quai est situé à l'intérieur d'un lac mais n'est pas complètement contenu par celui-ci, qu'il coupe la limite d'un lac sur une ligne et que l'une des extrémités du quai se trouve à l'intérieur ou sur la limite du lac. Il est possible d'utiliser une combinaison de prédicats spatiaux pour trouver les caractéristiques requises :

Ces exigences peuvent être satisfaites en calculant la matrice d'intersection DE-9IM complète. PostGIS fournit la fonction ST_Relate pour ce faire :

SELECT ST_Relate( 'LINESTRING (1 1, 5 5)',
                  'POLYGON ((3 3, 3 7, 7 7, 7 3, 3 3))' );
st_relate
-----------
1010F0212

Pour tester une relation spatiale particulière, un modèle de matrice d'intersection est utilisé. Il s'agit de la représentation matricielle augmentée des symboles supplémentaires {T,*} :

  • T => la dimension d'intersection est non vide ; c'est-à-dire qu'elle se trouve dans {0,1,2}

  • * => indifférent

Les modèles de matrice d'intersection permettent d'évaluer des relations spatiales spécifiques de manière plus succincte. Les fonctions ST_Relate et ST_RelateMatch peuvent être utilisées pour tester les modèles de matrice d'intersection. Pour le premier exemple ci-dessus, le modèle de matrice d'intersection spécifiant deux lignes se croisant dans une ligne est '1*1***1**' :

-- Find road segments that intersect in a line
SELECT a.id
FROM roads a, roads b
WHERE a.id != b.id
      AND a.geom && b.geom
      AND ST_Relate(a.geom, b.geom, '1*1***1**');

Pour le deuxième exemple, le modèle de matrice d'intersection spécifiant une ligne située en partie à l'intérieur et en partie à l'extérieur d'un polygone est "102101FF2" :

-- Find wharves partly on a lake's shoreline
SELECT a.lake_id, b.wharf_id
FROM lakes a, wharfs b
WHERE a.geom && b.geom
      AND ST_Relate(a.geom, b.geom, '102101FF2');

5.2. Utilisation des index spatiaux

Lors de la construction de requêtes utilisant des conditions spatiales, il est important, pour de meilleures performances, de s'assurer qu'un index spatial est utilisé, s'il existe (voir Section 4.9, “Index spatiaux”). Pour ce faire, un opérateur spatial ou une fonction sensible à l'index doit être utilisé dans une clause WHERE ou ON de la requête.

Les opérateurs spatiaux comprennent les opérateurs de boîte de délimitation (dont le plus couramment utilisé est && ; voir Section 7.10.1, “Opérateurs de Bounding Box” pour la liste complète) et les opérateurs de distance utilisés dans les requêtes sur les plus proches voisins (le plus courant étant <-> ; voir Section 7.10.2, “Opérateurs de distance” pour la liste complète.)

Les fonctions tenant compte de l'index ajoutent automatiquement un opérateur de boîte de délimitation à la condition spatiale. Les fonctions tenant compte de l'index comprennent les prédicats de relation spatiale nommés ST_Contains, ST_ContainsProperly, ST_CoveredBy, ST_Covers, ST_Crosses, ST_Intersects, ST_Overlaps, ST_Touches, ST_Within, ST_Within, et ST_3DIntersects, et les prédicats de distance ST_DWithin, ST_DFullyWithin, ST_3DDFullyWithin, et ST_3DDWithin . )

Les fonctions telles que ST_Distance n'utilisent pas les index pour optimiser leur fonctionnement. Par exemple, la requête suivante serait assez lente sur une grande table :

SELECT geom
FROM geom_table
WHERE ST_Distance( geom, 'SRID=312;POINT(100000 200000)' ) < 100

Cette requête sélectionne toutes les géométries de la geom_table qui se trouvent à moins de 100 unités du point (100000, 200000). Elle sera lente car elle calcule la distance entre chaque point du tableau et le point spécifié, c'est-à-dire qu'un calcul ST_Distance() est effectué pour chaque ligne du tableau.

Le nombre de lignes traitées peut être considérablement réduit en utilisant la fonction d'indexation ST_DWithin :

SELECT geom
FROM geom_table
WHERE ST_DWithin( geom, 'SRID=312;POINT(100000 200000)', 100 )

Cette requête sélectionne les mêmes géométries, mais de manière plus efficace. Ceci est possible en ST_DWithin() utilisant l'opérateur && en interne sur une boîte de délimitation élargie de la géométrie de la requête. S'il existe un index spatial sur geom, le planificateur de requêtes reconnaîtra qu'il peut utiliser l'index pour réduire le nombre de lignes analysées avant de calculer la distance. L'index spatial permet d'extraire uniquement les enregistrements dont les boîtes de délimitation chevauchent l'étendue élargie et qui, par conséquent, pourraient se trouver à l'intérieur de la distance requise. La distance réelle est ensuite calculée pour confirmer l'inclusion de l'enregistrement dans l'ensemble des résultats.

Pour plus d'informations et d'exemples, voir l' atelier de travail PostGIS.

5.3. Exemples de SQL spatial

Les exemples de cette section utilisent une table de routes linéaires et une table de limites de communes polygonales. La définition de la table bc_roads est la suivante :

Column    | Type              | Description
----------+-------------------+-------------------
gid       | integer           | Unique ID
name      | character varying | Road Name
geom      | geometry          | Location Geometry (Linestring)

La définition de la table bc_municipality est la suivante :

Column   | Type              | Description
---------+-------------------+-------------------
gid      | integer           | Unique ID
code     | integer           | Unique ID
name     | character varying | City / Town Name
geom     | geometry          | Location Geometry (Polygon)

5.3.1.

Quelle est la longueur totale de toutes les routes, exprimée en kilomètres ?

Vous pouvez répondre à cette question à l'aide d'un code SQL très simple :

SELECT sum(ST_Length(geom))/1000 AS km_roads FROM bc_roads;

km_roads
------------------
70842.1243039643

5.3.2.

Quelle est la superficie de la ville de Prince George, en hectares ?

Cette requête combine une condition d'attribut (sur le nom de la municipalité) avec un calcul spatial (de la surface du polygone) :

SELECT
  ST_Area(geom)/10000 AS hectares
FROM bc_municipality
WHERE name = 'PRINCE GEORGE';

hectares
------------------
32657.9103824927

5.3.3.

Quelle est la plus grande municipalité de la province, en termes de superficie ?

Cette requête utilise une mesure spatiale comme valeur de référence. Il existe plusieurs façons d'aborder ce problème, mais la plus efficace est la suivante :

SELECT
  name,
  ST_Area(geom)/10000 AS hectares
FROM bc_municipality
ORDER BY hectares DESC
LIMIT 1;

name           | hectares
---------------+-----------------
TUMBLER RIDGE  | 155020.02556131

Notez que pour répondre à cette question, nous devons calculer la surface de chaque polygone. Si nous faisions cela souvent, il serait logique d'ajouter une colonne de surface à la table qui pourrait être indexée pour des raisons de performance. En ordonnant les résultats dans une direction décroissante et en utilisant la commande "LIMIT" de PostgreSQL, nous pouvons facilement sélectionner la plus grande valeur sans utiliser une fonction d'agrégation comme MAX().

5.3.4.

Quelle est la longueur des routes entièrement comprises dans chaque municipalité ?

Il s'agit d'un exemple de "jointure spatiale", qui rassemble les données de deux tables (avec une jointure) en utilisant une interaction spatiale ("contenu") comme condition de jointure (plutôt que l'approche relationnelle habituelle de jointure sur une clé commune) :

SELECT
  m.name,
  sum(ST_Length(r.geom))/1000 as roads_km
FROM bc_roads AS r
JOIN bc_municipality AS m
  ON ST_Contains(m.geom, r.geom)
GROUP BY m.name
ORDER BY roads_km;

name                        | roads_km
----------------------------+------------------
SURREY                      | 1539.47553551242
VANCOUVER                   | 1450.33093486576
LANGLEY DISTRICT            | 833.793392535662
BURNABY                     | 773.769091404338
PRINCE GEORGE               | 694.37554369147
...

Cette requête prend un certain temps, car chaque route du tableau est résumée dans le résultat final (environ 250 000 routes pour le tableau de l'exemple). Pour des ensembles de données plus petits (plusieurs milliers d'enregistrements sur plusieurs centaines), la réponse peut être très rapide.

5.3.5.

Créez un nouveau tableau avec toutes les routes de la ville de Prince George.

Il s'agit d'un exemple de "superposition", qui prend en compte deux tableaux et produit un nouveau tableau composé de résultats coupés dans l'espace. Contrairement à la "jointure spatiale" présentée ci-dessus, cette requête crée de nouvelles géométries. Une superposition est comme une jointure spatiale turbocompressée, et est utile pour des travaux d'analyse plus précis :

CREATE TABLE pg_roads as
SELECT
  ST_Intersection(r.geom, m.geom) AS intersection_geom,
  ST_Length(r.geom) AS rd_orig_length,
  r.*
FROM bc_roads AS r
JOIN bc_municipality AS m
  ON ST_Intersects(r.geom, m.geom)
WHERE
  m.name = 'PRINCE GEORGE';

5.3.6.

Quelle est la longueur en kilomètres de "Douglas St" à Victoria ?

SELECT
  sum(ST_Length(r.geom))/1000 AS kilometers
FROM bc_roads r
JOIN bc_municipality m
  ON ST_Intersects(m.geom, r.geom
WHERE
  r.name = 'Douglas St'
  AND m.name = 'VICTORIA';

kilometers
------------------
4.89151904172838

5.3.7.

Quel est le plus grand polygone municipal comportant un trou ?

SELECT gid, name, ST_Area(geom) AS area
FROM bc_municipality
WHERE ST_NRings(geom) 
> 1
ORDER BY area DESC LIMIT 1;

gid  | name         | area
-----+--------------+------------------
12   | SPALLUMCHEEN | 257374619.430216

Chapter 6. Conseils sur les performances

6.1. Petites tables de grandes géométries

6.1.1. Description du problème

Les versions de PostgreSQL actuelles (y compris 8.0) souffrent d'une faiblesse optimiseur de requête relative les tables TOAST. Tables TOAST sont une sorte de «salle de l'extension" utilisé pour stocker de grandes valeurs (dans le sens de la taille des données) qui ne rentrent pas dans les pages de données normales (comme de longs textes, images ou des géométries complexes avec beaucoup de sommets), voir Documentation PostgreSQL pour TOAST pour plus d'informations).

Le problème apparaît s'il vous arrive d'avoir une table avec d'assez grandes géométries, mais pas beaucoup de lignes d'entre elles (comme un tableau contenant les frontières de tous les pays européens en haute résolution). Ensuite, le tableau lui-même est petit, mais il utilise beaucoup d'espace TOAST. Dans notre exemple, le cas, la table elle-même avait environ 80 lignes et seulement 3 pages de données utilisées, mais la table TOAST 8225 pages utilisé.

Maintenant émettre une requête en utilisant l'opérateur de géométrie && pour rechercher une boîte englobante qui correspond que très peu de ces lignes. Maintenant l'optimiseur de requêtes voit que la table n'a que 3 pages et 80 lignes. Il estime qu'une analyse séquentielle sur une telle petite table est beaucoup plus rapide que d'utiliser un index. Et alors il décide d'ignorer l'index GIST. Habituellement, cette estimation est correcte. Mais dans notre cas, l'opérateur && doit aller chercher chaque géométrie à partir du disque pour comparer les boîtes englobantes, et par conséquent la lecture de toutes les pages TOAST également.

Pour voir si vous souffrez de ce problème, utilisez la commande postgresql "EXPLAIN ANALYZE". Pour plus d'informations et les détails techniques, vous pouvez lire le fil de discussion sur la liste de diffusion sur les performances de PostgreSQL : http://archives.postgresql.org/pgsql-performance/2005-02/msg00030.php

et un fil d'actualités plus récent sur PostGIS https://lists.osgeo.org/pipermail/postgis-devel/2017-June/026209.html

6.1.2. Solutions de contournement

Les personnes de PostgreSQL essayent de résoudre ce problème en faisant l'estimation de la requête TOAST-courant. Pour l'instant, voici deux solutions :

La première solution consiste à forcer le planificateur de requêtes à utiliser l'index. Envoyer "SET enable_seqscan TO off;" au serveur avant d'émettre la requête. Cela force le planificateur de requêtes à éviter balayages séquentiels lorsque cela est possible. Donc, il utilise l'index GIST comme d'habitude. Mais cet indicateur doit être fixé à chaque connexion, et il provoque le planificateur de requêtes à faire des erreurs d'estimation dans les autres cas, vous devrez donc faire "SET POUR enable_seqscan sur;" après la requête.

La deuxième solution consiste à faire le balayage séquentielle aussi vite que le planificateur de requêtes pense. Ceci peut être réalisé en créant une colonne supplémentaire qui "cache" la bbox, et contre cette correspondance. Dans notre exemple, les commandes sont comme :

SELECT AddGeometryColumn('myschema','mytable','bbox','4326','GEOMETRY','2');
UPDATE mytable SET bbox = ST_Envelope(ST_Force2D(geom));

Modifiez maintenant votre requête pour utiliser l'opérateur && contre bbox au lieu de geom_column, comme suit :

SELECT geom_column
FROM mytable
WHERE bbox && ST_SetSRID('BOX3D(0 0,1 1)'::box3d,4326);

Bien sûr, si vous changez ou ajoutez des lignes à mytable, vous devez garder la bbox "synchro". La façon la plus transparente pour ce faire serait des déclencheurs, mais vous pouvez également modifier votre application afin de maintenir la colonne bbox courante ou exécuter la requête UPDATE ci-dessus après chaque modification.

6.2. CLUSTER d'index géométriques

Pour les tables qui sont pour la plupart en lecture seule, et où un seul index est utilisé pour la majorité des requêtes, PostgreSQL offre la commande CLUSTER. Cette commande réorganise physiquement toutes les lignes de données dans le même ordre que les critères de l'index, ce qui donne deux avantages de performance : d'abord, pour des analyses d'intervalle de l'index, le nombre de recherche sur la table de données est considérablement réduit. Deuxièmement, si votre jeu de travail se concentre à quelques petits intervalles sur les index, vous avez une mise en cache plus efficace parce que les lignes de données sont dispersées sur moins de pages de données. (N'hésitez pas à lire la documentation de la commande CLUSTER du manuel PostgreSQL à ce stade)

Cependant, PostgreSQL ne permet actuellement pas le clustering sur les index GIST de PostGIS car les indices GIST ignorent les valeurs NULL, vous obtenez un message d'erreur comme :

lwgeom=# CLUSTER my_geom_index ON my_table;
ERROR: cannot cluster when index access method does not handle null values
HINT: You may be able to work around this by marking column "geom" NOT NULL.

Comme le message d'ASTUCES vous le dit, on peut contourner cette lacune en ajoutant une contrainte "not null" à la table :

lwgeom=# ALTER TABLE my_table ALTER COLUMN geom SET not null;
ALTER TABLE

Bien sûr, cela ne fonctionnera pas si vous avez besoin, dans les faits, de valeurs NULL dans la colonne de géométrie. En outre, vous devez utiliser la méthode ci-dessus pour ajouter la contrainte, en utilisant une contrainte CHECK comme "ALTER TABLE blubb ADD CHECK (geometry is not null)" ne fonctionnera pas.

6.3. Eviter les conversions de dimension

Il arrive parfois que vous ayez des données 3D ou 4D dans votre table, mais que vous y accédiez toujours à l'aide des fonctions ST_AsText() ou ST_AsBinary() conformes à OpenGIS qui ne produisent que des géométries 2D. Pour ce faire, elles appellent en interne la fonction ST_Force2D(), qui introduit une surcharge importante pour les géométries de grande taille. Pour éviter cette surcharge, il peut être possible de pré-déposer ces dimensions supplémentaires une fois pour toutes :

UPDATE mytable SET geom = ST_Force2D(geom);
VACUUM FULL ANALYZE mytable;

Notez que si vous avez ajouté votre colonne de géométrie à l'aide AddGeometryColumn (), il y aura une contrainte sur la dimension de la géométrie. Pour contourner vous devrez supprimer la contrainte. N'oubliez pas de mettre à jour l'entrée dans la table geometry_columns et recréer la contrainte par la suite.

En cas de grandes tables, il peut être judicieux de diviser cette mise à jour en petites portions en restreignant l'UPDATE à une partie de la table via une clause WHERE et votre clé primaire ou d'un autre critère, et exécutant un simple «VACUUM» ; entre votre mises à jour. Cela réduit considérablement le besoin d'espace disque temporaire. En outre, si vous avez des données géométriques de dimension mixte, restreindre la mise à jour en "WHERE dimension(the_geom)>2" saute la ré-écriture des géométries qui sont déjà en 2D.

Chapter 7. Référence PostGIS

Les fonctions suivantes sont celles dont un utilisateur normal de PostGIS peut avoir besoin. Il existe d'autres fonctions nécessaires au fonctionnement de PostGIS. Elles ne sont normalement pas destinées à un utilisateur standard.

[Note]

PostGIS a entamé une phase de transition concernant le nom des fonctions pour les faire correspondre à la norme SQL-MM. La plupart des fonctions ont été renommées en utilisant le préfixe des types spatiaux (ST, pour Spatial Type). Les anciennes fonctions, toujours disponibles, ne sont pas listées ci-après si leur équivalent est disponible. Les fonctions non préfixées par ST, qui ne sont pas listées dans cette documentation, sont dépréciées et seront supprimées des prochaines version de PostGIS. IL NE FAUT PLUS LES UTILISER.

7.1. Types de données PostGIS Geometry/Geography/Box

Abstract

Cette section répertorie les types de données PostgreSQL personnalisés installés par PostGIS pour représenter les données spatiales.

Chaque type de données décrit son comportement de type cast. Un type cast convertit les valeurs d'un type de données en un autre type. PostgreSQL permet de définir le comportement de casting pour les types personnalisés, ainsi que les fonctions utilisées pour convertir les valeurs du type. Les cast peuvent avoir un comportement automatique, ce qui permet la conversion automatique d'un argument de fonction vers un type supporté par la fonction.

Certains castings ont un comportement explicite, ce qui signifie que le cast doit être spécifié en utilisant la syntaxe CAST(myval As sometype) ou myval::sometype. Le casting explicite évite le problème des casts ambigus, qui peuvent se produire lors de l'utilisation d'une fonction surchargée qui ne supporte pas un type donné. Par exemple, une fonction peut accepter un box2d ou un box3d, mais pas un geometry. Puisque la géométrie a un cast automatique vers les deux types de boîtes, cela produit une erreur de "fonction ambiguë". Pour éviter cette erreur, utilisez un cast explicite vers le type de boîte souhaité.

Tous les types de données peuvent être transformés en text, il n'est donc pas nécessaire de le spécifier explicitement.

  • box2d — Le type représentant une boîte de délimitation bidimensionnelle.
  • box3d — Le type représentant une boîte de délimitation tridimensionnelle.
  • geometry — Le type représentant les caractéristiques spatiales avec des systèmes de coordonnées planaires.
  • geometry_dump — Un type composite utilisé pour décrire les parties d'une géométrie complexe.
  • geography — Le type représentant les entités spatiales avec des systèmes de coordonnées géodésiques (ellipsoïdales).

Name

box2d — Le type représentant une boîte de délimitation bidimensionnelle.

Description

box2d est un type de données spatiales utilisé pour représenter la boîte de délimitation bidimensionnelle entourant une géométrie ou une collection de géométries. Par exemple, la fonction d'agrégation ST_Extent renvoie un objet box2d.

La représentation contient les valeurs xmin, ymin, xmax, ymax. Ce sont les valeurs minimales et maximales des étendues X et Y.

Les objets box2d ont une représentation textuelle qui ressemble à BOX(1 2,5 6).

Transtypages

Ce tableau énumère les casts automatiques et explicites autorisés pour ce type de données :

Transtypage versComportement
box3dautomatique
geometryautomatique

Name

box3d — Le type représentant une boîte de délimitation tridimensionnelle.

Description

box3d est un type de données spatiales PostGIS utilisé pour représenter la boîte de délimitation tridimensionnelle entourant une géométrie ou une collection de géométries. Par exemple, la fonction d'agrégation ST_3DExtent renvoie un objet box3d.

La représentation contient les valeurs xmin, ymin, zmin, xmax, ymax, zmax. Il s'agit des valeurs minimales et maximales des étendues X, Y et Z.

Les objets box3d ont une représentation textuelle qui ressemble à BOX3D(1 2 3,5 6 5).

Transtypages

Ce tableau énumère les casts automatiques et explicites autorisés pour ce type de données :

Transtypage versComportement
boxautomatique
box2dautomatique
geometryautomatique

Name

geometry — Le type représentant les caractéristiques spatiales avec des systèmes de coordonnées planaires.

Description

géométrie est un type de données spatiales fondamental de PostGIS utilisé pour représenter une caractéristique dans des systèmes de coordonnées planes (euclidiennes).

Toutes les opérations spatiales sur la géométrie utilisent les unités du système de référence spatiale dans lequel se trouve la géométrie.

Transtypages

Ce tableau énumère les casts automatiques et explicites autorisés pour ce type de données :

Transtypage versComportement
boxautomatique
box2dautomatique
box3dautomatique
byteaautomatique
geographyautomatique
textautomatique

Name

geometry_dump — Un type composite utilisé pour décrire les parties d'une géométrie complexe.

Description

geometry_dump est un type de données composite contenant les champs :

  • geom - une géométrie représentant un composant de la géométrie explosée. Le type de géométrie dépend de la fonction d'origine.

  • path[] - un tableau d'entiers qui définit le chemin de navigation dans la géométrie explosée vers le composant geom. Le tableau de chemins est basé sur 1 (c'est-à-dire que path[1] est le premier élément)

Il est utilisé par la famille de fonctions ST_Dump* comme type de sortie pour exploser une géométrie complexe en ses parties constitutives.


Name

geography — Le type représentant les entités spatiales avec des systèmes de coordonnées géodésiques (ellipsoïdales).

Description

geography est un type de données spatiales utilisé pour représenter une entité dans les systèmes de coordonnées géodésiques. Les systèmes de coordonnées géodésiques modélisent la terre à l'aide d'un ellipsoïde.

Les opérations spatiales sur le type geography fournissent des résultats plus précis en prenant en compte le modèle ellipsoïdal.

Transtypages

Ce tableau énumère les casts automatiques et explicites autorisés pour ce type de données :

Transtypage versComportement
geometryexplicite

7.2. Fonctions de gestion des tables

Abstract

Ces fonctions permettent de définir des tables contenant des colonnes géométriques.

  • AddGeometryColumn — Ajoute une colonne de géométrie à une table existante.
  • DropGeometryColumn — Supprime une colonne géométrique d'une table spatiale.
  • DropGeometryTable — Supprime une table et toutes ces références dans geometry_columns.
  • Find_SRID — Renvoie le SRID défini pour une colonne géométrique.
  • Populate_Geometry_Columns — Assure que les colonnes géométriques sont définies avec des modificateurs de type ou qu'elles sont soumises à des contraintes spatiales appropriées.
  • UpdateGeometrySRID — Met à jour le SRID de tous les éléments d'une colonne géométrique et les métadonnées de la table.

Name

AddGeometryColumn — Ajoute une colonne de géométrie à une table existante.

Synopsis

text AddGeometryColumn(varchar table_name, varchar column_name, integer srid, varchar type, integer dimension, boolean use_typmod=true);

text AddGeometryColumn(varchar schema_name, varchar table_name, varchar column_name, integer srid, varchar type, integer dimension, boolean use_typmod=true);

text AddGeometryColumn(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name, integer srid, varchar type, integer dimension, boolean use_typmod=true);

Description

Ajoute une colonne géométrique à une table attributaire existante. schema_name est le nom du schéma de la table. srid est un entier positif présent dans la table SPATIAL_REF_SYS. type est le type de géométrie en texte, par exemple 'POLYGON' ou 'MULTILINESTRING'. Une erreur est renvoyée si le schéma n'existe pas (ou n'est pas visible dans le search_path courant) ou si le SRID, type de géométrie ou dimension est invalide.

[Note]

Changement : 2.0.0 Cette fonction ne met plus à jour geometry_columns maintenant que geometry_columns est une vue basée sur le catalogue système. Par défaut, elle ne créée plus de contraintes mais utilise le modificateur de type de PostgreSQL. Ainsi, par exemple, créer une colonne de type POINT WGS84 est désormais équivalent à : ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326) ;

Changement : 2.0.0 Si l'ancien mécanisme basé sur les contraintes est nécessaire, utiliser le paramètre use_typmod avec la valeur false.

[Note]

Changement : 2.0.0 Les vues ne peuvent plus être enregistrées dans geometry_columns. Cependant, les vues construites à partir de tables contenant des géométries définies avec le modificateur de type et n'utilisant pas de fonctions d'encapsulation seront enregistrées dans la vue geometry_columns car elles héritent du mécanisme des tables dont elles sont issues. Les vues utilisant des fonctions renvoyant d'autres géométries doivent être transtypées vers des géométries avec modificateur de type pour pouvoir être correctement référencées dans la vue geometry_columns. Cf. Section 4.6.3, “Enregistrement manuel des colonnes de géométrie”.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Amélioration : 2.0.0 introduction du paramètre use_typmod. Le comportement par défaut est de créer une colonne géométrique avec modificateur de type au lieu de contraintes sur la colonne.

Exemples

-- Create schema to hold data
CREATE SCHEMA my_schema;
-- Create a new simple PostgreSQL table
CREATE TABLE my_schema.my_spatial_table (id serial);

-- Describing the table shows a simple table with a single "id" column.
postgis=# \d my_schema.my_spatial_table
                                                         Table "my_schema.my_spatial_table"
 Column |  Type   |                                Modifiers
--------+---------+-------------------------------------------------------------------------
 id     | integer | not null default nextval('my_schema.my_spatial_table_id_seq'::regclass)

-- Add a spatial column to the table
SELECT AddGeometryColumn ('my_schema','my_spatial_table','geom',4326,'POINT',2);

-- Add a point using the old constraint based behavior
SELECT AddGeometryColumn ('my_schema','my_spatial_table','geom_c',4326,'POINT',2, false);

--Add a curvepolygon using old constraint behavior
SELECT AddGeometryColumn ('my_schema','my_spatial_table','geomcp_c',4326,'CURVEPOLYGON',2, false);

-- Describe the table again reveals the addition of a new geometry columns.
\d my_schema.my_spatial_table
                            addgeometrycolumn
-------------------------------------------------------------------------
 my_schema.my_spatial_table.geomcp_c SRID:4326 TYPE:CURVEPOLYGON DIMS:2
(1 row)

                                    Table "my_schema.my_spatial_table"
  Column  |         Type         |                                Modifiers
----------+----------------------+-------------------------------------------------------------------------
 id       | integer              | not null default nextval('my_schema.my_spatial_table_id_seq'::regclass)
 geom     | geometry(Point,4326) |
 geom_c   | geometry             |
 geomcp_c | geometry             |
Check constraints:
    "enforce_dims_geom_c" CHECK (st_ndims(geom_c) = 2)
    "enforce_dims_geomcp_c" CHECK (st_ndims(geomcp_c) = 2)
    "enforce_geotype_geom_c" CHECK (geometrytype(geom_c) = 'POINT'::text OR geom_c IS NULL)
    "enforce_geotype_geomcp_c" CHECK (geometrytype(geomcp_c) = 'CURVEPOLYGON'::text OR geomcp_c IS NULL)
    "enforce_srid_geom_c" CHECK (st_srid(geom_c) = 4326)
    "enforce_srid_geomcp_c" CHECK (st_srid(geomcp_c) = 4326)

-- geometry_columns view also registers the new columns --
SELECT f_geometry_column As col_name, type, srid, coord_dimension As ndims
    FROM geometry_columns
    WHERE f_table_name = 'my_spatial_table' AND f_table_schema = 'my_schema';

 col_name |     type     | srid | ndims
----------+--------------+------+-------
 geom     | Point        | 4326 |     2
 geom_c   | Point        | 4326 |     2
 geomcp_c | CurvePolygon | 4326 |     2

Name

DropGeometryColumn — Supprime une colonne géométrique d'une table spatiale.

Synopsis

text DropGeometryColumn(varchar table_name, varchar column_name);

text DropGeometryColumn(varchar schema_name, varchar table_name, varchar column_name);

text DropGeometryColumn(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name);

Description

Supprime une colonne géométrique d'une table spatiale. Note : schema_name doit correspondre au champ f_table_schema de la table geometry_columns.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

[Note]

Changement : 2.0.0 Fonction assurant la rétro compatibilité. Maintenant que geometry_columns est une vue basée sur les catalogues du système, la colonne géométrique peut être supprimée d'une table comme tout autre colonne en utilisant ALTER TABLE

Exemples

SELECT DropGeometryColumn ('my_schema','my_spatial_table','geom');
                        ----RESULT output ---
                                          dropgeometrycolumn
------------------------------------------------------
 my_schema.my_spatial_table.geom effectively removed.

-- In PostGIS 2.0+ the above is also equivalent to the standard
-- the standard alter table.  Both will deregister from geometry_columns
ALTER TABLE my_schema.my_spatial_table DROP column geom;
                

Name

DropGeometryTable — Supprime une table et toutes ces références dans geometry_columns.

Synopsis

boolean DropGeometryTable(varchar table_name);

boolean DropGeometryTable(varchar schema_name, varchar table_name);

boolean DropGeometryTable(varchar catalog_name, varchar schema_name, varchar table_name);

Description

Supprime une table et toutes ces références dans geometry_columns. Note : utilise la fonction current_schema() sur les installations PostgreSQL le supportant, si le schéma n'est pas fourni.

[Note]

Changement : 2.0.0 Function assurant la rétro compatibilité. Maintenant que geometry_columns est une vue basée sur les catalogues du système, une table spatiale peut etre supprimée comme tout autre table en utilisant ALTER TABLE

Exemples

SELECT DropGeometryTable ('my_schema','my_spatial_table');
----RESULT output ---
my_schema.my_spatial_table dropped.

-- The above is now equivalent to --
DROP TABLE my_schema.my_spatial_table;
                

Name

Find_SRID — Renvoie le SRID défini pour une colonne géométrique.

Synopsis

integer Find_SRID(varchar a_schema_name, varchar a_table_name, varchar a_geomfield_name);

Description

Renvoie le SRID entier de la colonne géométrique spécifiée en effectuant une recherche dans la table GEOMETRY_COLUMNS. Si la colonne géométrique n'a pas été correctement ajoutée (par exemple avec la fonction AddGeometryColumn), cette fonction ne fonctionnera pas.

Exemples

SELECT Find_SRID('public', 'tiger_us_state_2007', 'geom_4269');
find_srid
----------
4269

Voir aussi

ST_SRID


Name

Populate_Geometry_Columns — Assure que les colonnes géométriques sont définies avec des modificateurs de type ou qu'elles sont soumises à des contraintes spatiales appropriées.

Synopsis

text Populate_Geometry_Columns(boolean use_typmod=true);

int Populate_Geometry_Columns(oid relation_oid, boolean use_typmod=true);

Description

S'assure que les colonnes géométriques ont des modificateurs de type ou des contraintes spatiales appropriés pour garantir qu'elles sont enregistrées correctement dans la vue geometry_columns. Par défaut, convertira toutes les colonnes géométriques sans modificateur de type en colonnes avec modificateur de type.

Pour conserver la rétro compatibilité et pour des besoins particuliers comme par exemple des tables héritées ayant des types géométriques différents, l'ancien mécanisme est toujours supporté. Si ce mécanisme est nécessaire, le nouveau paramètre optionnel doit être mis à false : use_typmod=false. Avec cette valeur, la colonne géométrique sera créée sans modificateur de type mais 3 contraintes seront définies. Cela signifie concrètement que chaque colonne géométrique de la table aura au moins 3 contraintes :

  • enforce_dims_geom - garantit que chaque géométrie a la même dimension (voir ST_NDims)

  • enforce_geotype_geom - garantit que chaque géométrie est du même type (voir GeometryType)

  • enforce_srid_the_geom - s'assure que toutes les géométries sont dans la même projection (see ST_SRID)

Si un identifiant de table oid est fourni, cette fonction tente de déterminer le SRID, la dimension et le type géométrique de toutes les colonnes géométriques de la table, ajoutant des contraintes si nécessaire. En cas de succès, une ligne est insérée dans la table geometry_columns, sinon, une erreur est affichée indiquant le problème.

Si le oid d'une vue est fourni, comme avec un oid de table, cette fonction essaie de déterminer le srid, la dimension et le type de toutes les géométries de la vue, en insérant les entrées appropriées dans la table geometry_columns, mais rien n'est fait pour appliquer les contraintes.

La version sans paramètre est un raccourci pour la version avec paramètres. Elle vide puis remplit la table geometry_columns pour chaque table ou vue spatiale de la base, ajoutant les contraintes aux tables si besoin. Retourne un résumé montrant le nombre de colonnes géométriques identifiées dans la base et le nombre inséré dans la table geometry_columns. La version avec paramètres renvoie juste le nombre de lignes insérées dans la table geometry_columns .

Disponibilité : 1.4.0

Changement : 2.0.0 Par défaut, utilise les modificateurs de type au lieu de contraintes de vérification pour contraindre les types géométriques. Le comportement basé sur les contraintes peut être activé en mettant le nouveau paramètre use_typmod à false.

Amélioration : 2.0.0 L'argument optionnel use_typmod a été introduit pour controler si les colonnes sont créés avec des modificateurs de type ou des contraintes de vérification.

Exemples

CREATE TABLE public.myspatial_table(gid serial, geom geometry);
INSERT INTO myspatial_table(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );
-- This will now use typ modifiers.  For this to work, there must exist data
SELECT Populate_Geometry_Columns('public.myspatial_table'::regclass);

populate_geometry_columns
--------------------------
                        1


\d myspatial_table

                                   Table "public.myspatial_table"
 Column |           Type            |                           Modifiers
--------+---------------------------+---------------------------------------------------------------
 gid    | integer                   | not null default nextval('myspatial_table_gid_seq'::regclass)
 geom   | geometry(LineString,4326) |
-- This will change the geometry columns to use constraints if they are not typmod or have constraints already.
--For this to work, there must exist data
CREATE TABLE public.myspatial_table_cs(gid serial, geom geometry);
INSERT INTO myspatial_table_cs(geom) VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );
SELECT Populate_Geometry_Columns('public.myspatial_table_cs'::regclass, false);
populate_geometry_columns
--------------------------
                        1
\d myspatial_table_cs

                          Table "public.myspatial_table_cs"
 Column |   Type   |                            Modifiers
--------+----------+------------------------------------------------------------------
 gid    | integer  | not null default nextval('myspatial_table_cs_gid_seq'::regclass)
 geom   | geometry |
Check constraints:
    "enforce_dims_geom" CHECK (st_ndims(geom) = 2)
    "enforce_geotype_geom" CHECK (geometrytype(geom) = 'LINESTRING'::text OR geom IS NULL)
    "enforce_srid_geom" CHECK (st_srid(geom) = 4326)

Name

UpdateGeometrySRID — Met à jour le SRID de tous les éléments d'une colonne géométrique et les métadonnées de la table.

Synopsis

text UpdateGeometrySRID(varchar table_name, varchar column_name, integer srid);

text UpdateGeometrySRID(varchar schema_name, varchar table_name, varchar column_name, integer srid);

text UpdateGeometrySRID(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name, integer srid);

Description

Met à jour le SRID de tous les objets d'une colonne géométrique et met à jour les métadonnées de geometry_columns et la contrainte sur le SRID. Note : utilise la fonction current_schema() sur les installations PostgreSQL le supportant, si le schéma n'est pas fourni.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Exemples

Insérer des géométries dans une table roads avec un jeu de SRID utilisant déjà le format EWKT :

COPY roads (geom) FROM STDIN;
SRID=4326;LINESTRING(0 0, 10 10)
SRID=4326;LINESTRING(10 10, 15 0)
\.
                

Cela va changer le srid de la table roads à 4326 quelle que soit sa valeur avant :

SELECT UpdateGeometrySRID('roads','geom',4326);

L'exemple précédent est équivalent à cette requête DDL :

ALTER TABLE roads
  ALTER COLUMN geom TYPE geometry(MULTILINESTRING, 4326)
    USING ST_SetSRID(geom,4326);

Si vous vous êtes trompé de projection (ou si vous l'avez introduite en tant qu'inconnue) dans le chargement et que vous voulez transformer en mercator web en une seule fois, vous pouvez le faire avec DDL mais il n'y a pas de fonction de gestion PostGIS équivalente pour le faire en une seule fois.

ALTER TABLE roads
 ALTER COLUMN geom TYPE geometry(MULTILINESTRING, 3857) USING ST_Transform(ST_SetSRID(geom,4326),3857) ;

7.3. Constructeurs de géométries

  • ST_Collect — Crée une géométrie GeometryCollection ou Multi à partir d'un ensemble de géométries.
  • ST_LineFromMultiPoint — Crée une LineString à partir d'une géométrie MultiPoint.
  • ST_MakeEnvelope — Crée un polygone rectangulaire à partir des coordonnées minimales et maximales.
  • ST_MakeLine — Crée une LineString à partir de géométries Point, MultiPoint ou LineString.
  • ST_MakePoint — Crée un point 2D, 3DZ ou 4D.
  • ST_MakePointM — Crée un point à partir des valeurs X, Y et M.
  • ST_MakePolygon — Crée un polygone à partir d'une collection et d'une liste facultative de trous.
  • ST_Point — Crée un point avec des valeurs X, Y et SRID.
  • ST_PointZ — Crée un point avec des valeurs X, Y, Z et SRID.
  • ST_PointM — Crée un point avec des valeurs X, Y, M et SRID.
  • ST_PointZM — Crée un point avec des valeurs X, Y, Z, M et SRID.
  • ST_Polygon — Crée un polygone à partir d'une LineString avec un SRID spécifié.
  • ST_TileEnvelope — Crée un polygone rectangulaire dans Web Mercator (SRID:3857) en utilisant le système de tuiles XYZ.
  • ST_HexagonGrid — Renvoie un ensemble d'hexagones et d'indices de cellules qui couvrent complètement les limites de l'argument géométrie.
  • ST_Hexagon — Renvoie un seul hexagone, en utilisant la taille du bord et les coordonnées de la cellule fournies dans l'espace de la grille de l'hexagone.
  • ST_SquareGrid — Renvoie un ensemble de carrés de grille et d'indices de cellules qui couvrent complètement les limites de l'argument géométrie.
  • ST_Square — Renvoie un seul carré, en utilisant la taille du bord et la coordonnée de la cellule fournies dans l'espace de la grille du carré.
  • ST_Letters — Renvoie les lettres d'entrée rendues sous forme de géométrie avec une position de départ par défaut à l'origine et une hauteur de texte par défaut de 100.

Name

ST_Collect — Crée une géométrie GeometryCollection ou Multi à partir d'un ensemble de géométries.

Synopsis

geometry ST_Collect(geometry g1, geometry g2);

geometry ST_Collect(geometry[] g1_array);

geometry ST_Collect(geometry set g1field);

Description

Rassemble les géométries dans une collection de géométries. Le résultat est soit un Multi*, soit une GeometryCollection, selon que les géométries d'entrée ont des types identiques ou différents (homogènes ou hétérogènes). Les géométries d'entrée restent inchangées dans la collection.

Variante 1: accepte géométries en entrée

Variante 2: accepte un tableau de géométries

Variante 3: fonction agrégée acceptant un ensemble de géométries.

[Note]

Si l'une des géométries en entrée est une collection (Multi* ou GeometryCollection), ST_Collect renvoie une GeometryCollection (puisque c'est le seul type qui peut contenir des collections imbriquées). Pour éviter cela, utilisez ST_Dump dans une sous-requête pour développer les collections d'entrée en leurs éléments atomiques (voir l'exemple ci-dessous).

[Note]

ST_Collect et ST_Union semblent similaires, mais fonctionnent en fait assez différemment. ST_Collect agrège les géométries dans une collection sans les modifier en aucune façon. ST_Union fusionne géométriquement les géométries lorsqu'elles se chevauchent, et divise les lignes aux intersections. Elle peut retourner des géométries uniques lorsqu'elle dissout les frontières.

Disponibilité : 1.4.0 - ST_Collect(geomarray) a été introduit. ST_Collect a été amélioré pour gérer plus de géométries plus rapidement.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Exemples - Variante à deux entrées

Collectez les points 2D.

SELECT ST_AsText( ST_Collect( ST_GeomFromText('POINT(1 2)'),
        ST_GeomFromText('POINT(-2 3)') ));

st_astext
----------
MULTIPOINT((1 2),(-2 3))

Collectez les points 3D.

SELECT ST_AsEWKT( ST_Collect( ST_GeomFromEWKT('POINT(1 2 3)'),
                ST_GeomFromEWKT('POINT(1 2 4)') ) );

                st_asewkt
-------------------------
 MULTIPOINT(1 2 3,1 2 4)
 

Collectez les courbes.

SELECT ST_AsText( ST_Collect( 'CIRCULARSTRING(220268 150415,220227 150505,220227 150406)',
                'CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)'));

                st_astext
------------------------------------------------------------------------------------
MULTICURVE(CIRCULARSTRING(220268 150415,220227 150505,220227 150406),
 CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))

Exemples - Variante avec un tableau

Utilisation d'un constructeur de tableau pour une sous-requête.

SELECT ST_Collect( ARRAY( SELECT geom FROM sometable ) );

Utilisation d'un constructeur de tableau pour les valeurs.

SELECT ST_AsText(  ST_Collect(
                ARRAY[ ST_GeomFromText('LINESTRING(1 2, 3 4)'),
                        ST_GeomFromText('LINESTRING(3 4, 4 5)') ] )) As wktcollect;

--wkt collect --
MULTILINESTRING((1 2,3 4),(3 4,4 5))

Exemples - Variante avec un agrégat

Création de collections multiples en regroupant les géométries dans une table.

SELECT stusps, ST_Collect(f.geom) as geom
         FROM (SELECT stusps, (ST_Dump(geom)).geom As geom
                                FROM
                                somestatetable ) As f
        GROUP BY stusps

Voir aussi

ST_Dump, ST_Union


Name

ST_LineFromMultiPoint — Crée une LineString à partir d'une géométrie MultiPoint.

Synopsis

geometry ST_LineFromMultiPoint(geometry aMultiPoint);

Description

Crée une LineString à partir d'une géométrie MultiPoint.

Utilisez ST_MakeLine pour créer des lignes à partir des entrées Point ou LineString.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

Créer une LineString 3D à partir d'un MultiPoint 3D

SELECT ST_AsEWKT(  ST_LineFromMultiPoint('MULTIPOINT(1 2 3, 4 5 6, 7 8 9)')  ));

--result--
LINESTRING(1 2 3,4 5 6,7 8 9)

Name

ST_MakeEnvelope — Crée un polygone rectangulaire à partir des coordonnées minimales et maximales.

Synopsis

geometry ST_MakeEnvelope(float xmin, float ymin, float xmax, float ymax, integer srid=unknown);

Description

Crée un polygone rectangulaire à partir des valeurs minimales et maximales de X et Y. Les valeurs entrées doivent être dans le système de référence spatiale spécifié par le SRID. Si aucun SRID n'est spécifié, le système de référence spatiale inconnu (SRID 0) est utilisé.

Disponibilité : 1.5

Amélioré : 2.0 : La possibilité de spécifier une enveloppe sans spécifier un SRID a été introduite.

Exemple : Construction d'un polygone de la l'enveloppe englobante

SELECT ST_AsText( ST_MakeEnvelope(10, 10, 11, 11, 4326) );

st_asewkt
-----------
POLYGON((10 10, 10 11, 11 11, 11 10, 10 10))

Name

ST_MakeLine — Crée une LineString à partir de géométries Point, MultiPoint ou LineString.

Synopsis

geometry ST_MakeLine(geometry geom1, geometry geom2);

geometry ST_MakeLine(geometry[] geoms_array);

geometry ST_MakeLine(geometry set geoms);

Description

Crée une LineString contenant les points des géométries Point, MultiPoint ou LineString. Les autres types de géométrie provoquent une erreur.

Variante 1: accepte géométries en entrée

Variante 2: accepte un tableau de géométries

Variante 3: fonction agrégée acceptant un ensemble de géométries. Pour garantir l'ordre des géométries d'entrée, utilisez ORDER BY dans l'appel de fonction, ou une sous-requête avec une clause ORDER BY.

Les nœuds répétés au début des LineStrings d'entrée sont réduits à un seul point. Les points répétés dans les entrées Point et MultiPoint ne sont pas réduits. ST_RemoveRepeatedPoints peut être utilisé pour réduire les points répétés de la LineString de sortie.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Disponibilité : 2.3.0 - La prise en charge des éléments d'entrée MultiPoint a été introduite

Disponibilité : 2.0.0 - La prise en charge des éléments d'entrée LineString a été introduite

Disponibilité : 1.4.0 - création de ST_MakeLine(geomarray). L'agrégat spatial ST_MakeLine amélioré pour supporter plus de points plus rapidement.

Exemples : Variante à deux entrées

Créez une ligne composée de deux points.

SELECT ST_AsText( ST_MakeLine(ST_Point(1,2), ST_Point(3,4)) );

          st_astext
---------------------
 LINESTRING(1 2,3 4)

Créer une ligne 3D à partir de deux points 3D.

SELECT ST_AsEWKT( ST_MakeLine(ST_MakePoint(1,2,3), ST_MakePoint(3,4,5) ));

                st_asewkt
-------------------------
 LINESTRING(1 2 3,3 4 5)

Crée une ligne à partir de deux LineStrings disjointes.

select ST_AsText( ST_MakeLine( 'LINESTRING(0 0, 1 1)', 'LINESTRING(2 2, 3 3)' ) );

          st_astext
-----------------------------
 LINESTRING(0 0,1 1,2 2,3 3)

Exemples : Variante avec un tableau

Créer une ligne à partir d'un tableau formé par une sous-requête avec ordonnancement.

SELECT ST_MakeLine( ARRAY( SELECT ST_Centroid(geom) FROM visit_locations ORDER BY visit_time) );

Créer une ligne 3D à partir d'un tableau de points 3D

SELECT ST_AsEWKT( ST_MakeLine(
          ARRAY[ ST_MakePoint(1,2,3), ST_MakePoint(3,4,5), ST_MakePoint(6,6,6) ]  ));

                st_asewkt
-------------------------
LINESTRING(1 2 3,3 4 5,6 6 6)

Exemples : Variante avec un agrégat

Cet exemple interroge des séquences temporelles de points GPS à partir d'un ensemble de pistes et crée un enregistrement pour chaque piste. Les géométries résultantes sont des LineStrings composées des points GPS dans l'ordre de leur déplacement.

L'utilisation de l'agrégat ORDER BY fournit une LineString correctement ordonnée.

SELECT gps.track_id, ST_MakeLine(gps.geom ORDER BY gps_time) As geom
        FROM gps_points As gps
        GROUP BY track_id;

Avant PostgreSQL 9, l'ordre dans une sous-requête peut être utilisé. Cependant, il arrive que le plan de requête ne respecte pas l'ordre de la sous-requête.

SELECT gps.track_id, ST_MakeLine(gps.geom) As geom
        FROM ( SELECT track_id, gps_time, geom
                        FROM gps_points ORDER BY track_id, gps_time ) As gps
        GROUP BY track_id;

Name

ST_MakePoint — Crée un point 2D, 3DZ ou 4D.

Synopsis

geometry ST_MakePoint(float x, float y);

geometry ST_MakePoint(float x, float y, float z);

geometry ST_MakePoint(float x, float y, float z, float m);

Description

Crée une géométrie de point 2D XY, 3D XYZ ou 4D XYZM. Utilisez ST_MakePointM pour créer des points avec des coordonnées XYM.

Utilisez ST_SetSRID pour spécifier un SRID pour le point créé.

Bien que non conforme à l'OGC, ST_MakePoint est plus rapide et plus précis que ST_GeomFromText et ST_PointFromText. Elle est également plus facile à utiliser pour les valeurs de coordonnées numériques.

[Note]

Pour les coordonnées géodésiques, X est la longitude et Y la latitude

[Note]

Les fonctions ST_Point, ST_PointZ, ST_PointM et ST_PointZM peuvent être utilisées pour créer des points avec un SRID donné.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

-- Create a point with unknown SRID
SELECT ST_MakePoint(-71.1043443253471, 42.3150676015829);

-- Create a point in the WGS 84 geodetic CRS
SELECT ST_SetSRID(ST_MakePoint(-71.1043443253471, 42.3150676015829),4326);

-- Create a 3D point (e.g. has altitude)
SELECT ST_MakePoint(1, 2,1.5);

-- Get z of point
SELECT ST_Z(ST_MakePoint(1, 2,1.5));
result
-------
1.5

Name

ST_MakePointM — Crée un point à partir des valeurs X, Y et M.

Synopsis

geometry ST_MakePointM(float x, float y, float m);

Description

Crée un point avec des coordonnées X, Y et M (mesure). Utilisez ST_MakePoint pour créer des points avec des coordonnées XY, XYZ ou XYZM.

Utilisez ST_SetSRID pour spécifier un SRID pour le point créé.

[Note]

Pour les coordonnées géodésiques, X est la longitude et Y la latitude

[Note]

Les fonctions ST_PointM et ST_PointZM peuvent être utilisées pour créer des points avec une valeur M et un SRID donné.

Exemples

[Note]

ST_AsEWKT est utilisé pour la sortie texte car ST_AsText ne prend pas en charge les valeurs M.

Créer un point avec un SRID inconnu.

SELECT ST_AsEWKT(  ST_MakePointM(-71.1043443253471, 42.3150676015829, 10)  );

                                   st_asewkt
-----------------------------------------------
 POINTM(-71.1043443253471 42.3150676015829 10)

Créer un point avec une mesure dans le système de coordonnées géodésiques WGS 84.

SELECT ST_AsEWKT( ST_SetSRID(  ST_MakePointM(-71.104, 42.315, 10),  4326));

                                                st_asewkt
---------------------------------------------------------
SRID=4326;POINTM(-71.104 42.315 10)

Obtenir la mesure du point créé.

SELECT ST_M(  ST_MakePointM(-71.104, 42.315, 10)  );

result
-------
10

Name

ST_MakePolygon — Crée un polygone à partir d'une collection et d'une liste facultative de trous.

Synopsis

geometry ST_MakePolygon(geometry linestring);

geometry ST_MakePolygon(geometry outerlinestring, geometry[] interiorlinestrings);

Description

Crée un polygone formé par la collection donnée et un tableau optionnel de trous. Les géométries d'entrée doivent être des LineStrings (anneaux) fermés.

Variante 1: Accepte une collection de LineString.

Variante 2: Accepte une collection de LineString et un tableau de LineStrings internes (trous). Un tableau de géométrie peut être construit en utilisant les constructions PostgreSQL array_agg(), ARRAY[] ou ARRAY().

[Note]

Cette fonction n'accepte pas les MultiLineStrings. Utilisez ST_LineMerge pour générer une LineString, ou ST_Dump pour extraire les LineStrings.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples : variante avec une entrée unique

Créez un polygone à partir d'une LineString 2D.

SELECT ST_MakePolygon( ST_GeomFromText('LINESTRING(75 29,77 29,77 29, 75 29)'));

Créez un polygone à partir d'une LineString ouverte, en utilisant ST_StartPoint et ST_AddPoint pour la fermer.

SELECT ST_MakePolygon( ST_AddPoint(foo.open_line, ST_StartPoint(foo.open_line)) )
FROM (
  SELECT ST_GeomFromText('LINESTRING(75 29,77 29,77 29, 75 29)') As open_line) As foo;

Créer un polygone à partir d'une LineString 3D

SELECT ST_AsEWKT( ST_MakePolygon( 'LINESTRING(75.15 29.53 1,77 29 1,77.6 29.5 1, 75.15 29.53 1)'));

st_asewkt
-----------
POLYGON((75.15 29.53 1,77 29 1,77.6 29.5 1,75.15 29.53 1))

Créer un polygone à partir d'une LineString avec des mesures

SELECT ST_AsEWKT( ST_MakePolygon( 'LINESTRINGM(75.15 29.53 1,77 29 1,77.6 29.5 2, 75.15 29.53 2)' ));

st_asewkt
----------
POLYGONM((75.15 29.53 1,77 29 1,77.6 29.5 2,75.15 29.53 2))

Exemples : Enveloppe extérieure avec variante de trous intérieurs

Créer un polygone en forme de donut avec un trou supplémentaire

SELECT ST_MakePolygon( ST_ExteriorRing( ST_Buffer(ring.line,10)),
        ARRAY[  ST_Translate(ring.line, 1, 1),
                ST_ExteriorRing(ST_Buffer(ST_Point(20,20),1)) ]
        )
FROM (SELECT ST_ExteriorRing(
        ST_Buffer(ST_Point(10,10),10,10)) AS line ) AS ring;

Créez un ensemble de frontières de province avec des trous représentant des lacs. L'entrée est un tableau de polygones/multipolygones de province et un tableau de lignes d'eau. Les lignes formant des lacs sont déterminées en utilisant ST_IsClosed. Le réseau de la province est extrait en utilisant ST_Boundary. Comme requis par ST_MakePolygon, la frontière est forcée à être une seule LineString en utilisant ST_LineMerge. (Cependant, notez que si une province a plus d'une région ou a des îles, cela produira un polygone invalide). L'utilisation d'un LEFT JOIN garantit que toutes les provinces sont incluses, même si elles n'ont pas de lacs.

[Note]

La construction CASE est utilisée car le passage d'un tableau nul dans ST_MakePolygon entraîne une valeur de retour NULL.

SELECT p.gid, p.province_name,
        CASE WHEN array_agg(w.geom) IS NULL
        THEN p.geom
        ELSE  ST_MakePolygon( ST_LineMerge(ST_Boundary(p.geom)),
                        array_agg(w.geom)) END
FROM
        provinces p LEFT JOIN waterlines w
                ON (ST_Within(w.geom, p.geom) AND ST_IsClosed(w.geom))
GROUP BY p.gid, p.province_name, p.geom;

Une autre technique consiste à utiliser une sous-requête corrélée et le constructeur ARRAY() qui convertit un ensemble de lignes en un tableau.

SELECT p.gid,  p.province_name,
    CASE WHEN EXISTS( SELECT w.geom
        FROM waterlines w
        WHERE ST_Within(w.geom, p.geom)
        AND ST_IsClosed(w.geom))
    THEN ST_MakePolygon(
        ST_LineMerge(ST_Boundary(p.geom)),
        ARRAY( SELECT w.geom
            FROM waterlines w
            WHERE ST_Within(w.geom, p.geom)
            AND ST_IsClosed(w.geom)))
    ELSE p.geom
    END AS geom
FROM provinces p;

Name

ST_Point — Crée un point avec des valeurs X, Y et SRID.

Synopsis

geometry ST_Point(float x, float y);

geometry ST_Point(float x, float y, integer srid=unknown);

Description

Renvoie un point avec les valeurs de coordonnées X et Y données. C'est l'équivalent SQL-MM de ST_MakePoint qui ne prend que X et Y.

[Note]

Pour les coordonnées géodésiques, X est la longitude et Y la latitude

Amélioration : 3.2.0 srid a été ajouté comme argument optionnel supplémentaire. Les anciennes installations nécessitent une combinaison avec ST_SetSRID pour marquer le srid sur la géométrie.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 6.1.2

Exemple : Géométrie

SELECT ST_Point( -71.104, 42.315);

Création d'un point avec le SRID spécifié :

SELECT ST_Point( -71.104, 42.315, 4326);

Autre façon de spécifier le SRID :

SELECT ST_SetSRID( ST_Point( -71.104, 42.315), 4326);

Exemples : Géographie

Créez des points geography en utilisant la syntaxe :: :

SELECT ST_Point( -71.104, 42.315, 4326)::geography;

Code Pre-PostGIS 3.2, utilisant CAST :

SELECT CAST( ST_SetSRID(ST_Point( -71.104, 42.315), 4326) AS geography);

Si les coordonnées du point ne sont pas dans un système de coordonnées géodésiques (tel que WGS84), elles doivent être reprojetées avant d'être projetées dans une géographie. Dans cet exemple, un point en pieds du plan de l'État de Pennsylvanie (SRID 2273) est projeté en WGS84 (SRID 4326).

SELECT ST_Transform( ST_Point( 3637510, 3014852, 2273), 4326)::geography;

Name

ST_PointZ — Crée un point avec des valeurs X, Y, Z et SRID.

Synopsis

geometry ST_PointZ(float x, float y, float z, integer srid=unknown);

Description

Renvoie un point avec les valeurs de coordonnées X, Y et Z données, et éventuellement un numéro SRID.

Amélioration : 3.2.0 srid a été ajouté comme argument optionnel supplémentaire. Les anciennes installations nécessitent une combinaison avec ST_SetSRID pour marquer le srid sur la géométrie.

Exemples

SELECT ST_PointZ(-71.104, 42.315, 3.4, 4326)
SELECT ST_PointZ(-71.104, 42.315, 3.4, srid => 4326)
SELECT ST_PointZ(-71.104, 42.315, 3.4)

Name

ST_PointM — Crée un point avec des valeurs X, Y, M et SRID.

Synopsis

geometry ST_PointM(float x, float y, float m, integer srid=unknown);

Description

Renvoie un point avec les valeurs de coordonnées X, Y et M données, et éventuellement un numéro SRID.

Amélioration : 3.2.0 srid a été ajouté comme argument optionnel supplémentaire. Les anciennes installations nécessitent une combinaison avec ST_SetSRID pour marquer le srid sur la géométrie.

Exemples

SELECT ST_PointM(-71.104, 42.315, 3.4, 4326)
SELECT ST_PointM(-71.104, 42.315, 3.4, srid => 4326)
SELECT ST_PointM(-71.104, 42.315, 3.4)

Name

ST_PointZM — Crée un point avec des valeurs X, Y, Z, M et SRID.

Synopsis

geometry ST_PointZM(float x, float y, float z, float m, integer srid=unknown);

Description

Renvoie un point avec les valeurs de coordonnées X, Y, Z et M données, et éventuellement un numéro SRID.

Amélioration : 3.2.0 srid a été ajouté comme argument optionnel supplémentaire. Les anciennes installations nécessitent une combinaison avec ST_SetSRID pour marquer le srid sur la géométrie.

Exemples

SELECT ST_PointZM(-71.104, 42.315, 3.4, 4.5, 4326)
SELECT ST_PointZM(-71.104, 42.315, 3.4, 4.5, srid => 4326)
SELECT ST_PointZM(-71.104, 42.315, 3.4, 4.5)

Name

ST_Polygon — Crée un polygone à partir d'une LineString avec un SRID spécifié.

Synopsis

geometry ST_Polygon(geometry lineString, integer srid);

Description

Renvoie un polygone construit à partir de la LineString donnée et définit le système de référence spatiale à partir du srid.

ST_Polygon est similaire à la variante 1 de ST_MakePolygon avec l'ajout de la définition du SRID.

Pour créer des polygones avec des trous, utilisez ST_MakePolygon la variante 2 et ensuite ST_SetSRID.

[Note]

Cette fonction n'accepte pas les MultiLineStrings. Utilisez ST_LineMerge pour générer une LineString, ou ST_Dump pour extraire les LineStrings.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 8.3.2

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

Créer un polygone 2D.

SELECT ST_AsText( ST_Polygon('LINESTRING(75 29, 77 29, 77 29, 75 29)'::geometry, 4326) );

-- result --
POLYGON((75 29, 77 29, 77 29, 75 29))

Créer un polygone 3D.

SELECT ST_AsEWKT( ST_Polygon( ST_GeomFromEWKT('LINESTRING(75 29 1, 77 29 2, 77 29 3, 75 29 1)'), 4326) );

-- result --
SRID=4326;POLYGON((75 29 1, 77 29 2, 77 29 3, 75 29 1))

Name

ST_TileEnvelope — Crée un polygone rectangulaire dans Web Mercator (SRID:3857) en utilisant le système de tuiles XYZ.

Synopsis

geometry ST_TileEnvelope(integer tileZoom, integer tileX, integer tileY, geometry bounds=SRID=3857;LINESTRING(-20037508.342789 -20037508.342789,20037508.342789 20037508.342789), float margin=0.0);

Description

Crée un polygone rectangulaire donnant l'étendue d'une tuile dans le système de tuiles XYZ. La tuile est spécifiée par le niveau de zoom Z et l'indice XY de la tuile dans la grille à ce niveau. Peut être utilisé pour définir les limites de la tuile requises par ST_AsMVTGeom pour convertir la géométrie dans l'espace de coordonnées de la tuile MVT.

Par défaut, l'enveloppe de la tuile est dans le système de coordonnées Web Mercator (SRID:3857) utilisant la plage standard du système Web Mercator (-20037508.342789, 20037508.342789). Il s'agit du système de coordonnées le plus couramment utilisé pour les tuiles MVT. Le paramètre facultatif bounds peut être utilisé pour générer des tuiles dans n'importe quel système de coordonnées. Il s'agit d'une géométrie qui possède le SRID et l'étendue du carré "Niveau de zoom zéro" dans lequel le système de tuiles XYZ est inscrit.

Le paramètre facultatif margin peut être utilisé pour étendre une tuile du pourcentage donné. Par exemple, margin=0.125 étend la tuile de 12,5%, ce qui équivaut à buffer=512 lorsque la taille de l'étendue de la tuile est de 4096, comme utilisé dans ST_AsMVTGeom. Ceci est utile pour créer un tampon de tuile afin d'inclure des données situées en dehors de la zone visible de la tuile, mais dont l'existence affecte le rendu de la tuile. Par exemple, le nom d'une ville (un point) peut se trouver près du bord d'une tuile, son étiquette doit donc être rendue sur deux tuiles, même si le point se trouve dans la zone visible d'une seule tuile. L'utilisation de tuiles étendues dans une requête inclura le point de la ville dans les deux tuiles. Utilisez une valeur négative pour réduire la tuile à la place. Les valeurs inférieures à -0,5 sont interdites, car cela éliminerait complètement la tuile. Ne spécifiez pas de marge lors de l'utilisation avec ST_AsMVTGeom. Voir l'exemple pour ST_AsMVT.

Amélioré : 3.1.0 Ajout d'un paramètre de marge.

Disponibilité : 3.0.0

Exemple : Construction d'une enveloppe de tuiles

SELECT ST_AsText( ST_TileEnvelope(2, 1, 1) );

 st_astext
------------------------------
 POLYGON((-10018754.1713945 0,-10018754.1713945 10018754.1713945,0 10018754.1713945,0 0,-10018754.1713945 0))

SELECT ST_AsText( ST_TileEnvelope(3, 1, 1, ST_MakeEnvelope(-180, -90, 180, 90, 4326) ) );

                      st_astext
------------------------------------------------------
 POLYGON((-135 45,-135 67.5,-90 67.5,-90 45,-135 45))

Voir aussi

ST_MakeEnvelope


Name

ST_HexagonGrid — Renvoie un ensemble d'hexagones et d'indices de cellules qui couvrent complètement les limites de l'argument géométrie.

Synopsis

setof record ST_HexagonGrid(float8 size, geometry bounds);

Description

Commence par le concept d'un tuilage hexagonal du plan. (Pas un pavage hexagonal du globe, ce n'est pas le schéma de pavage H3). Pour un SRS plan donné, et une taille d'arête donnée, en commençant à l'origine du SRS, il existe un unique tuilage hexagonal du plan, Tiling(SRS, Size). Cette fonction répond à la question : quels hexagones dans un Tiling(SRS, Size) donné se chevauchent avec une limite donnée.

Le SRS pour les hexagones de sortie est le SRS fourni par la géométrie des limites.

Doubler ou tripler la taille des bords de l'hexagone génère un nouveau pavage parent qui s'adapte au pavage d'origine. Malheureusement, il n'est pas possible de générer des tuiles d'hexagones parents dans lesquelles les tuiles enfants s'insèrent parfaitement.

Disponibilité : 3.1.0

Exemple : Compter les points dans les hexagones

Pour faire un résumé des points par rapport à un pavage hexagonal, générez une grille hexagonale en utilisant l'étendue des points comme limites, puis joignez spatialement cette grille.

SELECT COUNT(*), hexes.geom
FROM
    ST_HexagonGrid(
        10000,
        ST_SetSRID(ST_EstimatedExtent('pointtable', 'geom'), 3857)
    ) AS hexes
    INNER JOIN
    pointtable AS pts
    ON ST_Intersects(pts.geom, hexes.geom)
GROUP BY hexes.geom;

Exemple : Génération de la couverture hexagonale des polygones

Si nous générons un ensemble d'hexagones pour chaque limite de polygone et que nous éliminons par filtrage ceux qui n'intersectent pas leurs hexagones, nous obtenons un pavage pour chaque polygone.

La mise en mosaïque des états donne lieu à une couverture hexagonale de chaque état, et à des hexagones multiples se chevauchant aux frontières entre les états.

[Note]

Le mot-clé LATERAL est implicite pour les fonctions de retour d'ensemble lorsqu'elles font référence à une table antérieure dans la liste FROM. Ainsi, CROSS JOIN LATERAL, CROSS JOIN, ou tout simplement , sont des constructions équivalentes pour cet exemple.

SELECT admin1.gid, hex.geom
FROM
    admin1
    CROSS JOIN
    ST_HexagonGrid(100000, admin1.geom) AS hex
WHERE
    adm0_a3 = 'USA'
    AND
    ST_Intersects(admin1.geom, hex.geom)

Name

ST_Hexagon — Renvoie un seul hexagone, en utilisant la taille du bord et les coordonnées de la cellule fournies dans l'espace de la grille de l'hexagone.

Synopsis

geometry ST_Hexagon(float8 size, integer cell_i, integer cell_j, geometry origin);

Description

Utilise le même concept de tuilage d'hexagones que ST_HexagonGrid, mais génère un seul hexagone à la coordonnée de cellule souhaitée. En option, peut ajuster la coordonnée d'origine du tuilage, l'origine par défaut est à 0,0.

Les hexagones sont générés sans SRID défini, utilisez donc ST_SetSRID pour définir le SRID à celui que vous attendez.

Disponibilité : 3.1.0

Exemple : Création d'un hexagone à l'origine

SELECT ST_AsText(ST_SetSRID(ST_Hexagon(1.0, 0, 0), 3857));

POLYGON((-1 0,-0.5
         -0.866025403784439,0.5
         -0.866025403784439,1
         0,0.5
         0.866025403784439,-0.5
         0.866025403784439,-1 0)) 

Name

ST_SquareGrid — Renvoie un ensemble de carrés de grille et d'indices de cellules qui couvrent complètement les limites de l'argument géométrie.

Synopsis

setof record ST_SquareGrid(float8 size, geometry bounds);

Description

Commence par le concept de tuilage carré du plan. Pour un SRS plan donné, et une taille d'arête donnée, en commençant à l'origine du SRS, il existe un unique pavage carré du plan, Tiling(SRS, Size). Cette fonction répond à la question : quelles grilles dans un Tiling(SRS, Size) donné se chevauchent avec une limite donnée.

Le SRS des carrés de sortie est le SRS fourni par la géométrie des limites.

Le doublement de la taille du carré ou de son bord génère un nouveau pavage parent qui s'adapte parfaitement au pavage d'origine. Les carrelages standard des cartes Web dans mercator ne sont que des puissances de deux grilles carrées dans le plan mercator.

Disponibilité : 3.1.0

Exemple : Générer une grille de 1 degré pour un pays

La grille remplira toutes les limites du pays, donc si vous voulez seulement des carrés qui touchent le pays, vous devrez filtrer ensuite avec ST_Intersects.

WITH grid AS (
SELECT (ST_SquareGrid(1, ST_Transform(geom,4326))).*
FROM admin0 WHERE name = 'Canada'
)
  SELEcT ST_AsText(geom)
  FROM grid

Exemple : Compter les points dans les carrés (en utilisant une seule grille découpée)

Pour faire un résumé des points par rapport à un tuilage carré, générez une grille carrée en utilisant l'étendue des points comme limites, puis joignez spatialement à cette grille. Notez que l'étendue estimée peut être différente de l'étendue réelle, soyez donc prudent et assurez-vous au moins d'avoir analysé votre tableau.

SELECT COUNT(*), squares.geom
    FROM
    pointtable AS pts
    INNER JOIN
    ST_SquareGrid(
        1000,
        ST_SetSRID(ST_EstimatedExtent('pointtable', 'geom'), 3857)
    ) AS squares
    ON ST_Intersects(pts.geom, squares.geom)
    GROUP BY squares.geom

Exemple : Compter des points dans des carrés en utilisant un jeu de grille par point

Cette méthode donne le même résultat que le premier exemple mais sera plus lente pour un grand nombre de points

SELECT COUNT(*), squares.geom
    FROM
    pointtable AS pts
    INNER JOIN
    ST_SquareGrid(
        1000,
       pts.geom
    ) AS squares
    ON ST_Intersects(pts.geom, squares.geom)
    GROUP BY squares.geom

Name

ST_Square — Renvoie un seul carré, en utilisant la taille du bord et la coordonnée de la cellule fournies dans l'espace de la grille du carré.

Synopsis

geometry ST_Square(float8 size, integer cell_i, integer cell_j, geometry origin);

Description

Utilise le même concept de tuilage carré que ST_SquareGrid, mais génère un seul carré à la coordonnée de cellule souhaitée. En option, peut ajuster la coordonnée d'origine du tuilage, l'origine par défaut est à 0,0.

Les carrés sont générés sans SRID défini, utilisez donc ST_SetSRID pour définir le SRID à celui que vous attendez.

Disponibilité : 3.1.0

Exemple : Création d'un carré à l'origine

SELECT ST_AsText(ST_SetSRID(ST_Square(1.0, 0, 0), 3857));

 POLYGON((0 0,0 1,1 1,1 0,0 0))

Name

ST_Letters — Renvoie les lettres d'entrée rendues sous forme de géométrie avec une position de départ par défaut à l'origine et une hauteur de texte par défaut de 100.

Synopsis

geometry ST_Letters(text letters, json font);

Description

Utilise une police intégrée pour rendre une chaîne de caractères sous forme de géométrie multipolygonale. La hauteur de texte par défaut est de 100,0, soit la distance entre le bas d'une descendante et le haut d'une capitale. La position de départ par défaut place le début de la ligne de base à l'origine. Pour remplacer la police, il faut passer une carte json, avec un caractère comme clé, et des TWKB encodés en base64 pour la forme de la police, les polices ayant une hauteur de 1000 unités du bas des descendantes au haut des capitales.

Le texte est généré à l'origine par défaut, donc pour repositionner et redimensionner le texte, appliquez d'abord la fonction ST_Scale et ensuite appliquez la fonction ST_Translate.

Disponibilité : 3.3.0

Exemple : Génération du mot 'Yo'

SELECT ST_AsText(ST_Letters('Yo'), 1);

Lettres générées par ST_Letters

Exemple : Mise à l'échelle et déplacement des mots

SELECT ST_Translate(ST_Scale(ST_Letters('Yo'), 10, 10), 100,100);

7.4. Fonctions d'accès aux géométries

  • GeometryType — Renvoie le type d'une géométrie sous forme de texte.
  • ST_Boundary — Renvoie la limite d'une géométrie.
  • ST_BoundingDiagonal — Retourne la diagonale de la boîte englobante pour la géométrie en argument.
  • ST_CoordDim — Renvoie la dimension des coordonnées d'une géométrie.
  • ST_Dimension — Renvoie la dimension topologique d'une géométrie.
  • ST_Dump — Renvoie un ensemble de lignes geometry_dump pour les composants d'une géométrie.
  • ST_DumpPoints — Renvoie un ensemble de lignes geometry_dump pour les coordonnées dans une géométrie.
  • ST_DumpSegments — Renvoie un ensemble de lignes geometry_dump pour les segments d'une géométrie.
  • ST_DumpRings — Renvoie un ensemble de lignes geometry_dump pour les anneaux extérieurs et intérieurs d'un polygone.
  • ST_EndPoint — Renvoie le dernier point d'une LineString ou CircularLineString.
  • ST_Envelope — Renvoie une géométrie représentant la boîte de délimitation d'une géométrie.
  • ST_ExteriorRing — Renvoie une ligne représentant l'anneau extérieur d'un polygone.
  • ST_GeometryN — Renvoie un élément d'une collection de géométries.
  • ST_GeometryType — Renvoie le type SQL-MM d'une géométrie sous forme de texte.
  • ST_HasArc — Teste si une géométrie contient un arc de cercle
  • ST_InteriorRingN — Renvoie le Nième anneau intérieur (trou) d'un polygone.
  • ST_NumCurves — Renvoie le nombre de courbes composantes d'une CompoundCurve.
  • ST_CurveN — Renvoie la Nième courbe composante d'une CompoundCurve.
  • ST_IsClosed — Teste si les points de départ et d'arrivée d'une LineString coïncident. Pour une PolyhedralSurface, teste si elle est fermée (volumétrique).
  • ST_IsCollection — Teste si une géométrie est un type de collection de géométrie.
  • ST_IsEmpty — Teste si une géométrie est vide.
  • ST_IsPolygonCCW — Teste si les polygones ont des anneaux extérieurs orientés dans le sens inverse des aiguilles d'une montre et des anneaux intérieurs orientés dans le sens des aiguilles d'une montre.
  • ST_IsPolygonCW — Teste si les polygones ont des anneaux extérieurs orientés dans le sens des aiguilles d'une montre et des anneaux intérieurs orientés dans le sens inverse des aiguilles d'une montre.
  • ST_IsRing — Teste si une ligne est fermée et simple.
  • ST_IsSimple — Teste si une géométrie n'a pas de points d'auto-intersection ou d'auto-tangente.
  • ST_M — Renvoie la coordonnée M d'un point.
  • ST_MemSize — Renvoie la quantité d'espace mémoire que prend une géométrie.
  • ST_NDims — Renvoie la dimension des coordonnées d'une géométrie.
  • ST_NPoints — Retourne le nombre de points (vertex) d'un objet géométrique.
  • ST_NRings — Renvoie le nombre d'anneaux dans une géométrie polygonale.
  • ST_NumGeometries — Renvoie le nombre d'éléments dans une collection de géométrie.
  • ST_NumInteriorRings — Renvoie le nombre d'anneaux intérieurs (trous) d'un polygone.
  • ST_NumInteriorRing — Renvoie le nombre d'anneaux intérieurs (trous) d'un polygone. Alias pour ST_NumInteriorRings
  • ST_NumPatches — Renvoie le nombre de faces d'une surface polyédrique. Retourne null pour les géométries non polyédriques.
  • ST_NumPoints — Renvoie le nombre de points dans une LineString ou une CircularString.
  • ST_PatchN — Renvoie la Nième géométrie (face) d'une PolyhedralSurface.
  • ST_PointN — Renvoie le Nième point de la première LineString ou LineString circulaire d'une géométrie.
  • ST_Points — Renvoie un MultiPoint contenant les coordonnées d'une géométrie.
  • ST_StartPoint — Renvoie le premier point d'une LineString.
  • ST_Summary — Renvoie un résumé textuel du contenu d'une géométrie.
  • ST_X — Renvoie la coordonnée X d'un point.
  • ST_Y — Renvoie la coordonnée Y d'un point.
  • ST_Z — Renvoie la coordonnée Z d'un point.
  • ST_Zmflag — Retourne un code indiquant la dimension des coordonnées ZM d'une géométrie.
  • ST_HasZ — Vérifie si une géométrie possède une dimension Z.
  • ST_HasM — Vérifie si une géométrie a une dimension M (mesure).

Name

GeometryType — Renvoie le type d'une géométrie sous forme de texte.

Synopsis

text GeometryType(geometry geomA);

Description

Retourne le type de la géométrie, par exemple : 'LINESTRING', 'POLYGON', 'MULTIPOINT', etc.

OGC SPEC s2.1.1.1 - Retourne le nom du sous type instanciable de la géométrie. Le nom est retourné sous forme de texte.

[Note]

Cette fonction indique si la géométrie comporte une dimension de type mesure, en retournant un texte de la forme 'POINTM'.

Amélioration : 2.0.0 introduction du support TIN, Triangles et surfaces polyédriques.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Exemples

SELECT GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
 geometrytype
--------------
 LINESTRING
SELECT ST_GeometryType(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
                ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
                ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
                ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));
                        --result
                        POLYHEDRALSURFACE
                        
SELECT GeometryType(geom) as result
  FROM
    (SELECT
       ST_GeomFromEWKT('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )), ((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )')  AS geom
    ) AS g;
 result
--------
 TIN    

Voir aussi

ST_GeometryType


Name

ST_Boundary — Renvoie la limite d'une géométrie.

Synopsis

geometry ST_Boundary(geometry geomA);

Description

Renvoie l'ensemble formant la frontière finie de cette géométrie. La notion de frontière est définie dans la section 3.12.3.2 des spécifications OGC. Le résultat de cette fonction est un ensemble topologiquement fermé, représentable avec les types de base, comme décrit dans la section 3.12.2 des spécifications OGC.

Effectué par le module GEOS

[Note]

Avant la version 2.0.0, cette fonction renvoie une exception si une GEOMETRYCOLLECTION est passée en paramètre. A partir de la 2.0.0, la fonction renvoie null (paramètre non supporté).

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. OGC SPEC s2.1.1.1

Cette méthode implémente la spécification SQL/MM. SQL-MM IEC 13249-3: 5.1.17

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Amélioration : 2.1.0 introduction du support pour Triangle

Modifié : 3.2.0 support pour TIN, n'utilise pas geos, ne linéarise pas les courbes

Exemples

Ligne avec les points de démarcation superposés

SELECT ST_Boundary(geom)
FROM (SELECT 'LINESTRING(100 150,50 60, 70 80, 160 170)'::geometry As geom) As f;
                                


ST_AsText output

MULTIPOINT((100 150),(160 170))

trous de polygone avec une multi-lignes en limite

SELECT ST_Boundary(geom)
FROM (SELECT
'POLYGON (( 10 130, 50 190, 110 190, 140 150, 150 80, 100 10, 20 40, 10 130 ),
        ( 70 40, 100 50, 120 80, 80 110, 50 90, 70 40 ))'::geometry As geom) As f;
                                


ST_AsText output

MULTILINESTRING((10 130,50 190,110 190,140 150,150 80,100 10,20 40,10 130),
        (70 40,100 50,120 80,80 110,50 90,70 40))

SELECT ST_AsText(ST_Boundary(ST_GeomFromText('LINESTRING(1 1,0 0, -1 1)')));
st_astext
-----------
MULTIPOINT((1 1),(-1 1))

SELECT ST_AsText(ST_Boundary(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))')));
st_astext
----------
LINESTRING(1 1,0 0,-1 1,1 1)

--Using a 3d polygon
SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('POLYGON((1 1 1,0 0 1, -1 1 1, 1 1 1))')));

st_asewkt
-----------------------------------
LINESTRING(1 1 1,0 0 1,-1 1 1,1 1 1)

--Using a 3d multilinestring
SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromEWKT('MULTILINESTRING((1 1 1,0 0 0.5, -1 1 1),(1 1 0.5,0 0 0.5, -1 1 0.5, 1 1 0.5) )')));

st_asewkt
----------
MULTIPOINT((-1 1 1),(1 1 0.75))

Name

ST_BoundingDiagonal — Retourne la diagonale de la boîte englobante pour la géométrie en argument.

Synopsis

geometry ST_BoundingDiagonal(geometry geom, boolean fits=false);

Description

Renvoie la diagonale de la boîte de délimitation de la géométrie fournie sous la forme d'une LineString. La diagonale est une LineString à 2 points avec les valeurs minimales de chaque dimension dans son point de départ et les valeurs maximales dans son point d'arrivée. Si la géométrie d'entrée est vide, la diagonale est une LINESTRING EMPTY.

Le paramètre facultatif fits spécifie si le meilleur ajustement est nécessaire. S'il est faux, la diagonale d'une boîte de délimitation un peu plus grande peut être acceptée (ce qui est plus rapide à calculer pour les géométries comportant de nombreux sommets). Dans les deux cas, la boîte de délimitation de la ligne diagonale renvoyée couvre toujours la géométrie d'entrée.

La géométrie renvoyée conserve le SRID et la dimensionnalité (présence Z et M) de la géométrie en entrée.

[Note]

Dans les cas dégénérés (c'est-à-dire un seul sommet dans l'entrée), la ligne retournée sera formellement invalide (pas d'intérieur). Le résultat est toujours topologiquement valide.

Disponibilité : 2.2.0

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les coordonnées M.

Exemples

-- Get the minimum X in a buffer around a point
SELECT ST_X(ST_StartPoint(ST_BoundingDiagonal(
  ST_Buffer(ST_Point(0,0),10)
)));
 st_x
------
  -10
                

Name

ST_CoordDim — Renvoie la dimension des coordonnées d'une géométrie.

Synopsis

integer ST_CoordDim(geometry geomA);

Description

Retourne la dimension des coordonnées d'une valeur ST_Geometry.

Alias SQL/MM pour la fonction ST_NDims

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.3

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Exemples

SELECT ST_CoordDim('CIRCULARSTRING(1 2 3, 1 3 4, 5 6 7, 8 9 10, 11 12 13)');
                        ---result--
                                3

                                SELECT ST_CoordDim(ST_Point(1,2));
                        --result--
                                2

                

Voir aussi

ST_NDims


Name

ST_Dimension — Renvoie la dimension topologique d'une géométrie.

Synopsis

integer ST_Dimension(geometry g);

Description

Renvoie la dimension topologique de cet objet Geometry, qui doit être inférieure ou égale à la dimension des coordonnées. OGC SPEC s2.1.1.1 - renvoie 0 pour POINT, 1 pour LINESTRING, 2 pour POLYGON, et la plus grande dimension des composants d'une GEOMETRYCOLLECTION. Si la dimension est inconnue (par exemple, pour une GEOMETRYCOLLECTION vide), 0 est renvoyé.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.2

Amélioration : 2.0.0 introduction du support TIN et surfaces polyédriques. Ne renvoie plus une exception si une GEOMETRY EMPTY est passée.

[Note]

Avant la version 2.0.0, cette fonction lève une exception si elle est utilisée avec une géométrie vide.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Exemples

SELECT ST_Dimension('GEOMETRYCOLLECTION(LINESTRING(1 1,0 0),POINT(0 0))');
ST_Dimension
-----------
1

Voir aussi

ST_NDims


Name

ST_Dump — Renvoie un ensemble de lignes geometry_dump pour les composants d'une géométrie.

Synopsis

geometry_dump[] ST_Dump(geometry g1);

Description

Une fonction de retour d'ensemble (SRF) qui extrait les composants d'une géométrie. Elle renvoie un ensemble de geometry_dump lignes, chacune contenant une géométrie (champ geom) et un tableau d'entiers (champ path).

Pour un type de géométrie atomique (POINT, LINESTRING, POLYGONE), un seul enregistrement est renvoyé avec un tableau path vide et la géométrie en entrée en tant que geom. Pour une collection ou une géométrie multiple, un enregistrement est renvoyé pour chacun des composants de la collection, et le path indique la position du composant à l'intérieur de la collection.

ST_Dump est utile pour développer les géométries. C'est l'inverse d'un ST_Collect / GROUP BY, en ce sens qu'il crée de nouvelles lignes. Par exemple, il peut être utilisé pour développer les MULTIPOLYGONES en POLYGONES.

Amélioration : 2.0.0 introduction du support TIN, Triangles et surfaces polyédriques.

Disponibilité : PostGIS 1.0.0RC1. Nécessite PostgreSQL 7.3 ou plus.

[Note]

Avant la version 1.3.4, cette fonction se bloquait si elle était utilisée avec des géométries contenant des CURVES. Ce problème est corrigé dans la version 1.3.4+

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples standard

SELECT sometable.field1, sometable.field1,
      (ST_Dump(sometable.geom)).geom AS geom
FROM sometable;

-- Break a compound curve into its constituent linestrings and circularstrings
SELECT ST_AsEWKT(a.geom), ST_HasArc(a.geom)
  FROM ( SELECT (ST_Dump(p_geom)).geom AS geom
         FROM (SELECT ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))') AS p_geom) AS b
        ) AS a;
          st_asewkt          | st_hasarc
-----------------------------+----------
 CIRCULARSTRING(0 0,1 1,1 0) | t
 LINESTRING(1 0,0 1)         | f
(2 rows)

Exemples TIN, Triangle et Surfaces Polyédriques

-- Polyhedral surface example
-- Break a Polyhedral surface into its faces
SELECT (a.p_geom).path[1] As path, ST_AsEWKT((a.p_geom).geom) As geom_ewkt
  FROM (SELECT ST_Dump(ST_GeomFromEWKT('POLYHEDRALSURFACE(
((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),  ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)),  ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1))
)') ) AS p_geom )  AS a;

 path |                geom_ewkt
------+------------------------------------------
    1 | POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0))
    2 | POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))
    3 | POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))
    4 | POLYGON((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0))
    5 | POLYGON((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0))
    6 | POLYGON((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))
-- TIN --
SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt
  FROM
    (SELECT
       ST_Dump( ST_GeomFromEWKT('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )), ((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )') ) AS gdump
    ) AS g;
-- result --
 path |                 wkt
------+-------------------------------------
 {1}  | TRIANGLE((0 0 0,0 0 1,0 1 0,0 0 0))
 {2}  | TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))

Name

ST_DumpPoints — Renvoie un ensemble de lignes geometry_dump pour les coordonnées dans une géométrie.

Synopsis

geometry_dump[] ST_DumpPoints(geometry geom);

Description

Une fonction de retour d'ensemble (SRF) qui extrait les coordonnées (sommets) d'une géométrie. Elle renvoie un ensemble de geometry_dump lignes, chacune contenant une géométrie (champ geom) et un tableau d'entiers (champ path).

  • le champ geom POINT représente les coordonnées de la géométrie fournie.

  • le champ path (un integer[]) est un index énumérant les positions des coordonnées dans les éléments de la géométrie fournie. Les indices sont basés sur 1. Par exemple, pour un LINESTRING, les chemins sont {i}i est la nième coordonnée dans le LINESTRING. Pour un POLYGONE, les chemins sont {i,j}i est le numéro de l'anneau (1 est l'anneau extérieur ; les anneaux intérieurs suivent) et j est la position de la coordonnée dans l'anneau.

Pour obtenir une géométrie unique contenant les coordonnées, utilisez ST_Points.

Amélioré : 2.1.0 Vitesse plus rapide. Réimplémentation en C natif.

Amélioration : 2.0.0 introduction du support TIN, Triangles et surfaces polyédriques.

Disponibilité : 1.5.0

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Classique Éclater un tableau de lignes en nœuds

SELECT edge_id, (dp).path[1] As index, ST_AsText((dp).geom) As wktnode
FROM (SELECT 1 As edge_id
        , ST_DumpPoints(ST_GeomFromText('LINESTRING(1 2, 3 4, 10 10)')) AS dp
     UNION ALL
     SELECT 2 As edge_id
        , ST_DumpPoints(ST_GeomFromText('LINESTRING(3 5, 5 6, 9 10)')) AS dp
   ) As foo;
 edge_id | index |    wktnode
---------+-------+--------------
       1 |     1 | POINT(1 2)
       1 |     2 | POINT(3 4)
       1 |     3 | POINT(10 10)
       2 |     1 | POINT(3 5)
       2 |     2 | POINT(5 6)
       2 |     3 | POINT(9 10)

Exemples de géométrie standard

SELECT path, ST_AsText(geom)
FROM (
  SELECT (ST_DumpPoints(g.geom)).*
  FROM
    (SELECT
       'GEOMETRYCOLLECTION(
          POINT ( 0 1 ),
          LINESTRING ( 0 3, 3 4 ),
          POLYGON (( 2 0, 2 3, 0 2, 2 0 )),
          POLYGON (( 3 0, 3 3, 6 3, 6 0, 3 0 ),
                   ( 5 1, 4 2, 5 2, 5 1 )),
          MULTIPOLYGON (
                  (( 0 5, 0 8, 4 8, 4 5, 0 5 ),
                   ( 1 6, 3 6, 2 7, 1 6 )),
                  (( 5 4, 5 8, 6 7, 5 4 ))
          )
        )'::geometry AS geom
    ) AS g
  ) j;

   path    | st_astext
-----------+------------
 {1,1}     | POINT(0 1)
 {2,1}     | POINT(0 3)
 {2,2}     | POINT(3 4)
 {3,1,1}   | POINT(2 0)
 {3,1,2}   | POINT(2 3)
 {3,1,3}   | POINT(0 2)
 {3,1,4}   | POINT(2 0)
 {4,1,1}   | POINT(3 0)
 {4,1,2}   | POINT(3 3)
 {4,1,3}   | POINT(6 3)
 {4,1,4}   | POINT(6 0)
 {4,1,5}   | POINT(3 0)
 {4,2,1}   | POINT(5 1)
 {4,2,2}   | POINT(4 2)
 {4,2,3}   | POINT(5 2)
 {4,2,4}   | POINT(5 1)
 {5,1,1,1} | POINT(0 5)
 {5,1,1,2} | POINT(0 8)
 {5,1,1,3} | POINT(4 8)
 {5,1,1,4} | POINT(4 5)
 {5,1,1,5} | POINT(0 5)
 {5,1,2,1} | POINT(1 6)
 {5,1,2,2} | POINT(3 6)
 {5,1,2,3} | POINT(2 7)
 {5,1,2,4} | POINT(1 6)
 {5,2,1,1} | POINT(5 4)
 {5,2,1,2} | POINT(5 8)
 {5,2,1,3} | POINT(6 7)
 {5,2,1,4} | POINT(5 4)
(29 rows)

Exemples TIN, Triangle et Surfaces Polyédriques

-- Polyhedral surface cube --
SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt
  FROM
    (SELECT
       ST_DumpPoints(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )') ) AS gdump
    ) AS g;
-- result --
  path   |     wkt
---------+--------------
 {1,1,1} | POINT(0 0 0)
 {1,1,2} | POINT(0 0 1)
 {1,1,3} | POINT(0 1 1)
 {1,1,4} | POINT(0 1 0)
 {1,1,5} | POINT(0 0 0)
 {2,1,1} | POINT(0 0 0)
 {2,1,2} | POINT(0 1 0)
 {2,1,3} | POINT(1 1 0)
 {2,1,4} | POINT(1 0 0)
 {2,1,5} | POINT(0 0 0)
 {3,1,1} | POINT(0 0 0)
 {3,1,2} | POINT(1 0 0)
 {3,1,3} | POINT(1 0 1)
 {3,1,4} | POINT(0 0 1)
 {3,1,5} | POINT(0 0 0)
 {4,1,1} | POINT(1 1 0)
 {4,1,2} | POINT(1 1 1)
 {4,1,3} | POINT(1 0 1)
 {4,1,4} | POINT(1 0 0)
 {4,1,5} | POINT(1 1 0)
 {5,1,1} | POINT(0 1 0)
 {5,1,2} | POINT(0 1 1)
 {5,1,3} | POINT(1 1 1)
 {5,1,4} | POINT(1 1 0)
 {5,1,5} | POINT(0 1 0)
 {6,1,1} | POINT(0 0 1)
 {6,1,2} | POINT(1 0 1)
 {6,1,3} | POINT(1 1 1)
 {6,1,4} | POINT(0 1 1)
 {6,1,5} | POINT(0 0 1)
(30 rows)
-- Triangle --
SELECT (g.gdump).path, ST_AsText((g.gdump).geom) as wkt
  FROM
    (SELECT
       ST_DumpPoints( ST_GeomFromEWKT('TRIANGLE ((
                0 0,
                0 9,
                9 0,
                0 0
            ))') ) AS gdump
    ) AS g;
-- result --
 path |    wkt
------+------------
 {1}  | POINT(0 0)
 {2}  | POINT(0 9)
 {3}  | POINT(9 0)
 {4}  | POINT(0 0)
-- TIN --
SELECT (g.gdump).path, ST_AsEWKT((g.gdump).geom) as wkt
  FROM
    (SELECT
       ST_DumpPoints( ST_GeomFromEWKT('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )), ((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )') ) AS gdump
    ) AS g;
-- result --
  path   |     wkt
---------+--------------
 {1,1,1} | POINT(0 0 0)
 {1,1,2} | POINT(0 0 1)
 {1,1,3} | POINT(0 1 0)
 {1,1,4} | POINT(0 0 0)
 {2,1,1} | POINT(0 0 0)
 {2,1,2} | POINT(0 1 0)
 {2,1,3} | POINT(1 1 0)
 {2,1,4} | POINT(0 0 0)
(8 rows)

Name

ST_DumpSegments — Renvoie un ensemble de lignes geometry_dump pour les segments d'une géométrie.

Synopsis

geometry_dump[] ST_DumpSegments(geometry geom);

Description

Une fonction de retour d'ensemble (SRF) qui extrait les segments d'une géométrie. Elle renvoie un ensemble de geometry_dump lignes, chacune contenant une géométrie (champ geom) et un tableau d'entiers (champ path).

  • le champ geom LINESTRINGs représente les segments linéaires de la géométrie fournie, tandis que CIRCULARSTRINGs représente les segments d'arc.

  • le champ path (un integer[]) est un index énumérant les positions des points de départ des segments dans les éléments de la géométrie fournie. Les indices sont basés sur 1. Par exemple, pour un LINESTRING, les chemins sont {i}i est le nième point de départ du segment dans le LINESTRING. Pour un POLYGONE, les chemins sont {i,j}i est le numéro de l'anneau (1 est l'anneau extérieur ; les anneaux intérieurs suivent) et j est la position du point de départ du segment dans l'anneau.

Disponibilité : 3.2.0

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples de géométrie standard

SELECT path, ST_AsText(geom)
FROM (
    SELECT (ST_DumpSegments(g.geom)).*
    FROM (SELECT 'GEOMETRYCOLLECTION(
    LINESTRING(1 1, 3 3, 4 4),
    POLYGON((5 5, 6 6, 7 7, 5 5))
)'::geometry AS geom
        ) AS g
) j;

  path   │      st_astext
---------------------------------
 {1,1}   │ LINESTRING(1 1,3 3)
 {1,2}   │ LINESTRING(3 3,4 4)
 {2,1,1} │ LINESTRING(5 5,6 6)
 {2,1,2} │ LINESTRING(6 6,7 7)
 {2,1,3} │ LINESTRING(7 7,5 5)
(5 rows)

Exemples de TIN et de triangles

-- Triangle --
SELECT path, ST_AsText(geom)
FROM (
    SELECT (ST_DumpSegments(g.geom)).*
    FROM (SELECT 'TRIANGLE((
        0 0,
        0 9,
        9 0,
        0 0
    ))'::geometry AS geom
        ) AS g
) j;

 path  │      st_astext
 ---------------------------------
 {1,1} │ LINESTRING(0 0,0 9)
 {1,2} │ LINESTRING(0 9,9 0)
 {1,3} │ LINESTRING(9 0,0 0)
(3 rows)
-- TIN --
SELECT path, ST_AsEWKT(geom)
FROM (
    SELECT (ST_DumpSegments(g.geom)).*
    FROM (SELECT 'TIN(((
        0 0 0,
        0 0 1,
        0 1 0,
        0 0 0
    )), ((
        0 0 0,
        0 1 0,
        1 1 0,
        0 0 0
    ))
    )'::geometry AS geom
        ) AS g
) j;

  path   │        st_asewkt
  ---------------------------------
 {1,1,1} │ LINESTRING(0 0 0,0 0 1)
 {1,1,2} │ LINESTRING(0 0 1,0 1 0)
 {1,1,3} │ LINESTRING(0 1 0,0 0 0)
 {2,1,1} │ LINESTRING(0 0 0,0 1 0)
 {2,1,2} │ LINESTRING(0 1 0,1 1 0)
 {2,1,3} │ LINESTRING(1 1 0,0 0 0)
(6 rows)

Name

ST_DumpRings — Renvoie un ensemble de lignes geometry_dump pour les anneaux extérieurs et intérieurs d'un polygone.

Synopsis

geometry_dump[] ST_DumpRings(geometry a_polygon);

Description

Une fonction de retour d'ensemble (SRF) qui extrait les anneaux d'un polygone. Elle renvoie un ensemble de geometry_dump lignes, chacune contenant une géométrie (champ geom) et un tableau d'entiers (champ path).

Le champ geom contient chaque anneau sous forme de POLYGONE. Le champ path est un tableau d'entiers de longueur 1 contenant l'indice de l'anneau du polygone. L'anneau extérieur (coquille) a l'indice 0. Les anneaux intérieurs (trous) ont des indices de 1 et plus.

[Note]

Cela ne fonctionne que pour les géométries POLYGON. Il ne fonctionne pas pour les MULTIPOLYGONS

Disponibilité : PostGIS 1.1.3. Nécessite PostgreSQL 7.3 ou plus.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

Forme générale de la requête.

SELECT polyTable.field1, polyTable.field1,
          (ST_DumpRings(polyTable.geom)).geom As geom
FROM polyTable;

Un polygone avec un seul trou.

SELECT path, ST_AsEWKT(geom) As geom
        FROM ST_DumpRings(
                ST_GeomFromEWKT('POLYGON((-8149064 5133092 1,-8149064 5132986 1,-8148996 5132839 1,-8148972 5132767 1,-8148958 5132508 1,-8148941 5132466 1,-8148924 5132394 1,
                -8148903 5132210 1,-8148930 5131967 1,-8148992 5131978 1,-8149237 5132093 1,-8149404 5132211 1,-8149647 5132310 1,-8149757 5132394 1,
                -8150305 5132788 1,-8149064 5133092 1),
                (-8149362 5132394 1,-8149446 5132501 1,-8149548 5132597 1,-8149695 5132675 1,-8149362 5132394 1))')
                )  as foo;
 path |                                            geom
----------------------------------------------------------------------------------------------------------------
  {0} | POLYGON((-8149064 5133092 1,-8149064 5132986 1,-8148996 5132839 1,-8148972 5132767 1,-8148958 5132508 1,
          |          -8148941 5132466 1,-8148924 5132394 1,
          |          -8148903 5132210 1,-8148930 5131967 1,
          |          -8148992 5131978 1,-8149237 5132093 1,
          |          -8149404 5132211 1,-8149647 5132310 1,-8149757 5132394 1,-8150305 5132788 1,-8149064 5133092 1))
  {1} | POLYGON((-8149362 5132394 1,-8149446 5132501 1,
          |          -8149548 5132597 1,-8149695 5132675 1,-8149362 5132394 1))

Name

ST_EndPoint — Renvoie le dernier point d'une LineString ou CircularLineString.

Synopsis

geometry ST_EndPoint(geometry g);

Description

Renvoie le dernier point d'une géométrie LINESTRING ou CIRCULARLINESTRING comme un POINT. Renvoie NULL si l'entrée n'est pas une LINESTRING ou CIRCULARLINESTRING.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 7.1.4

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

[Note]

Modifié : 2.0.0 ne fonctionne plus avec les MultiLineStrings à géométrie unique. Dans les anciennes versions de PostGIS, une MultiLineString à géométrie unique fonctionnait avec cette fonction et renvoyait le point final. Dans la version 2.0.0, elle renvoie NULL comme toute autre MultiLineString. L'ancien comportement était une fonctionnalité non documentée, mais les personnes qui supposaient que leurs données étaient stockées en tant que LINESTRING peuvent voir ces dernières retourner NULL dans la version 2.0.0.

Exemples

Point final d'une ligne

postgis=# SELECT ST_AsText(ST_EndPoint('LINESTRING(1 1, 2 2, 3 3)'::geometry));
 st_astext
------------
 POINT(3 3)

Le point final d'une ligne qui n'en est pas une est NULL

SELECT ST_EndPoint('POINT(1 1)'::geometry) IS NULL AS is_null;
  is_null
----------
 t

Point final d'une ligne 3D

--3d endpoint
SELECT ST_AsEWKT(ST_EndPoint('LINESTRING(1 1 2, 1 2 3, 0 0 5)'));
  st_asewkt
--------------
 POINT(0 0 5)

Point d'arrivée d'une CircularString

SELECT ST_AsText(ST_EndPoint('CIRCULARSTRING(5 2,-3 1.999999, -2 1, -4 2, 6 3)'::geometry));
 st_astext
------------
 POINT(6 3)

Name

ST_Envelope — Renvoie une géométrie représentant la boîte de délimitation d'une géométrie.

Synopsis

geometry ST_Envelope(geometry g1);

Description

Renvoie la boîte de délimitation minimale en double précision (float8) pour la géométrie fournie, en tant que géométrie. Le polygone est défini par les points d'angle de la boîte de délimitation ((MINX, MINY), (MINX, MAXY), (MAXX, MAXY), (MAXX, MINY), (MINX, MINY)). (PostGIS ajoutera également une coordonnée ZMIN/ZMAX).

D'autres cas (lignes verticales, points) retourneront une géométrie de dimension inférieure à POLYGON, c'est-à-dire POINT ou LINESTRING.

Disponibilité : 1.5.0 changement pour renvoyer un type double précision à la place de float4

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.19

Exemples

SELECT ST_AsText(ST_Envelope('POINT(1 3)'::geometry));
 st_astext
------------
 POINT(1 3)
(1 row)


SELECT ST_AsText(ST_Envelope('LINESTRING(0 0, 1 3)'::geometry));
                   st_astext
--------------------------------
 POLYGON((0 0,0 3,1 3,1 0,0 0))
(1 row)


SELECT ST_AsText(ST_Envelope('POLYGON((0 0, 0 1, 1.0000001 1, 1.0000001 0, 0 0))'::geometry));
                                                  st_astext
--------------------------------------------------------------
 POLYGON((0 0,0 1,1.00000011920929 1,1.00000011920929 0,0 0))
(1 row)
SELECT ST_AsText(ST_Envelope('POLYGON((0 0, 0 1, 1.0000000001 1, 1.0000000001 0, 0 0))'::geometry));
                                                  st_astext
--------------------------------------------------------------
 POLYGON((0 0,0 1,1.00000011920929 1,1.00000011920929 0,0 0))
(1 row)

SELECT Box3D(geom), Box2D(geom), ST_AsText(ST_Envelope(geom)) As envelopewkt
        FROM (SELECT 'POLYGON((0 0, 0 1000012333334.34545678, 1.0000001 1, 1.0000001 0, 0 0))'::geometry As geom) As foo;


        

Enveloppe d'un point et d'une ligne.

SELECT ST_AsText(ST_Envelope(
                ST_Collect(
                        ST_GeomFromText('LINESTRING(55 75,125 150)'),
                                ST_Point(20, 80))
                                )) As wktenv;
wktenv
-----------
POLYGON((20 75,20 150,125 150,125 75,20 75))

Name

ST_ExteriorRing — Renvoie une ligne représentant l'anneau extérieur d'un polygone.

Synopsis

geometry ST_ExteriorRing(geometry a_polygon);

Description

Renvoie une LINESTRING représentant l'anneau extérieur (coquille) d'un POLYGONE. Renvoie NULL si la géométrie n'est pas un polygone.

[Note]

Cette fonction ne prend pas en charge les MULTIPOLYGONES. Pour les MULTIPOLYGONs, utilisez conjointement avec ST_GeometryN ou ST_Dump

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. 2.1.5.1

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 8.2.3, 8.3.3

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

--If you have a table of polygons
SELECT gid, ST_ExteriorRing(geom) AS ering
FROM sometable;

--If you have a table of MULTIPOLYGONs
--and want to return a MULTILINESTRING composed of the exterior rings of each polygon
SELECT gid, ST_Collect(ST_ExteriorRing(geom)) AS erings
        FROM (SELECT gid, (ST_Dump(geom)).geom As geom
                        FROM sometable) As foo
GROUP BY gid;

--3d Example
SELECT ST_AsEWKT(
        ST_ExteriorRing(
        ST_GeomFromEWKT('POLYGON((0 0 1, 1 1 1, 1 2 1, 1 1 1, 0 0 1))')
        )
);

st_asewkt
---------
LINESTRING(0 0 1,1 1 1,1 2 1,1 1 1,0 0 1)

Name

ST_GeometryN — Renvoie un élément d'une collection de géométries.

Synopsis

geometry ST_GeometryN(geometry geomA, integer n);

Description

Renvoie la géométrie du Nième élément basé sur 1 d'une géométrie d'entrée qui est une GEOMETRYCOLLECTION, MULTIPOINT, MULTILINESTRING, MULTICURVE, MULTI)POLYGON ou POLYHEDRALSURFACE. Sinon, renvoie NULL.

[Note]

L'index commence à 1 pour respecter les spécificarions OGC depuis la version 0.8.0. Dans les versions antérieures, l'index commençait à 0.

[Note]

Pour extraire tous les éléments d'une géométrie, ST_Dump est plus efficace et fonctionne pour les géométries atomiques.

Amélioration : 2.0.0 introduction du support TIN, Triangles et surfaces polyédriques.

Changement : 2.0.0. Les versions antérieures renvoient NULL pour les géometries simples (un seul objet). Renvoie désormais la géométrie pour le cas ST_GeometryN(..,1).

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 9.1.5

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Exemples standard

--Extracting a subset of points from a 3d multipoint
SELECT n, ST_AsEWKT(ST_GeometryN(geom, n)) As geomewkt
FROM (
VALUES (ST_GeomFromEWKT('MULTIPOINT((1 2 7), (3 4 7), (5 6 7), (8 9 10))') ),
( ST_GeomFromEWKT('MULTICURVE(CIRCULARSTRING(2.5 2.5,4.5 2.5, 3.5 3.5), (10 11, 12 11))') )
        )As foo(geom)
        CROSS JOIN generate_series(1,100) n
WHERE n <= ST_NumGeometries(geom);

 n |               geomewkt
---+-----------------------------------------
 1 | POINT(1 2 7)
 2 | POINT(3 4 7)
 3 | POINT(5 6 7)
 4 | POINT(8 9 10)
 1 | CIRCULARSTRING(2.5 2.5,4.5 2.5,3.5 3.5)
 2 | LINESTRING(10 11,12 11)


--Extracting all geometries (useful when you want to assign an id)
SELECT gid, n, ST_GeometryN(geom, n)
FROM sometable CROSS JOIN generate_series(1,100) n
WHERE n <= ST_NumGeometries(geom);

Exemples TIN, Triangle et Surfaces Polyédriques

-- Polyhedral surface example
-- Break a Polyhedral surface into its faces
SELECT ST_AsEWKT(ST_GeometryN(p_geom,3)) As geom_ewkt
  FROM (SELECT ST_GeomFromEWKT('POLYHEDRALSURFACE(
((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)),
((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1))
)')  AS p_geom )  AS a;

                geom_ewkt
------------------------------------------
 POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0))
-- TIN --
SELECT ST_AsEWKT(ST_GeometryN(geom,2)) as wkt
  FROM
    (SELECT
       ST_GeomFromEWKT('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )), ((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )')  AS geom
    ) AS g;
-- result --
                 wkt
-------------------------------------
 TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0))

Name

ST_GeometryType — Renvoie le type SQL-MM d'une géométrie sous forme de texte.

Synopsis

text ST_GeometryType(geometry g1);

Description

Renvoie le type de la géométrie sous forme de texte, par exemple : 'ST_LineString', 'ST_Polygon','ST_MultiPolygon' etc. Cette fonction diffère de GeometryType(geometry) par la casse du texte renvoyé et par le préfixe ST_ en début de texte. N'indique pas si la géométrie comporte une dimension MESURE.

Amélioration : 2.0.0 introduction du support des surfaces polyédriques.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.4

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

SELECT ST_GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
                        --result
                        ST_LineString
SELECT ST_GeometryType(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
                ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
                ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
                ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));
                        --result
                        ST_PolyhedralSurface
SELECT ST_GeometryType(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
                ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
                ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
                ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));
                        --result
                        ST_PolyhedralSurface
SELECT ST_GeometryType(geom) as result
  FROM
    (SELECT
       ST_GeomFromEWKT('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )), ((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )')  AS geom
    ) AS g;
 result
--------
 ST_Tin    

Voir aussi

GeometryType


Name

ST_HasArc — Teste si une géométrie contient un arc de cercle

Synopsis

boolean ST_HasArc(geometry geomA);

Description

Renvoie true si une géométrie ou une collection de géométries contient une circular string

Disponibilité : 1.2.3 ?

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Exemples

SELECT ST_HasArc(ST_Collect('LINESTRING(1 2, 3 4, 5 6)', 'CIRCULARSTRING(1 1, 2 3, 4 5, 6 7, 5 6)'));
                st_hasarc
                --------
                t
                

Name

ST_InteriorRingN — Renvoie le Nième anneau intérieur (trou) d'un polygone.

Synopsis

geometry ST_InteriorRingN(geometry a_polygon, integer n);

Description

Renvoie le Nième anneau intérieur (trou) d'une géométrie POLYGONE sous forme de LINESTRING. L'indice commence à 1. Renvoie NULL si la géométrie n'est pas un polygone ou si l'indice est hors de la plage.

[Note]

Cette fonction ne prend pas en charge les MULTIPOLYGONES. Pour les MULTIPOLYGONs, utilisez conjointement avec ST_GeometryN ou ST_Dump

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 8.2.6, 8.3.5

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

SELECT ST_AsText(ST_InteriorRingN(geom, 1)) As geom
FROM (SELECT ST_BuildArea(
                ST_Collect(ST_Buffer(ST_Point(1,2), 20,3),
                        ST_Buffer(ST_Point(1, 2), 10,3))) As geom
                )  as foo;
                

Name

ST_NumCurves — Renvoie le nombre de courbes composantes d'une CompoundCurve.

Synopsis

integer ST_NumCurves(geometry a_compoundcurve);

Description

Renvoie le nombre de courbes composantes d'une CompoundCurve, zéro pour une CompoundCurve vide, ou NULL pour une entrée qui n'est pas une CompoundCurve.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 8.2.6, 8.3.5

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

-- Returns 3
SELECT ST_NumCurves('COMPOUNDCURVE(
    (2 2, 2.5 2.5),
    CIRCULARSTRING(2.5 2.5, 4.5 2.5, 3.5 3.5),
    (3.5 3.5, 2.5 4.5, 3 5, 2 2)
  )');

-- Returns 0
SELECT ST_NumCurves('COMPOUNDCURVE EMPTY');
        

Name

ST_CurveN — Renvoie la Nième courbe composante d'une CompoundCurve.

Synopsis

geometry ST_CurveN(geometry a_compoundcurve, integer index);

Description

Renvoie la Nièmecourbe composante d'une CompoundCurve. L'index commence à 1. Renvoie NULL si la géométrie n'est pas une CompoundCurve ou si l'index est hors de la plage.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 8.2.6, 8.3.5

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

SELECT ST_AsText(ST_CurveN('COMPOUNDCURVE(
    (2 2, 2.5 2.5),
    CIRCULARSTRING(2.5 2.5, 4.5 2.5, 3.5 3.5),
    (3.5 3.5, 2.5 4.5, 3 5, 2 2)
  )', 1));
        

Name

ST_IsClosed — Teste si les points de départ et d'arrivée d'une LineString coïncident. Pour une PolyhedralSurface, teste si elle est fermée (volumétrique).

Synopsis

boolean ST_IsClosed(geometry g);

Description

Renvoie TRUE si les premier et dernier points de la LINESTRING sont identiques. Pour les surface polyhédriques, indique si la surface est surfacique (ouverte) ou volumétrique (fermée).

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 7.1.5, 9.3.3

[Note]

SQL-MM définit le résultat de ST_IsClosed(NULL) comme étant 0, alors que PostGIS renvoie NULL.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Amélioration : 2.0.0 introduction du support des surfaces polyédriques.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples de lignes et de points

postgis=# SELECT ST_IsClosed('LINESTRING(0 0, 1 1)'::geometry);
 st_isclosed
-------------
 f
(1 row)

postgis=# SELECT ST_IsClosed('LINESTRING(0 0, 0 1, 1 1, 0 0)'::geometry);
 st_isclosed
-------------
 t
(1 row)

postgis=# SELECT ST_IsClosed('MULTILINESTRING((0 0, 0 1, 1 1, 0 0),(0 0, 1 1))'::geometry);
 st_isclosed
-------------
 f
(1 row)

postgis=# SELECT ST_IsClosed('POINT(0 0)'::geometry);
 st_isclosed
-------------
 t
(1 row)

postgis=# SELECT ST_IsClosed('MULTIPOINT((0 0), (1 1))'::geometry);
 st_isclosed
-------------
 t
(1 row)

Exemples : surfaces polyédriques

-- A cube --
                SELECT ST_IsClosed(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
                ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
                ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
                ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));

 st_isclosed
-------------
 t


 -- Same as cube but missing a side --
 SELECT ST_IsClosed(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
                ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
                ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
                ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)) )'));

 st_isclosed
-------------
 f

Voir aussi

ST_IsRing


Name

ST_IsCollection — Teste si une géométrie est un type de collection de géométrie.

Synopsis

boolean ST_IsCollection(geometry g);

Description

Renvoie TRUE si le type de géométrie de l'argument est un type de collection de géométrie. Les types de collection sont les suivants :

  • GEOMETRYCOLLECTION

  • MULTI{POINT,POLYGON,LINESTRING,CURVE,SURFACE}

  • COMPOUNDCURVE

[Note]

Cette fonction analyse le type de la géométrie. Renvoie TRUE pour les collections vides ou ne contenant qu'un seul élément.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Exemples

postgis=# SELECT ST_IsCollection('LINESTRING(0 0, 1 1)'::geometry);
 st_iscollection
-------------
 f
(1 row)

postgis=# SELECT ST_IsCollection('MULTIPOINT EMPTY'::geometry);
 st_iscollection
-------------
 t
(1 row)

postgis=# SELECT ST_IsCollection('MULTIPOINT((0 0))'::geometry);
 st_iscollection
-------------
 t
(1 row)

postgis=# SELECT ST_IsCollection('MULTIPOINT((0 0), (42 42))'::geometry);
 st_iscollection
-------------
 t
(1 row)

postgis=# SELECT ST_IsCollection('GEOMETRYCOLLECTION(POINT(0 0))'::geometry);
 st_iscollection
-------------
 t
(1 row)

Name

ST_IsEmpty — Teste si une géométrie est vide.

Synopsis

boolean ST_IsEmpty(geometry geomA);

Description

Renvoie true si cette géométrie est une géométrie vide. Si vrai, alors cette géométrie représente une collection de géométrie vide, un polygone, un point, etc.

[Note]

La norme SQL-MM stipule que ST_IsEmpty(NULL) doit renvoyer 0. PostGIS renvoie NULL.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.7

Cette méthode prend en charge les types Circular String et Curve.

[Warning]

Modifié : 2.0.0 Dans les versions précédentes de PostGIS, ST_GeomFromText('GEOMETRYCOLLECTION(EMPTY)') était autorisé. Ceci est maintenant illégal dans PostGIS 2.0.0 pour mieux se conformer aux normes SQL/MM

Exemples

SELECT ST_IsEmpty(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY'));
 st_isempty
------------
 t
(1 row)

 SELECT ST_IsEmpty(ST_GeomFromText('POLYGON EMPTY'));
 st_isempty
------------
 t
(1 row)

SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));

 st_isempty
------------
 f
(1 row)

 SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))')) = false;
 ?column?
----------
 t
(1 row)

 SELECT ST_IsEmpty(ST_GeomFromText('CIRCULARSTRING EMPTY'));
  st_isempty
------------
 t
(1 row)


                

Name

ST_IsPolygonCCW — Teste si les polygones ont des anneaux extérieurs orientés dans le sens inverse des aiguilles d'une montre et des anneaux intérieurs orientés dans le sens des aiguilles d'une montre.

Synopsis

boolean ST_IsPolygonCCW ( geometry geom );

Description

Renvoie un résultat positif si tous les composants polygonaux de la géométrie en entrée utilisent une orientation anti-horaire pour leur anneau extérieur et une orientation horaire pour tous les anneaux intérieurs.

Retourne vrai si la géométrie n'a pas de composants polygonaux.

[Note]

Les lignes fermées ne sont pas considérées comme des composants polygonaux, de sorte que vous obtiendrez toujours un retour vrai en passant une seule ligne fermée, quelle que soit son orientation.

[Note]

Si une géométrie polygonale n'utilise pas l'orientation inversée pour les anneaux intérieurs (c'est-à-dire si un ou plusieurs anneaux intérieurs sont orientés dans la même direction qu'un anneau extérieur), ST_IsPolygonCW et ST_IsPolygonCCW renvoient tous deux la valeur false.

Disponibilité : 2.4.0

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les coordonnées M.


Name

ST_IsPolygonCW — Teste si les polygones ont des anneaux extérieurs orientés dans le sens des aiguilles d'une montre et des anneaux intérieurs orientés dans le sens inverse des aiguilles d'une montre.

Synopsis

boolean ST_IsPolygonCW ( geometry geom );

Description

Renvoie un résultat positif si tous les composants polygonaux de la géométrie d'entrée utilisent une orientation dans le sens des aiguilles d'une montre pour leur anneau extérieur, et dans le sens inverse des aiguilles d'une montre pour tous les anneaux intérieurs.

Retourne vrai si la géométrie n'a pas de composants polygonaux.

[Note]

Les lignes fermées ne sont pas considérées comme des composants polygonaux, de sorte que vous obtiendrez toujours un retour vrai en passant une seule ligne fermée, quelle que soit son orientation.

[Note]

Si une géométrie polygonale n'utilise pas l'orientation inversée pour les anneaux intérieurs (c'est-à-dire si un ou plusieurs anneaux intérieurs sont orientés dans la même direction qu'un anneau extérieur), ST_IsPolygonCW et ST_IsPolygonCCW renvoient tous deux la valeur false.

Disponibilité : 2.4.0

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les coordonnées M.


Name

ST_IsRing — Teste si une ligne est fermée et simple.

Synopsis

boolean ST_IsRing(geometry g);

Description

Renvoie TRUE si cette LINESTRING est à la fois ST_IsClosed (ST_StartPoint(g) ~= ST_Endpoint(g)) et ST_IsSimple (ne s'intersecte pas).

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. 2.1.5.1

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 7.1.6

[Note]

SQL-MM définit le résultat de ST_IsRing(NULL) comme étant 0, alors que PostGIS renvoie NULL.

Exemples

SELECT ST_IsRing(geom), ST_IsClosed(geom), ST_IsSimple(geom)
FROM (SELECT 'LINESTRING(0 0, 0 1, 1 1, 1 0, 0 0)'::geometry AS geom) AS foo;
 st_isring | st_isclosed | st_issimple
-----------+-------------+-------------
 t         | t           | t
(1 row)

SELECT ST_IsRing(geom), ST_IsClosed(geom), ST_IsSimple(geom)
FROM (SELECT 'LINESTRING(0 0, 0 1, 1 0, 1 1, 0 0)'::geometry AS geom) AS foo;
 st_isring | st_isclosed | st_issimple
-----------+-------------+-------------
 f         | t           | f
(1 row)

Name

ST_IsSimple — Teste si une géométrie n'a pas de points d'auto-intersection ou d'auto-tangente.

Synopsis

boolean ST_IsSimple(geometry geomA);

Description

Renvoie TRUE si cette géométrie ne présente pas d'anomalie comme une auto intersection ou des segments tangentiels. Pour plus d'information sur les notions OGC de simplicité et de validité, se référer à "Ensuring OpenGIS compliance of geometries"

[Note]

La norme SQL-MM indique que le résultat de la fonction ST_IsSimple(NULL) doit être 0 ; PostGIS renvoie NULL.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.8

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

SELECT ST_IsSimple(ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))'));
 st_issimple
-------------
 f
(1 row)

 SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(1 1,2 2,2 3.5,1 3,1 2,2 1)'));
 st_issimple
-------------
 f
(1 row)

Voir aussi

ST_IsValid


Name

ST_M — Renvoie la coordonnée M d'un point.

Synopsis

float ST_M(geometry a_point);

Description

Retourne les coordonnées M d'un point, ou NULL si non disponible. L'entrée doit être un point.

[Note]

Cette fonction ne fait pas (encore) partie de la spécification de l'OGC, mais elle est mentionnée ici pour compléter la liste des fonctions de l'extracteur de coordonnées de points.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette méthode implémente la spécification SQL/MM.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

SELECT ST_M(ST_GeomFromEWKT('POINT(1 2 3 4)'));
 st_m
------
        4
(1 row)

                

Name

ST_MemSize — Renvoie la quantité d'espace mémoire que prend une géométrie.

Synopsis

integer ST_MemSize(geometry geomA);

Description

Renvoie la quantité d'espace mémoire (en octets) que prend la géométrie.

Ceci complète les fonctions intégrées de PostgreSQL fonctions d'objet de base de données pg_column_size, pg_size_pretty, pg_relation_size, pg_total_relation_size.

[Note]

pg_relation_size qui donne la taille en octets d'une table peut renvoyer une taille en octets inférieure à ST_MemSize. Cela est dû au fait que pg_relation_size n'ajoute pas la contribution des tables toasted et que les grandes géométries sont stockées dans les tables TOAST.

pg_total_relation_size - comprend la table, les tables toasted et les index.

pg_column_size indique l'espace que prendrait une géométrie dans une colonne en tenant compte de la compression, et peut donc être inférieur à ST_MemSize

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Modifié : 2.2.0 nom modifié en ST_MemSize pour respecter la convention de nommage.

Exemples

--Return how much byte space Boston takes up  in our Mass data set
SELECT pg_size_pretty(SUM(ST_MemSize(geom))) as totgeomsum,
pg_size_pretty(SUM(CASE WHEN town = 'BOSTON' THEN ST_MemSize(geom) ELSE 0 END)) As bossum,
CAST(SUM(CASE WHEN town = 'BOSTON' THEN ST_MemSize(geom) ELSE 0 END)*1.00 /
                SUM(ST_MemSize(geom))*100 As numeric(10,2)) As perbos
FROM towns;

totgeomsum        bossum        perbos
----------        ------        ------
1522 kB                30 kB        1.99


SELECT ST_MemSize(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'));

---
73

--What percentage of our table is taken up by just the geometry
SELECT pg_total_relation_size('public.neighborhoods') As fulltable_size, sum(ST_MemSize(geom)) As geomsize,
sum(ST_MemSize(geom))*1.00/pg_total_relation_size('public.neighborhoods')*100 As pergeom
FROM neighborhoods;
fulltable_size geomsize  pergeom
------------------------------------------------
262144         96238         36.71188354492187500000
        

Name

ST_NDims — Renvoie la dimension des coordonnées d'une géométrie.

Synopsis

integer ST_NDims(geometry g1);

Description

Renvoie la dimension des coordonnées de la géométrie. PostGIS supporte 2 - (x,y) , 3 - (x,y,z) ou 2D avec mesure - x,y,m, et 4 - 3D avec espace de mesure x,y,z,m

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

SELECT ST_NDims(ST_GeomFromText('POINT(1 1)')) As d2point,
        ST_NDims(ST_GeomFromEWKT('POINT(1 1 2)')) As d3point,
        ST_NDims(ST_GeomFromEWKT('POINTM(1 1 0.5)')) As d2pointm;

         d2point | d3point | d2pointm
---------+---------+----------
           2 |       3 |        3
                        

Name

ST_NPoints — Retourne le nombre de points (vertex) d'un objet géométrique.

Synopsis

integer ST_NPoints(geometry g1);

Description

Retourne le nombre de points d'un objet géométrique. Cela fonctionne pour tous les types de géométrie.

Amélioration : 2.0.0 introduction du support des surfaces polyédriques.

[Note]

Avant la version 1.3.4, cette fonction se bloquait si elle était utilisée avec des géométries contenant des CURVES. Ce problème est corrigé dans la version 1.3.4+

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

SELECT ST_NPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
--result
4

--Polygon in 3D space
SELECT ST_NPoints(ST_GeomFromEWKT('LINESTRING(77.29 29.07 1,77.42 29.26 0,77.27 29.31 -1,77.29 29.07 3)'))
--result
4

Voir aussi

ST_NumPoints


Name

ST_NRings — Renvoie le nombre d'anneaux dans une géométrie polygonale.

Synopsis

integer ST_NRings(geometry geomA);

Description

Si la géométrie est un polygone ou un multi-polygone, renvoie le nombre d'anneaux. Contrairement à NumInteriorRings, il compte également les anneaux extérieurs.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Exemples

SELECT ST_NRings(geom) As Nrings, ST_NumInteriorRings(geom) As ninterrings
                                        FROM (SELECT ST_GeomFromText('POLYGON((1 2, 3 4, 5 6, 1 2))') As geom) As foo;
         nrings | ninterrings
--------+-------------
          1 |           0
(1 row)

Name

ST_NumGeometries — Renvoie le nombre d'éléments dans une collection de géométrie.

Synopsis

integer ST_NumGeometries(geometry geom);

Description

Renvoie le nombre d'éléments d'une collection de géométries (GEOMETRYCOLLECTION ou MULTI*). Pour les géométries atomiques non vides, le résultat est 1. Pour les géométries vides, le résultat est 0.

Amélioration : 2.0.0 introduction du support TIN, Triangles et surfaces polyédriques.

Modifié : 2.0.0 Dans les versions précédentes, cette fonction renvoyait NULL si la géométrie n'était pas de type collection/MULTI. 2.0.0+ renvoie maintenant 1 pour les géométries simples, par exemple POLYGONE, LINESTRING, POINT.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 9.1.4

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Exemples

--Prior versions would have returned NULL for this -- in 2.0.0 this returns 1
SELECT ST_NumGeometries(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
--result
1

--Geometry Collection Example - multis count as one geom in a collection
SELECT ST_NumGeometries(ST_GeomFromEWKT('GEOMETRYCOLLECTION(MULTIPOINT((-2 3),(-2 2)),
LINESTRING(5 5 ,10 10),
POLYGON((-7 4.2,-7.1 5,-7.1 4.3,-7 4.2)))'));
--result
3

Name

ST_NumInteriorRings — Renvoie le nombre d'anneaux intérieurs (trous) d'un polygone.

Synopsis

integer ST_NumInteriorRings(geometry a_polygon);

Description

Renvoie le nombre d'anneaux intérieurs d'une géométrie polygonale. Retourne NULL si la géométrie n'est pas un polygone.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 8.2.5

Modifié : 2.0.0 - dans les versions antérieures, il permettait de passer un MULTIPOLYGONE, renvoyant le nombre d'anneaux intérieurs du premier POLYGONE.

Exemples

--If you have a regular polygon
SELECT gid, field1, field2, ST_NumInteriorRings(geom) AS numholes
FROM sometable;

--If you have multipolygons
--And you want to know the total number of interior rings in the MULTIPOLYGON
SELECT gid, field1, field2, SUM(ST_NumInteriorRings(geom)) AS numholes
FROM (SELECT gid, field1, field2, (ST_Dump(geom)).geom As geom
        FROM sometable) As foo
GROUP BY gid, field1,field2;
                        

Name

ST_NumInteriorRing — Renvoie le nombre d'anneaux intérieurs (trous) d'un polygone. Alias pour ST_NumInteriorRings

Synopsis

integer ST_NumInteriorRing(geometry a_polygon);


Name

ST_NumPatches — Renvoie le nombre de faces d'une surface polyédrique. Retourne null pour les géométries non polyédriques.

Synopsis

integer ST_NumPatches(geometry g1);

Description

Renvoie le nombre de faces d'une surface polyédrique. Retourne null pour les géométries non polyédriques. C'est un alias de ST_NumGeometries pour supporter le nommage MM. Il est plus rapide d'utiliser ST_NumGeometries si vous ne vous souciez pas de la convention MM.

Disponibilité : 2.0.0

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette méthode implémente la spécification SQL/MM. SQL-MM ISO/IEC 13249-3 : 8.5

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

SELECT ST_NumPatches(ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
                ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
                ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
                ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));
                --result
                6
                

Name

ST_NumPoints — Renvoie le nombre de points dans une LineString ou une CircularString.

Synopsis

integer ST_NumPoints(geometry g1);

Description

Retourne le nombre de points dans une ST_LineString ou ST_CircularString. Avant la version 1.4, cette fonction ne fonctionnait qu'avec les lignes, comme l'indiquent les spécifications. A partir de la version 1.4, il s'agit d'un alias de ST_NPoints qui renvoie le nombre de sommets, et pas seulement pour les lignes. Envisagez d'utiliser ST_NPoints à la place, qui est polyvalent et fonctionne avec de nombreux types de géométrie.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 7.2.4

Exemples

SELECT ST_NumPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
                --result
                4
                

Voir aussi

ST_NPoints


Name

ST_PatchN — Renvoie la Nième géométrie (face) d'une PolyhedralSurface.

Synopsis

geometry ST_PatchN(geometry geomA, integer n);

Description

Renvoie la Nième géométrie (face) basée sur 1 si la géométrie est une POLYHEDRALSURFACE ou une POLYHEDRALSURFACEM. Sinon, elle renvoie NULL. Cette fonction renvoie la même réponse que ST_GeometryN pour PolyhedralSurfaces. L'utilisation de ST_GeometryN est plus rapide.

[Note]

L'indice est basé sur 1.

[Note]

Si vous voulez extraire tous les éléments d'une géométrie, ST_Dump est plus efficace.

Disponibilité : 2.0.0

Cette méthode implémente la spécification SQL/MM. SQL-MM ISO/IEC 13249-3 : 8.5

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

--Extract the 2nd face of the polyhedral surface
SELECT ST_AsEWKT(ST_PatchN(geom, 2)) As geomewkt
FROM (
VALUES (ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
        ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
        ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
        ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )')) ) As foo(geom);

              geomewkt
---+-----------------------------------------
 POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0))

Name

ST_PointN — Renvoie le Nième point de la première LineString ou LineString circulaire d'une géométrie.

Synopsis

geometry ST_PointN(geometry a_linestring, integer n);

Description

Renvoie le Nième point d'une ligne ou d'une ligne circulaire dans la géométrie. Les valeurs négatives sont comptées à rebours à partir de la fin de la LineString, de sorte que -1 est le dernier point. Renvoie NULL s'il n'y a pas de ligne dans la géométrie.

[Note]

L'index est basé sur 1 comme pour les spécifications de l'OGC depuis la version 0.8.0. L'indexation à rebours (index négatif) n'est pas prévue dans les spécifications de l'OGC. Les versions précédentes l'ont implémentée en la basant sur 0.

[Note]

Si vous souhaitez obtenir le Nième point de chaque ligne dans une multiligne, utilisez ST_Dump en conjonction avec ST_Dump

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 7.2.5, 7.3.5

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

[Note]

Modifié : la version 2.0.0 ne fonctionne plus avec les multi-lignes à géométrie unique. Dans les anciennes versions de PostGIS, une multi-ligne d'une seule ligne fonctionnait parfaitement avec cette fonction et renvoyait le point de départ. Dans la version 2.0.0, elle renvoie simplement NULL comme n'importe quelle autre multi-ligne.

Modifié : 2.3.0 : indexation négative disponible (-1 est le dernier point)

Exemples

-- Extract all POINTs from a LINESTRING
SELECT ST_AsText(
   ST_PointN(
          column1,
          generate_series(1, ST_NPoints(column1))
   ))
FROM ( VALUES ('LINESTRING(0 0, 1 1, 2 2)'::geometry) ) AS foo;

 st_astext
------------
 POINT(0 0)
 POINT(1 1)
 POINT(2 2)
(3 rows)

--Example circular string
SELECT ST_AsText(ST_PointN(ST_GeomFromText('CIRCULARSTRING(1 2, 3 2, 1 2)'), 2));

 st_astext
------------
 POINT(3 2)
(1 row)

SELECT ST_AsText(f)
FROM ST_GeomFromText('LINESTRING(0 0 0, 1 1 1, 2 2 2)') AS g
  ,ST_PointN(g, -2) AS f; -- 1 based index

    st_astext
-----------------
 POINT Z (1 1 1)
(1 row)

Voir aussi

ST_NPoints


Name

ST_Points — Renvoie un MultiPoint contenant les coordonnées d'une géométrie.

Synopsis

geometry ST_Points( geometry geom );

Description

Renvoie un MultiPoint contenant toutes les coordonnées d'une géométrie. Les points en double sont conservés, y compris les points de départ et d'arrivée des géométries en anneau. (Si vous le souhaitez, les points en double peuvent être supprimés en appelant ST_RemoveRepeatedPoints sur le résultat).

Pour obtenir des informations sur la position de chaque coordonnée dans la géométrie parente, utilisez ST_DumpPoints.

Les coordonnées M et Z sont conservées si elles sont présentes.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Disponibilité : 2.3.0

Exemples

SELECT ST_AsText(ST_Points('POLYGON Z ((30 10 4,10 30 5,40 40 6, 30 10))'));

--result
MULTIPOINT Z ((30 10 4),(10 30 5),(40 40 6),(30 10 4))
                        

Name

ST_StartPoint — Renvoie le premier point d'une LineString.

Synopsis

geometry ST_StartPoint(geometry geomA);

Description

Renvoie le premier point d'une géométrie LINESTRING ou CIRCULARLINESTRING comme un POINT. Renvoie NULL si l'entrée n'est pas une LINESTRING ou CIRCULARLINESTRING.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 7.1.3

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

[Note]

Amélioré : 3.2.0 renvoie un point pour toutes les géométries. Le comportement précédent renvoyait NULL si l'entrée n'était pas une LineString.

Modifié : 2.0.0 ne fonctionne plus avec les MultiLineStrings à géométrie unique. Dans les anciennes versions de PostGIS, une MultiLineString à géométrie unique fonctionnait sans problème avec cette fonction et renvoyait le point de départ. Dans la version 2.0.0, elle renvoie simplement NULL comme toute autre MultiLineString. L'ancien comportement était une fonctionnalité non documentée, mais les personnes qui supposaient que leurs données étaient stockées en tant que LINESTRING peuvent voir ces données retourner NULL dans la version 2.0.0.

Exemples

Point de départ d'une LineString

SELECT ST_AsText(ST_StartPoint('LINESTRING(0 1, 0 2)'::geometry));
 st_astext
------------
 POINT(0 1)

Le point de départ d'une géométrie qui n'est pas une LineString est NULL

SELECT ST_StartPoint('POINT(0 1)'::geometry) IS NULL AS is_null;
  is_null
----------
 t

Point de départ d'une LineString 3D

SELECT ST_AsEWKT(ST_StartPoint('LINESTRING(0 1 1, 0 2 2)'::geometry));
 st_asewkt
------------
 POINT(0 1 1)

Point de départ d'une CircularString

SELECT ST_AsText(ST_StartPoint('CIRCULARSTRING(5 2,-3 1.999999, -2 1, -4 2, 6 3)'::geometry));
 st_astext
------------
 POINT(5 2)

Name

ST_Summary — Renvoie un résumé textuel du contenu d'une géométrie.

Synopsis

text ST_Summary(geometry g);

text ST_Summary(geography g);

Description

Renvoie un résumé textuel du contenu de la géométrie.

Les indicateurs indiqués entre crochets après le type de géométrie ont la signification suivante :

  • M : possède une coordonnée M

  • Z : possède une coordonnée Z

  • B : possède une bounding box en cache

  • G : est géodésique (geography)

  • S : possède un système de référence spatiale

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Disponibilité : 1.2.2

Amélioré : la version 2.0.0 a ajouté la prise en charge du type geography

Amélioré : 2.1.0 Indicateur S pour indiquer si le système de référence spatiale est connu

Amélioré : 2.2.0 Ajout de la prise en charge des TIN et des courbes

Exemples

=# SELECT ST_Summary(ST_GeomFromText('LINESTRING(0 0, 1 1)')) as geom,
        ST_Summary(ST_GeogFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) geog;
            geom             |          geog
-----------------------------+--------------------------
 LineString[B] with 2 points | Polygon[BGS] with 1 rings
                             | ring 0 has 5 points
                             :
(1 row)


=# SELECT ST_Summary(ST_GeogFromText('LINESTRING(0 0 1, 1 1 1)')) As geog_line,
        ST_Summary(ST_GeomFromText('SRID=4326;POLYGON((0 0 1, 1 1 2, 1 2 3, 1 1 1, 0 0 1))')) As geom_poly;
;
           geog_line             |        geom_poly
-------------------------------- +--------------------------
 LineString[ZBGS] with 2 points | Polygon[ZBS] with 1 rings
                                :    ring 0 has 5 points
                                :
(1 row)


Name

ST_X — Renvoie la coordonnée X d'un point.

Synopsis

float ST_X(geometry a_point);

Description

Renvoie la coordonnée X du point, ou NULL si elle n'est pas disponible. L'entrée doit être un point.

[Note]

Pour obtenir les valeurs X minimale et maximale des coordonnées géométriques, utilisez les fonctions ST_XMin et ST_XMax.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 6.1.3

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

SELECT ST_X(ST_GeomFromEWKT('POINT(1 2 3 4)'));
 st_x
------
        1
(1 row)

SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)')));
 st_y
------
  1.5
(1 row)

                

Name

ST_Y — Renvoie la coordonnée Y d'un point.

Synopsis

float ST_Y(geometry a_point);

Description

Renvoie la coordonnée Y du point, ou NULL si elle n'est pas disponible. L'entrée doit être un point.

[Note]

Pour obtenir les valeurs minimale et maximale en Y des coordonnées géométriques, utilisez les fonctions ST_YMin et ST_YMax.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 6.1.4

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

SELECT ST_Y(ST_GeomFromEWKT('POINT(1 2 3 4)'));
 st_y
------
        2
(1 row)

SELECT ST_Y(ST_Centroid(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)')));
 st_y
------
  1.5
(1 row)


                

Name

ST_Z — Renvoie la coordonnée Z d'un point.

Synopsis

float ST_Z(geometry a_point);

Description

Renvoie la coordonnée Z du point, ou NULL si elle n'est pas disponible. L'entrée doit être un point.

[Note]

Pour obtenir les valeurs minimale et maximale de Z des coordonnées géométriques, utilisez les fonctions ST_ZMin et ST_ZMax.

Cette méthode implémente la spécification SQL/MM.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

SELECT ST_Z(ST_GeomFromEWKT('POINT(1 2 3 4)'));
 st_z
------
        3
(1 row)

                

Name

ST_Zmflag — Retourne un code indiquant la dimension des coordonnées ZM d'une géométrie.

Synopsis

smallint ST_Zmflag(geometry geomA);

Description

Retourne un code indiquant la dimension des coordonnées ZM d'une géométrie.

Les valeurs sont les suivantes : 0 = 2D, 1 = 3D-M, 2 = 3D-Z, 3 = 4D.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Exemples

SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRING(1 2, 3 4)'));
 st_zmflag
-----------
                 0

SELECT ST_Zmflag(ST_GeomFromEWKT('LINESTRINGM(1 2 3, 3 4 3)'));
 st_zmflag
-----------
                 1

SELECT ST_Zmflag(ST_GeomFromEWKT('CIRCULARSTRING(1 2 3, 3 4 3, 5 6 3)'));
 st_zmflag
-----------
                 2
SELECT ST_Zmflag(ST_GeomFromEWKT('POINT(1 2 3 4)'));
 st_zmflag
-----------
                 3

Name

ST_HasZ — Vérifie si une géométrie possède une dimension Z.

Synopsis

boolean ST_HasZ(geometry geom);

Description

Vérifie si la géométrie d'entrée a une dimension Z et renvoie une valeur booléenne. Si la géométrie a une dimension Z, le résultat est vrai ; sinon, il est faux.

Les objets géométriques dotés d'une dimension Z représentent généralement des géométries tridimensionnelles (3D), tandis que ceux qui en sont dépourvus sont des géométries bidimensionnelles (2D).

Cette fonction est utile pour déterminer si une géométrie contient des informations sur l'altitude ou la hauteur.

Disponibilité : 3.5.0

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les coordonnées M.

Exemples

SELECT ST_HasZ(ST_GeomFromText('POINT(1 2 3)'));
 --result
 true
SELECT ST_HasZ(ST_GeomFromText('LINESTRING(0 0, 1 1)'));
 --result
 false

Name

ST_HasM — Vérifie si une géométrie a une dimension M (mesure).

Synopsis

boolean ST_HasM(geometry geom);

Description

Vérifie si la géométrie d'entrée a une dimension M (mesure) et renvoie une valeur booléenne. Si la géométrie a une dimension M, il renvoie vrai ; sinon, il renvoie faux.

Les objets géométriques de dimension M représentent généralement des mesures ou des données supplémentaires associées à des entités spatiales.

Cette fonction est utile pour déterminer si une géométrie contient des informations de mesure.

Disponibilité : 3.5.0

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les coordonnées M.

Exemples

SELECT ST_HasM(ST_GeomFromText('POINTM(1 2 3)'));
 --result
 true
SELECT ST_HasM(ST_GeomFromText('LINESTRING(0 0, 1 1)'));
 --result
 false

7.5. Éditeurs de géométrie

Abstract

Ces fonctions créent des géométries modifiées en changeant le type, la structure ou les sommets.

  • ST_AddPoint — Ajoute un point à une LineString.
  • ST_CollectionExtract — Pour une collection de géométries spécifiée, renvoie une multi-géométrie contenant uniquement des éléments d'un type spécifié.
  • ST_CollectionHomogenize — Renvoie la représentation la plus simple d'une collection de géométries.
  • ST_CurveToLine — Convertit une géométrie contenant des courbes en une géométrie linéaire.
  • ST_Scroll — Modifier le point de départ d'une LineString fermée.
  • ST_FlipCoordinates — Renvoie une version d'une géométrie dont les axes X et Y sont inversés.
  • ST_Force2D — Forcer les géométries à passer en "mode bidimensionnel".
  • ST_Force3D — Force les géométries en mode XYZ. Il s'agit d'un alias de ST_Force3DZ.
  • ST_Force3DZ — Forcer les géométries en mode XYZ.
  • ST_Force3DM — Forcer les géométries en mode XYM.
  • ST_Force4D — Forcer les géométries en mode XYZM.
  • ST_ForceCollection — Convertir la géométrie en une GEOMETRYCOLLECTION.
  • ST_ForceCurve — Retransformation d'une géométrie dans son type de courbure, le cas échéant.
  • ST_ForcePolygonCCW — Oriente tous les anneaux extérieurs dans le sens inverse des aiguilles d'une montre et tous les anneaux intérieurs dans le sens des aiguilles d'une montre.
  • ST_ForcePolygonCW — Oriente tous les anneaux extérieurs dans le sens des aiguilles d'une montre et tous les anneaux intérieurs dans le sens inverse des aiguilles d'une montre.
  • ST_ForceSFS — Forcer les géométries à utiliser uniquement les types de géométrie SFS 1.1.
  • ST_ForceRHR — Force l'orientation des sommets d'un polygone à suivre la règle de la main droite.
  • ST_LineExtend — Renvoie une ligne prolongée vers l'avant et vers l'arrière selon les distances spécifiées.
  • ST_LineToCurve — Convertit une géométrie linéaire en une géométrie courbe.
  • ST_Multi — Renvoie la géométrie sous la forme d'une géométrie MULTI*.
  • ST_Normalize — Renvoie la géométrie sous sa forme canonique.
  • ST_Project — Renvoie un point projeté à partir d'un point de départ en fonction d'une distance et d'un azimut.
  • ST_QuantizeCoordinates — Met à zéro les bits de poids faible des coordonnées
  • ST_RemovePoint — Supprime un point d'une ligne.
  • ST_RemoveRepeatedPoints — Renvoie une version d'une géométrie dont les points en double ont été supprimés.
  • ST_RemoveIrrelevantPointsForView — Removes points that are irrelevant for rendering a specific rectangluar view of a geometry.
  • ST_RemoveSmallParts — Removes small parts (polygon rings or linestrings) of a geometry.
  • ST_Reverse — Retourne la géométrie avec l'ordre des sommets inversé.
  • ST_Segmentize — Renvoie une geometry/geography modifiée dont aucun segment ne dépasse une distance donnée.
  • ST_SetPoint — Remplacer le point d'une ligne par un point donné.
  • ST_ShiftLongitude — Décale les coordonnées de longitude d'une géométrie entre -180..180 et 0..360.
  • ST_WrapX — Enveloppe une géométrie autour d'une valeur X.
  • ST_SnapToGrid — Accrocher tous les points de la géométrie d'entrée à une grille régulière.
  • ST_Snap — Accrocher les segments et les sommets de la géométrie d'entrée aux sommets d'une géométrie de référence.
  • ST_SwapOrdinates — Renvoie une version de la géométrie donnée avec les valeurs d'ordonnées permutées.

Name

ST_AddPoint — Ajoute un point à une LineString.

Synopsis

geometry ST_AddPoint(geometry linestring, geometry point);

geometry ST_AddPoint(geometry linestring, geometry point, integer position = -1);

Description

Ajoute un point à une LineString avant l'index position (en utilisant un index basé sur 0). Si le paramètre position est omis ou vaut -1, le point est ajouté à la fin de la LineString.

Disponibilité : 1.1.0

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

Ajouter un point à la fin d'une ligne 3D

SELECT ST_AsEWKT(ST_AddPoint('LINESTRING(0 0 1, 1 1 1)', ST_MakePoint(1, 2, 3)));

    st_asewkt
    ----------
    LINESTRING(0 0 1,1 1 1,1 2 3)

Garantir que toutes les lignes d'une table sont fermées en ajoutant le point de départ de chaque ligne à la fin de la ligne uniquement pour celles qui ne sont pas fermées.

UPDATE sometable
SET geom = ST_AddPoint(geom, ST_StartPoint(geom))
FROM sometable
WHERE ST_IsClosed(geom) = false;

Name

ST_CollectionExtract — Pour une collection de géométries spécifiée, renvoie une multi-géométrie contenant uniquement des éléments d'un type spécifié.

Synopsis

geometry ST_CollectionExtract(geometry collection);

geometry ST_CollectionExtract(geometry collection, integer type);

Description

Pour une collection de géométries spécifiée, renvoie une multi-géométrie homogène.

Si le type n'est pas spécifié, il renvoie une multi-géométrie contenant uniquement des géométries de la dimension la plus élevée. Les polygones sont donc préférés aux lignes, qui sont préférées aux points.

Si le type est spécifié, renvoie une multi-géométrie contenant uniquement ce type. S'il n'y a pas de sous-géométrie du bon type, une géométrie VIDE est renvoyée. Seuls les points, les lignes et les polygones sont pris en charge. Les numéros de type sont les suivants :

  • 1 == POINT

  • 2 == LINESTRING

  • 3 == POLYGON

Pour les entrées de géométrie atomique, la géométrie est restituée inchangée si le type d'entrée correspond au type demandé. Sinon, le résultat est une géométrie VIDE du type spécifié. Si nécessaire, ces géométries peuvent être converties en géométries multiples en utilisant ST_Multi.

[Warning]

La validité des résultats MultiPolygon n'est pas vérifiée. Si les composants du polygone sont adjacents ou se chevauchent, le résultat ne sera pas valide. (Par exemple, cela peut se produire lorsque cette fonction est appliquée à un résultat ST_Split). Cette situation peut être vérifiée avec ST_IsValid et réparée avec ST_MakeValid.

Disponibilité : 1.5.0

[Note]

Avant la version 1.5.3, cette fonction renvoyait les entrées atomiques inchangées, quel que soit leur type. Dans la version 1.5.3, les géométries simples non correspondantes renvoyaient un résultat NULL. Dans la version 2.0.0, les géométries simples non correspondantes renvoient un résultat VIDE du type demandé.

Exemples

Extraire le type de dimension le plus élevé :

SELECT ST_AsText(ST_CollectionExtract(
        'GEOMETRYCOLLECTION( POINT(0 0), LINESTRING(1 1, 2 2) )'));
    st_astext
    ---------------
    MULTILINESTRING((1 1, 2 2))

Extraire des points (type 1 == POINT) :

SELECT ST_AsText(ST_CollectionExtract(
        'GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0)))',
        1 ));
    st_astext
    ---------------
    MULTIPOINT((0 0))

Extraire des lignes (type 2 == LINESTRING) :

SELECT ST_AsText(ST_CollectionExtract(
        'GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1)),LINESTRING(2 2, 3 3))',
        2 ));
    st_astext
    ---------------
    MULTILINESTRING((0 0, 1 1), (2 2, 3 3))

Name

ST_CollectionHomogenize — Renvoie la représentation la plus simple d'une collection de géométries.

Synopsis

geometry ST_CollectionHomogenize(geometry collection);

Description

Pour une collection de géométries spécifiée, renvoie la représentation la plus simple du contenu.

  • Les collections homogènes (uniformes) sont renvoyées sous la forme de la multi-géométrie appropriée.

  • Les collections hétérogènes (mixtes) sont écrasées en une seule GeometryCollection.

  • Les collections contenant un seul élément atomique sont renvoyées sous la forme de cet élément.

  • Les géométries atomiques sont renvoyées telles quelles. Si nécessaire, elles peuvent être converties en une géométrie multiple en utilisant ST_Multi.

[Warning]

Cette fonction ne garantit pas la validité du résultat. En particulier, une collection contenant des polygones adjacents ou se chevauchant créera un MultiPolygon invalide. Cette situation peut être vérifiée avec ST_IsValid et réparée avec ST_MakeValid.

Disponibilité : 2.0.0

Exemples

Collection d'un seul élément convertie en géométrie atomique

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0))'));

        st_astext
        ------------
        POINT(0 0)

Collection imbriquée d'éléments simples convertie en géométrie atomique :

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(MULTIPOINT((0 0)))'));

        st_astext
        ------------
        POINT(0 0)

Collection convertie en une géométrie multiple :

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0),POINT(1 1))'));

        st_astext
        ---------------------
        MULTIPOINT((0 0),(1 1))

Collection hétérogène imbriquée écrasée en une GeometryCollection :

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0), GEOMETRYCOLLECTION( LINESTRING(1 1, 2 2)))'));

        st_astext
        ---------------------
        GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(1 1,2 2))

Collection de polygones convertis en un MultiPolygon (non valide) :

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION (POLYGON ((10 50, 50 50, 50 10, 10 10, 10 50)), POLYGON ((90 50, 90 10, 50 10, 50 50, 90 50)))'));

        st_astext
        ---------------------
        MULTIPOLYGON(((10 50,50 50,50 10,10 10,10 50)),((90 50,90 10,50 10,50 50,90 50)))

Name

ST_CurveToLine — Convertit une géométrie contenant des courbes en une géométrie linéaire.

Synopsis

geometry ST_CurveToLine(geometry curveGeom, float tolerance, integer tolerance_type, integer flags);

Description

Convertit une CIRCULAR STRING en LINESTRING régulière ou CURVEPOLYGON en POLYGON ou MULTISURFACE en MULTIPOLYGON. Utile pour les sorties vers des appareils qui ne supportent pas les types de géométrie CIRCULARSTRING

Convertit une géométrie donnée en une géométrie linéaire. Chaque géométrie ou segment courbe est converti en une approximation linéaire en utilisant la `tolérance` et les options données (32 segments par quadrant et aucune option par défaut).

L'argument 'tolerance_type' détermine l'interprétation de l'argument `tolerance`. Il peut prendre les valeurs suivantes :

  • 0 (par défaut) : La tolérance est le nombre maximum de segments par quadrant.

  • 1 : La tolérance est l'écart maximal de la ligne par rapport à la courbe, en unités de source.

  • 2 : La tolérance est l'angle maximal, en radians, entre les rayons générateurs.

L'argument 'flags' est un champ de bits. 0 par défaut. Les bits supportés sont :

  • 1 : Sortie symétrique (indépendante de l'orientation).

  • 2 : Conserver l'angle, évite de réduire les angles (longueur des segments) lors de la production d'une sortie symétrique. N'a aucun effet lorsque l'indicateur de symétrie est désactivé.

Disponibilité : 1.3.0

Amélioration : 2.4.0 a ajouté la prise en charge de la tolérance de l'écart maximal et de l'angle maximal, ainsi que de la sortie symétrique.

Amélioration : la version 3.0.0 a mis en place un nombre minimum de segments par arc linéarisé afin d'éviter une rupture topologique.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3: 7.1.7

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Exemples

SELECT ST_AsText(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)')));

--Result --
 LINESTRING(220268 150415,220269.95064912 150416.539364228,220271.823415575 150418.17258804,220273.613787707 150419.895736857,
 220275.317452352 150421.704659462,220276.930305234 150423.594998003,220278.448460847 150425.562198489,
 220279.868261823 150427.60152176,220281.186287736 150429.708054909,220282.399363347 150431.876723113,
 220283.50456625 150434.10230186,220284.499233914 150436.379429536,220285.380970099 150438.702620341,220286.147650624 150441.066277505,
 220286.797428488 150443.464706771,220287.328738321 150445.892130112,220287.740300149 150448.342699654,
 220288.031122486 150450.810511759,220288.200504713 150453.289621251,220288.248038775 150455.77405574,
 220288.173610157 150458.257830005,220287.977398166 150460.734960415,220287.659875492 150463.199479347,
 220287.221807076 150465.64544956,220286.664248262 150468.066978495,220285.988542259 150470.458232479,220285.196316903 150472.81345077,
 220284.289480732 150475.126959442,220283.270218395 150477.39318505,220282.140985384 150479.606668057,
 220280.90450212 150481.762075989,220279.5637474 150483.85421628,220278.12195122 150485.87804878,
 220276.582586992 150487.828697901,220274.949363179 150489.701464356,220273.226214362 150491.491836488,
 220271.417291757 150493.195501133,220269.526953216 150494.808354014,220267.559752731 150496.326509628,
 220265.520429459 150497.746310603,220263.41389631 150499.064336517,220261.245228106 150500.277412127,
 220259.019649359 150501.38261503,220256.742521683 150502.377282695,220254.419330878 150503.259018879,
 220252.055673714 150504.025699404,220249.657244448 150504.675477269,220247.229821107 150505.206787101,
 220244.779251566 150505.61834893,220242.311439461 150505.909171266,220239.832329968 150506.078553494,
 220237.347895479 150506.126087555,220234.864121215 150506.051658938,220232.386990804 150505.855446946,
 220229.922471872 150505.537924272,220227.47650166 150505.099855856,220225.054972724 150504.542297043,
 220222.663718741 150503.86659104,220220.308500449 150503.074365683,
 220217.994991777 150502.167529512,220215.72876617 150501.148267175,
 220213.515283163 150500.019034164,220211.35987523 150498.7825509,
 220209.267734939 150497.441796181,220207.243902439 150496,
 220205.293253319 150494.460635772,220203.420486864 150492.82741196,220201.630114732 150491.104263143,
 220199.926450087 150489.295340538,220198.313597205 150487.405001997,220196.795441592 150485.437801511,
 220195.375640616 150483.39847824,220194.057614703 150481.291945091,220192.844539092 150479.123276887,220191.739336189 150476.89769814,
 220190.744668525 150474.620570464,220189.86293234 150472.297379659,220189.096251815 150469.933722495,
 220188.446473951 150467.535293229,220187.915164118 150465.107869888,220187.50360229 150462.657300346,
 220187.212779953 150460.189488241,220187.043397726 150457.710378749,220186.995863664 150455.22594426,
 220187.070292282 150452.742169995,220187.266504273 150450.265039585,220187.584026947 150447.800520653,
 220188.022095363 150445.35455044,220188.579654177 150442.933021505,220189.25536018 150440.541767521,
 220190.047585536 150438.18654923,220190.954421707 150435.873040558,220191.973684044 150433.60681495,
 220193.102917055 150431.393331943,220194.339400319 150429.237924011,220195.680155039 150427.14578372,220197.12195122 150425.12195122,
 220198.661315447 150423.171302099,220200.29453926 150421.298535644,220202.017688077 150419.508163512,220203.826610682 150417.804498867,
 220205.716949223 150416.191645986,220207.684149708 150414.673490372,220209.72347298 150413.253689397,220211.830006129 150411.935663483,
 220213.998674333 150410.722587873,220216.22425308 150409.61738497,220218.501380756 150408.622717305,220220.824571561 150407.740981121,
 220223.188228725 150406.974300596,220225.586657991 150406.324522731,220227 150406)

--3d example
SELECT ST_AsEWKT(ST_CurveToLine(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)')));
Output
------
 LINESTRING(220268 150415 1,220269.95064912 150416.539364228 1.0181172856673,
 220271.823415575 150418.17258804 1.03623457133459,220273.613787707 150419.895736857 1.05435185700189,....AD INFINITUM ....
    220225.586657991 150406.324522731 1.32611114201132,220227 150406 3)

--use only 2 segments to approximate quarter circle
SELECT ST_AsText(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'),2));
st_astext
------------------------------
 LINESTRING(220268 150415,220287.740300149 150448.342699654,220278.12195122 150485.87804878,
 220244.779251566 150505.61834893,220207.243902439 150496,220187.50360229 150462.657300346,
 220197.12195122 150425.12195122,220227 150406)

-- Ensure approximated line is no further than 20 units away from
-- original curve, and make the result direction-neutral
SELECT ST_AsText(ST_CurveToLine(
 'CIRCULARSTRING(0 0,100 -100,200 0)'::geometry,
    20, -- Tolerance
    1, -- Above is max distance between curve and line
    1  -- Symmetric flag
));
st_astext
-------------------------------------------------------------------------------------------
 LINESTRING(0 0,50 -86.6025403784438,150 -86.6025403784439,200 -1.1331077795296e-13,200 0)


        

Voir aussi

ST_LineToCurve


Name

ST_Scroll — Modifier le point de départ d'une LineString fermée.

Synopsis

geometry ST_Scroll(geometry linestring, geometry point);

Description

Modifie le point de départ/fin d'une LineString fermée en fonction du sommet point donné.

Disponibilité : 3.2.0

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les coordonnées M.

Exemples

Faire partir une ligne fermée de son 3ème sommet

SELECT ST_AsEWKT(ST_Scroll('SRID=4326;LINESTRING(0 0 0 1, 10 0 2 0, 5 5 4 2,0 0 0 1)', 'POINT(5 5 4 2)'));

st_asewkt
----------
SRID=4326;LINESTRING(5 5 4 2,0 0 0 1,10 0 2 0,5 5 4 2)

Voir aussi

ST_Normalize


Name

ST_FlipCoordinates — Renvoie une version d'une géométrie dont les axes X et Y sont inversés.

Synopsis

geometry ST_FlipCoordinates(geometry geom);

Description

Renvoie une version de la géométrie donnée avec les axes X et Y inversés. Utile pour fixer les géométries qui contiennent des coordonnées exprimées en latitude/longitude (Y,X).

Disponibilité : 2.0.0

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les coordonnées M.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Exemple

SELECT ST_AsEWKT(ST_FlipCoordinates(GeomFromEWKT('POINT(1 2)')));
 st_asewkt
------------
POINT(2 1)
         

Voir aussi

ST_SwapOrdinates


Name

ST_Force2D — Forcer les géométries à passer en "mode bidimensionnel".

Synopsis

geometry ST_Force2D(geometry geomA);

Description

Force les géométries à passer en "mode bidimensionnel", de sorte que toutes les représentations de sortie n'auront que les coordonnées X et Y. Ceci est utile pour forcer une sortie conforme à l'OGC (puisque l'OGC ne spécifie que des géométries à 2 dimensions).

Amélioration : 2.0.0 introduction du support des surfaces polyédriques.

Modifié : 2.1.0. Jusqu'à la version 2.0.x, elle s'appelait ST_Force_2D.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

SELECT ST_AsEWKT(ST_Force2D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));
                st_asewkt
-------------------------------------
CIRCULARSTRING(1 1,2 3,4 5,6 7,5 6)

SELECT  ST_AsEWKT(ST_Force2D('POLYGON((0 0 2,0 5 2,5 0 2,0 0 2),(1 1 2,3 1 2,1 3 2,1 1 2))'));

                                  st_asewkt
----------------------------------------------
 POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))

                

Voir aussi

ST_Force3D


Name

ST_Force3D — Force les géométries en mode XYZ. Il s'agit d'un alias de ST_Force3DZ.

Synopsis

geometry ST_Force3D(geometry geomA, float Zvalue = 0.0);

Description

Force les géométries en mode XYZ. Il s'agit d'un alias de ST_Force3DZ. Si une géométrie n'a pas de composante Z, une Zvalue coordonnée Z est ajoutée.

Amélioration : 2.0.0 introduction du support des surfaces polyédriques.

Modifié : 2.1.0. Jusqu'à la version 2.0.x, elle s'appelait ST_Force_3D.

Modifié : 3.1.0. Ajout de la prise en charge pour pouvoir passer une valeur Z non nulle.

Cette fonction prend en charge les surfaces Polyhedral.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

--Nothing happens to an already 3D geometry
                SELECT ST_AsEWKT(ST_Force3D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));
                                   st_asewkt
-----------------------------------------------
 CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)


SELECT  ST_AsEWKT(ST_Force3D('POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))'));

                                                 st_asewkt
--------------------------------------------------------------
 POLYGON((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0))
                

Name

ST_Force3DZ — Forcer les géométries en mode XYZ.

Synopsis

geometry ST_Force3DZ(geometry geomA, float Zvalue = 0.0);

Description

Force les géométries à passer en mode XYZ. Si une géométrie n'a pas de composante Z, une Zvalue coordonnée Z est ajoutée.

Amélioration : 2.0.0 introduction du support des surfaces polyédriques.

Modifié : 2.1.0. Jusqu'à la version 2.0.x, elle s'appelait ST_Force_3DZ.

Modifié : 3.1.0. Ajout de la prise en charge pour pouvoir passer une valeur Z non nulle.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Exemples

--Nothing happens to an already 3D geometry
SELECT ST_AsEWKT(ST_Force3DZ(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));
                                   st_asewkt
-----------------------------------------------
 CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)


SELECT  ST_AsEWKT(ST_Force3DZ('POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))'));

                                                 st_asewkt
--------------------------------------------------------------
 POLYGON((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0))
                

Name

ST_Force3DM — Forcer les géométries en mode XYM.

Synopsis

geometry ST_Force3DM(geometry geomA, float Mvalue = 0.0);

Description

Force les géométries à passer en mode XYM. Si une géométrie n'a pas de composante M, une Mvalue coordonnée M est ajoutée. Si la géométrie a une composante Z, la coordonnée Z est supprimée

Modifié : 2.1.0. Jusqu'à la version 2.0.x, elle s'appelait ST_Force_3DM.

Modifié : 3.1.0. Ajout de la prise en charge de pouvoir passer une valeur M non nulle.

Cette méthode prend en charge les types Circular String et Curve.

Exemples

--Nothing happens to an already 3D geometry
SELECT ST_AsEWKT(ST_Force3DM(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));
                                   st_asewkt
------------------------------------------------
 CIRCULARSTRINGM(1 1 0,2 3 0,4 5 0,6 7 0,5 6 0)


SELECT  ST_AsEWKT(ST_Force3DM('POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 1))'));

                                                  st_asewkt
---------------------------------------------------------------
 POLYGONM((0 0 0,0 5 0,5 0 0,0 0 0),(1 1 0,3 1 0,1 3 0,1 1 0))

                

Name

ST_Force4D — Forcer les géométries en mode XYZM.

Synopsis

geometry ST_Force4D(geometry geomA, float Zvalue = 0.0, float Mvalue = 0.0);

Description

Force les géométries en mode XYZM. Zvalue et Mvalue sont ajoutés pour les dimensions Z et M manquantes, respectivement.

Modifié : 2.1.0. Jusqu'à la version 2.0.x, elle s'appelait ST_Force_4D.

Modifié : 3.1.0. Ajout de la prise en charge de pouvoir passer des valeurs Z et M non nulles.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Exemples

--Nothing happens to an already 3D geometry
SELECT ST_AsEWKT(ST_Force4D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));
                                                st_asewkt
---------------------------------------------------------
 CIRCULARSTRING(1 1 2 0,2 3 2 0,4 5 2 0,6 7 2 0,5 6 2 0)



SELECT  ST_AsEWKT(ST_Force4D('MULTILINESTRINGM((0 0 1,0 5 2,5 0 3,0 0 4),(1 1 1,3 1 1,1 3 1,1 1 1))'));

                                                                          st_asewkt
--------------------------------------------------------------------------------------
 MULTILINESTRING((0 0 0 1,0 5 0 2,5 0 0 3,0 0 0 4),(1 1 0 1,3 1 0 1,1 3 0 1,1 1 0 1))

                

Name

ST_ForceCollection — Convertir la géométrie en une GEOMETRYCOLLECTION.

Synopsis

geometry ST_ForceCollection(geometry geomA);

Description

Convertit la géométrie en une GEOMETRYCOLLECTION. Ceci est utile pour simplifier la représentation WKB.

Amélioration : 2.0.0 introduction du support des surfaces polyédriques.

Disponibilité : 1.2.2, avant la version 1.3.4 cette fonction plante avec les courbes. Ceci est corrigé dans la version 1.3.4+

Modifié : 2.1.0. Jusqu'à la version 2.0.x, cette fonction était appelée ST_Force_Collection.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Exemples

SELECT  ST_AsEWKT(ST_ForceCollection('POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 1))'));

                                                                   st_asewkt
----------------------------------------------------------------------------------
 GEOMETRYCOLLECTION(POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 1)))


  SELECT ST_AsText(ST_ForceCollection('CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)'));
                                                                   st_astext
--------------------------------------------------------------------------------
 GEOMETRYCOLLECTION(CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))
(1 row)

                
-- POLYHEDRAL example --
SELECT ST_AsEWKT(ST_ForceCollection('POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
 ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
 ((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
 ((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
 ((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
 ((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)))'))

                                                                   st_asewkt
----------------------------------------------------------------------------------
GEOMETRYCOLLECTION(
  POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
  POLYGON((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
  POLYGON((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
  POLYGON((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
  POLYGON((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
  POLYGON((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1))
)
                

Name

ST_ForceCurve — Retransformation d'une géométrie dans son type de courbure, le cas échéant.

Synopsis

geometry ST_ForceCurve(geometry g);

Description

Transforme une géométrie en sa représentation courbe, le cas échéant : les lignes deviennent des courbes composées, les multilignes deviennent des multicourbes, les polygones deviennent des polygones courbes, les multipolygones deviennent des multisurfaces. Si la géométrie en entrée est déjà une représentation courbe, le résultat est identique à celui de l'entrée.

Disponibilité : 2.2.0

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Exemples

SELECT ST_AsText(
  ST_ForceCurve(
        'POLYGON((0 0 2, 5 0 2, 0 5 2, 0 0 2),(1 1 2, 1 3 2, 3 1 2, 1 1 2))'::geometry
  )
);
                              st_astext
----------------------------------------------------------------------
 CURVEPOLYGON Z ((0 0 2,5 0 2,0 5 2,0 0 2),(1 1 2,1 3 2,3 1 2,1 1 2))
(1 row)

Voir aussi

ST_LineToCurve


Name

ST_ForcePolygonCCW — Oriente tous les anneaux extérieurs dans le sens inverse des aiguilles d'une montre et tous les anneaux intérieurs dans le sens des aiguilles d'une montre.

Synopsis

geometry ST_ForcePolygonCCW ( geometry geom );

Description

Force les (Multi)Polygones à utiliser une orientation dans le sens inverse des aiguilles d'une montre pour leur anneau extérieur, et une orientation dans le sens des aiguilles d'une montre pour leurs anneaux intérieurs. Les géométries non polygonales sont renvoyées inchangées.

Disponibilité : 2.4.0

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les coordonnées M.


Name

ST_ForcePolygonCW — Oriente tous les anneaux extérieurs dans le sens des aiguilles d'une montre et tous les anneaux intérieurs dans le sens inverse des aiguilles d'une montre.

Synopsis

geometry ST_ForcePolygonCW ( geometry geom );

Description

Force les (Multi)Polygones à utiliser une orientation dans le sens des aiguilles d'une montre pour leur anneau extérieur, et une orientation dans le sens inverse des aiguilles d'une montre pour leurs anneaux intérieurs. Les géométries non polygonales sont renvoyées inchangées.

Disponibilité : 2.4.0

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les coordonnées M.


Name

ST_ForceSFS — Forcer les géométries à utiliser uniquement les types de géométrie SFS 1.1.

Synopsis

geometry ST_ForceSFS(geometry geomA);

geometry ST_ForceSFS(geometry geomA, text version);

Description

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.


Name

ST_ForceRHR — Force l'orientation des sommets d'un polygone à suivre la règle de la main droite.

Synopsis

geometry ST_ForceRHR(geometry g);

Description

Force l'orientation des sommets d'un polygone à suivre la règle de la main droite, dans laquelle la zone délimitée par le polygone se trouve à droite de la limite. En particulier, l'anneau extérieur est orienté dans le sens des aiguilles d'une montre et les anneaux intérieurs dans le sens inverse. Cette fonction est synonyme de ST_ForcePolygonCW

[Note]

La définition ci-dessus de la règle de la main droite est en conflit avec des définitions utilisées dans d'autres contextes. Pour éviter toute confusion, il est recommandé d'utiliser ST_ForcePolygonCW.

Amélioration : 2.0.0 introduction du support des surfaces polyédriques.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

SELECT ST_AsEWKT(
  ST_ForceRHR(
        'POLYGON((0 0 2, 5 0 2, 0 5 2, 0 0 2),(1 1 2, 1 3 2, 3 1 2, 1 1 2))'
  )
);
                                                  st_asewkt
--------------------------------------------------------------
 POLYGON((0 0 2,0 5 2,5 0 2,0 0 2),(1 1 2,3 1 2,1 3 2,1 1 2))
(1 row)

Name

ST_LineExtend — Renvoie une ligne prolongée vers l'avant et vers l'arrière selon les distances spécifiées.

Synopsis

geometry ST_LineExtend(geometry line, float distance_forward, float distance_backward=0.0);

Description

Renvoie une ligne prolongée vers l'avant et vers l'arrière en ajoutant de nouveaux points de départ (et d'arrivée) à la (aux) distance(s) donnée(s). Une distance de zéro n'ajoute pas de point. Seules les distances non négatives sont autorisées. La direction du ou des points ajoutés est déterminée par les deux premiers (et derniers) points distincts de la ligne. Les points en double sont ignorés.

Disponibilité : 3.4.0

Exemple : Prolonge une ligne de 5 unités vers l'avant et de 6 unités vers l'arrière

SELECT ST_AsText(ST_LineExtend('LINESTRING(0 0, 0 10)'::geometry, 5, 6));
--------------------------------------------
LINESTRING(0 -6,0 0,0 10,0 15)

Name

ST_LineToCurve — Convertit une géométrie linéaire en une géométrie courbe.

Synopsis

geometry ST_LineToCurve(geometry geomANoncircular);

Description

Convertit les lignes et polygones simples en lignes circulaires et polygones courbes. Notez qu'il faut beaucoup moins de points pour décrire l'équivalent courbe.

[Note]

Si l'entrée LINESTRING/POLYGON n'est pas suffisamment courbée pour représenter clairement une courbe, la fonction renverra la même géométrie d'entrée.

Disponibilité : 1.3.0

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Exemples

-- 2D Example
SELECT ST_AsText(ST_LineToCurve(foo.geom)) As curvedastext,ST_AsText(foo.geom) As non_curvedastext
    FROM (SELECT ST_Buffer('POINT(1 3)'::geometry, 3) As geom) As foo;

curvedatext                                                            non_curvedastext
--------------------------------------------------------------------|-----------------------------------------------------------------
CURVEPOLYGON(CIRCULARSTRING(4 3,3.12132034355964 0.878679656440359, | POLYGON((4 3,3.94235584120969 2.41472903395162,3.77163859753386 1.85194970290473,
1 0,-1.12132034355965 5.12132034355963,4 3))                        |  3.49440883690764 1.33328930094119,3.12132034355964 0.878679656440359,
                                                                    |  2.66671069905881 0.505591163092366,2.14805029709527 0.228361402466141,
                                                                    |  1.58527096604839 0.0576441587903094,1 0,
                                                                    |  0.414729033951621 0.0576441587903077,-0.148050297095264 0.228361402466137,
                                                                    |  -0.666710699058802 0.505591163092361,-1.12132034355964 0.878679656440353,
                                                                    |  -1.49440883690763 1.33328930094119,-1.77163859753386 1.85194970290472
                                                                    |  --ETC-- ,3.94235584120969 3.58527096604839,4 3))

--3D example
SELECT ST_AsText(ST_LineToCurve(geom)) As curved, ST_AsText(geom) AS not_curved
FROM (SELECT ST_Translate(ST_Force3D(ST_Boundary(ST_Buffer(ST_Point(1,3), 2,2))),0,0,3) AS geom) AS foo;

                        curved                        |               not_curved
------------------------------------------------------+---------------------------------------------------------------------
 CIRCULARSTRING Z (3 3 3,-1 2.99999999999999 3,3 3 3) | LINESTRING Z (3 3 3,2.4142135623731 1.58578643762691 3,1 1 3,
                                                      | -0.414213562373092 1.5857864376269 3,-1 2.99999999999999 3,
                                                      | -0.414213562373101 4.41421356237309 3,
                                                      | 0.999999999999991 5 3,2.41421356237309 4.4142135623731 3,3 3 3)
(1 row)

Voir aussi

ST_CurveToLine


Name

ST_Multi — Renvoie la géométrie sous la forme d'une géométrie MULTI*.

Synopsis

geometry ST_Multi(geometry geom);

Description

Renvoie la géométrie sous la forme d'une collection de géométries MULTI*. Si la géométrie est déjà une collection, elle est renvoyée inchangée.

Exemples

SELECT ST_AsText(ST_Multi('POLYGON ((10 30, 30 30, 30 10, 10 10, 10 30))'));
                    st_astext
    -------------------------------------------------
    MULTIPOLYGON(((10 30,30 30,30 10,10 10,10 30)))

Voir aussi

ST_AsText


Name

ST_Normalize — Renvoie la géométrie sous sa forme canonique.

Synopsis

geometry ST_Normalize(geometry geom);

Description

Renvoie la géométrie sous sa forme normalisée/canonique. Peut réorganiser les sommets dans les anneaux de polygones, les anneaux dans un polygone, les éléments dans un complexe multi-géométrique.

La plupart du temps, il n'est utile qu'à des fins de test (comparaison des résultats attendus et obtenus).

Disponibilité : 2.3.0

Exemples

SELECT ST_AsText(ST_Normalize(ST_GeomFromText(
  'GEOMETRYCOLLECTION(
    POINT(2 3),
    MULTILINESTRING((0 0, 1 1),(2 2, 3 3)),
    POLYGON(
      (0 10,0 0,10 0,10 10,0 10),
      (4 2,2 2,2 4,4 4,4 2),
      (6 8,8 8,8 6,6 6,6 8)
    )
  )'
)));
                                                                     st_astext
----------------------------------------------------------------------------------------------------------------------------------------------------
 GEOMETRYCOLLECTION(POLYGON((0 0,0 10,10 10,10 0,0 0),(6 6,8 6,8 8,6 8,6 6),(2 2,4 2,4 4,2 4,2 2)),MULTILINESTRING((2 2,3 3),(0 0,1 1)),POINT(2 3))
(1 row)
                        

Voir aussi

ST_Equals,


Name

ST_Project — Renvoie un point projeté à partir d'un point de départ en fonction d'une distance et d'un azimut.

Synopsis

geometry ST_Project(geometry g1, float distance, float azimuth);

geometry ST_Project(geometry g1, geometry g2, float distance);

geography ST_Project(geography g1, float distance, float azimuth);

geography ST_Project(geography g1, geography g2, float distance);

Description

Renvoie un point projeté à partir d'un point le long d'une géodésique en utilisant une distance et un azimut donnés. C'est ce qu'on appelle le problème de la géodésique directe.

La version à deux points utilise la trajectoire entre le premier et le deuxième point pour définir implicitement l'azimut et utilise la distance comme précédemment.

La distance est indiquée en mètres. Les valeurs négatives sont prises en charge.

L'azimut (également appelé cap ou relèvement) est indiqué en radians. Il est mesuré dans le sens des aiguilles d'une montre à partir du vrai nord.

  • Le nord est l'azimut zéro (0 degré)

  • L'est est l'azimut π/2 (90 degrés)

  • Le sud est l'azimut π (180 degrés)

  • Ouest est l'azimut 3π/2 (270 degrés)

Les valeurs d'azimut négatives et les valeurs supérieures à 2π (360 degrés) sont prises en charge.

Disponibilité : 2.0.0

Amélioration : 2.4.0 Autorise les distances négatives et les azimuts non normalisés.

Amélioration : 3.4.0 Autorise les arguments géométriques et la forme en deux points omettant l'azimut.

Exemple : Point projeté à 100,000 mètres et relèvement de 45 degrés

SELECT ST_AsText(ST_Project('POINT(0 0)'::geography, 100000, radians(45.0)));
--------------------------------------------
 POINT(0.635231029125537 0.639472334729198)

Name

ST_QuantizeCoordinates — Met à zéro les bits de poids faible des coordonnées

Synopsis

geometry ST_QuantizeCoordinates ( geometry g , int prec_x , int prec_y , int prec_z , int prec_m );

Description

ST_QuantizeCoordinates détermine le nombre de bits (N) requis pour représenter une valeur de coordonnées avec un nombre spécifié de chiffres après la virgule, puis met à zéro tous les bits sauf les N les plus significatifs. La valeur de coordonnées résultante sera toujours arrondie à la valeur d'origine, mais sa compressibilité sera améliorée. Il peut en résulter une réduction significative de l'utilisation du disque, à condition que la colonne géométrique utilise un type de stockage compressible. La fonction permet de spécifier un nombre différent de chiffres après la virgule dans chaque dimension ; les dimensions non spécifiées sont supposées avoir la précision de la dimension x. Les chiffres négatifs sont interprétés comme des chiffres à gauche de la virgule (c'est-à-dire que prec_x=-2 conservera les valeurs des coordonnées à la centaine la plus proche).

Les coordonnées produites par ST_QuantizeCoordinates sont indépendantes de la géométrie qui contient ces coordonnées et de la position relative de ces coordonnées dans la géométrie. Par conséquent, les relations topologiques existantes entre les géométries ne sont pas affectées par l'utilisation de cette fonction. La fonction peut produire une géométrie non valide lorsqu'elle est appelée avec un nombre de chiffres inférieur à la précision intrinsèque de la géométrie.

Disponibilité : 2.5.0

Informations techniques

PostGIS stocke toutes les valeurs de coordonnées sous forme d'entiers à virgule flottante en double précision, qui peuvent représenter de manière fiable 15 chiffres significatifs. Cependant, PostGIS peut être utilisé pour gérer des données qui ont intrinsèquement moins de 15 chiffres significatifs. C'est le cas des données TIGER, qui sont fournies sous forme de coordonnées géographiques avec six chiffres de précision après la virgule (ce qui ne nécessite que neuf chiffres significatifs pour la longitude et huit chiffres significatifs pour la latitude)

Lorsque 15 chiffres significatifs sont disponibles, il existe de nombreuses représentations possibles d'un nombre à 9 chiffres significatifs. Un nombre à virgule flottante en double précision utilise 52 bits explicites pour représenter le significand (mantissa) de la coordonnée. Seuls 30 bits sont nécessaires pour représenter un mantissa de 9 chiffres significatifs, ce qui laisse 22 bits non significatifs ; nous pouvons leur donner la valeur que nous voulons et obtenir un nombre qui s'arrondit à notre valeur d'entrée. Par exemple, la valeur 100,123456 peut être représentée par les nombres à virgule flottante les plus proches de 100,123456000000, 100,123456000001 et 100,123456432199. Tous sont également valables, en ce sens que ST_AsText(geom, 6) renverra le même résultat avec n'importe laquelle de ces entrées. Comme nous pouvons fixer ces bits à n'importe quelle valeur, ST_QuantizeCoordinates fixe les 22 bits non significatifs à zéro. Pour une longue séquence de coordonnées, cela crée un motif de blocs de zéros consécutifs qui est compressé par PostgreSQL de manière plus efficace.

[Note]

Seule la taille sur disque de la géométrie est potentiellement affectée par ST_QuantizeCoordinates. ST_MemSize, qui indique l'utilisation en mémoire de la géométrie, renverra la même valeur quel que soit l'espace disque utilisé par une géométrie.

Exemples

SELECT ST_AsText(ST_QuantizeCoordinates('POINT (100.123456 0)'::geometry, 4));
st_astext
-------------------------
POINT(100.123455047607 0)
                        
WITH test AS (SELECT 'POINT (123.456789123456 123.456789123456)'::geometry AS geom)
SELECT
  digits,
  encode(ST_QuantizeCoordinates(geom, digits), 'hex'),
  ST_AsText(ST_QuantizeCoordinates(geom, digits))
FROM test, generate_series(15, -15, -1) AS digits;

digits  |                   encode                   |                st_astext
--------+--------------------------------------------+------------------------------------------
15      | 01010000005f9a72083cdd5e405f9a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
14      | 01010000005f9a72083cdd5e405f9a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
13      | 01010000005f9a72083cdd5e405f9a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
12      | 01010000005c9a72083cdd5e405c9a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
11      | 0101000000409a72083cdd5e40409a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
10      | 0101000000009a72083cdd5e40009a72083cdd5e40 | POINT(123.456789123455 123.456789123455)
9       | 0101000000009072083cdd5e40009072083cdd5e40 | POINT(123.456789123418 123.456789123418)
8       | 0101000000008072083cdd5e40008072083cdd5e40 | POINT(123.45678912336 123.45678912336)
7       | 0101000000000070083cdd5e40000070083cdd5e40 | POINT(123.456789121032 123.456789121032)
6       | 0101000000000040083cdd5e40000040083cdd5e40 | POINT(123.456789076328 123.456789076328)
5       | 0101000000000000083cdd5e40000000083cdd5e40 | POINT(123.456789016724 123.456789016724)
4       | 0101000000000000003cdd5e40000000003cdd5e40 | POINT(123.456787109375 123.456787109375)
3       | 0101000000000000003cdd5e40000000003cdd5e40 | POINT(123.456787109375 123.456787109375)
2       | 01010000000000000038dd5e400000000038dd5e40 | POINT(123.45654296875 123.45654296875)
1       | 01010000000000000000dd5e400000000000dd5e40 | POINT(123.453125 123.453125)
0       | 01010000000000000000dc5e400000000000dc5e40 | POINT(123.4375 123.4375)
-1      | 01010000000000000000c05e400000000000c05e40 | POINT(123 123)
-2      | 01010000000000000000005e400000000000005e40 | POINT(120 120)
-3      | 010100000000000000000058400000000000005840 | POINT(96 96)
-4      | 010100000000000000000058400000000000005840 | POINT(96 96)
-5      | 010100000000000000000058400000000000005840 | POINT(96 96)
-6      | 010100000000000000000058400000000000005840 | POINT(96 96)
-7      | 010100000000000000000058400000000000005840 | POINT(96 96)
-8      | 010100000000000000000058400000000000005840 | POINT(96 96)
-9      | 010100000000000000000058400000000000005840 | POINT(96 96)
-10     | 010100000000000000000058400000000000005840 | POINT(96 96)
-11     | 010100000000000000000058400000000000005840 | POINT(96 96)
-12     | 010100000000000000000058400000000000005840 | POINT(96 96)
-13     | 010100000000000000000058400000000000005840 | POINT(96 96)
-14     | 010100000000000000000058400000000000005840 | POINT(96 96)
-15     | 010100000000000000000058400000000000005840 | POINT(96 96)

Voir aussi

ST_SnapToGrid


Name

ST_RemovePoint — Supprime un point d'une ligne.

Synopsis

geometry ST_RemovePoint(geometry linestring, integer offset);

Description

Supprime un point d'une LineString, en fonction de son index (basé sur 0). Utile pour transformer une ligne fermée (anneau) en une ligne ouverte.

Amélioration : 3.2.0

Disponibilité : 1.1.0

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

Garantit qu'aucune ligne n'est fermée en supprimant le point final des lignes fermées (anneaux). Suppose que geom est de type LINESTRING

UPDATE sometable
        SET geom = ST_RemovePoint(geom, ST_NPoints(geom) - 1)
        FROM sometable
        WHERE ST_IsClosed(geom);

Name

ST_RemoveRepeatedPoints — Renvoie une version d'une géométrie dont les points en double ont été supprimés.

Synopsis

geometry ST_RemoveRepeatedPoints(geometry geom, float8 tolerance);

Description

Renvoie une version de la géométrie donnée dont les points consécutifs en double ont été supprimés. La fonction ne traite que les (Multi)LineStrings, les (Multi)Polygons et les MultiPoints, mais elle peut être appelée avec n'importe quel type de géométrie. Les éléments des collections de géométries sont traités individuellement. Les extrémités des lignes sont préservées.

Si le paramètre tolérance est fourni, les sommets situés dans la distance de tolérance les uns des autres sont considérés comme des doublons.

Amélioration : 3.2.0

Disponibilité : 2.2.0

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

SELECT ST_AsText( ST_RemoveRepeatedPoints( 'MULTIPOINT ((1 1), (2 2), (3 3), (2 2))'));
-------------------------
 MULTIPOINT(1 1,2 2,3 3)
SELECT ST_AsText( ST_RemoveRepeatedPoints( 'LINESTRING (0 0, 0 0, 1 1, 0 0, 1 1, 2 2)'));
---------------------------------
 LINESTRING(0 0,1 1,0 0,1 1,2 2)

Exemple: Les éléments de la collection sont traités individuellement.

SELECT ST_AsText( ST_RemoveRepeatedPoints( 'GEOMETRYCOLLECTION (LINESTRING (1 1, 2 2, 2 2, 3 3), POINT (4 4), POINT (4 4), POINT (5 5))'));
------------------------------------------------------------------------------
 GEOMETRYCOLLECTION(LINESTRING(1 1,2 2,3 3),POINT(4 4),POINT(4 4),POINT(5 5))

Exemple: Suppression répété de points avec une tolérance de distance.

SELECT ST_AsText( ST_RemoveRepeatedPoints( 'LINESTRING (0 0, 0 0, 1 1, 5 5, 1 1, 2 2)', 2));
-------------------------
 LINESTRING(0 0,5 5,2 2)

Voir aussi

ST_Simplify


Name

ST_RemoveIrrelevantPointsForView — Removes points that are irrelevant for rendering a specific rectangluar view of a geometry.

Synopsis

geometry ST_RemoveIrrelevantPointsForView(geometry geom, box2d bounds, boolean cartesian_hint = false);

Description

Returns a geometry without points being irrelevant for rendering the geometry within a given rectangluar view.

This function can be used to quickly preprocess geometries that should be rendered only within certain bounds.

Only geometries of type (MULTI)POLYGON and (MULTI)LINESTRING are evaluated. Other geometries keep unchanged.

Contrairement à ST_ClipByBox2D(), cette fonction

  • sorts out points without computing new intersection points which avoids rounding errors and usually increases performance,

  • returns a geometry with equal or similar point number,

  • leads to the same rendering result within the specified view, and

  • may introduce self-intersections which would make the resulting geometry invalid (see example below).

If cartesian_hint is set to true, the algorithm applies additional optimizations involving cartesian math to further reduce the resulting point number. Please note that using this option might introduce rendering artifacts if the resulting coordinates are projected into another (non-cartesian) coordinate system before rendering.

[Warning]

For polygons, this function does currently not ensure that the result is valid. This situation can be checked with ST_IsValid and repaired with ST_MakeValid.

Example: ST_RemoveIrrelevantPointsForView() applied to a polygon. Blue points remain, the rendering result (light-blue area) within the grey view box remains as well.

Example: Due to the fact that points are just sorted out and no new points are computed, the result of ST_RemoveIrrelevantPointsForView() may contain self-intersections.

Disponibilité : 3.5.0

Exemples

SELECT ST_AsText(
                        ST_RemoveIrrelevantPointsForView(
                        ST_GeomFromText('MULTIPOLYGON(((10 10, 20 10, 30 10, 40 10, 20 20, 10 20, 10 10)),((10 10, 20 10, 20 20, 10 20, 10 10)))'),
                        ST_MakeEnvelope(12,12,18,18), true));
                
                st_astext
                ---------
                    MULTIPOLYGON(((10 10,40 10,20 20,10 20,10 10)),((10 10,20 10,20 20,10 20,10 10)))
                
SELECT ST_AsText(
                        ST_RemoveIrrelevantPointsForView(
                        ST_GeomFromText('MULTILINESTRING((0 0, 10 0,20 0,30 0), (0 15, 5 15, 10 15, 15 15, 20 15, 25 15, 30 15, 40 15), (13 13,15 15,17 17))'),
                        ST_MakeEnvelope(12,12,18,18), true));
                
                st_astext
                ---------
                        MULTILINESTRING((10 15,15 15,20 15),(13 13,15 15,17 17))
                
SELECT ST_AsText(
                        ST_RemoveIrrelevantPointsForView(
                        ST_GeomFromText('LINESTRING(0 0, 10 0,20 0,30 0)'),
                        ST_MakeEnvelope(12,12,18,18), true));
                
                st_astext
                ---------
                    LINESTRING EMPTY
                
SELECT ST_AsText(
                        ST_RemoveIrrelevantPointsForView(
                        ST_GeomFromText('POLYGON((0 30, 15 30, 30 30, 30 0, 0 0, 0 30))'),
                        ST_MakeEnvelope(12,12,18,18), true));
                
                st_astext
                ---------
                    POLYGON((15 30,30 0,0 0,15 30))
                
SELECT ST_AsText(
                        ST_RemoveIrrelevantPointsForView(
                        ST_GeomFromText('POLYGON((0 30, 15 30, 30 30, 30 0, 0 0, 0 30))'),
                        ST_MakeEnvelope(12,12,18,18)));
                
                st_astext
                ---------
                    POLYGON((0 30,30 30,30 0,0 0,0 30))
                

Name

ST_RemoveSmallParts — Removes small parts (polygon rings or linestrings) of a geometry.

Synopsis

geometry ST_RemoveSmallParts(geometry geom, double precision minSizeX, double precision minSizeY);

Description

Returns a geometry without small parts (exterior or interior polygon rings, or linestrings).

This function can be used as preprocessing step for creating simplified maps, e. g. to remove small islands or holes.

It evaluates only geometries of type (MULTI)POLYGON and (MULTI)LINESTRING. Other geometries remain unchanged.

If minSizeX is greater than 0, parts are sorted out if their width is smaller than minSizeX.

If minSizeY is greater than 0, parts are sorted out if their height is smaller than minSizeY.

Both minSizeX and minSizeY are measured in coordinate system units of the geometry.

For polygon types, evaluation is done separately for each ring which can lead to one of the following results:

  • la géométrie d'origine,

  • a POLYGON with all rings with less vertices,

  • a POLYGON with a reduced number of interior rings (having possibly less vertices),

  • a POLYGON EMPTY, or

  • a MULTIPOLYGON with a reduced number of polygons (having possibly less interior rings or vertices), or

  • a MULTIPOLYGON EMPTY.

For linestring types, evaluation is done for each linestring which can lead to one of the following results:

  • la géométrie d'origine,

  • a LINESTRING with a reduced number of vertices,

  • a LINESTRING EMPTY,

  • a MULTILINESTRING with a reduced number of linestrings (having possibly less vertices), or

  • a MULTILINESTRING EMPTY.

Example: ST_RemoveSmallParts() applied to a multi-polygon. Blue parts remain.

Disponibilité : 3.5.0

Exemples

SELECT ST_AsText(
                        ST_RemoveSmallParts(
                        ST_GeomFromText('MULTIPOLYGON(
                                ((60 160, 120 160, 120 220, 60 220, 60 160), (70 170, 70 210, 110 210, 110 170, 70 170)),
                                ((85 75, 155 75, 155 145, 85 145, 85 75)),
                                ((50 110, 70 110, 70 130, 50 130, 50 110)))'),
                                50, 50));
                
                st_astext
                ---------
                        MULTIPOLYGON(((60 160,120 160,120 220,60 220,60 160)),((85 75,155 75,155 145,85 145,85 75)))
                
SELECT ST_AsText(
                        ST_RemoveSmallParts(
                        ST_GeomFromText('LINESTRING(10 10, 20 20)'),
                                50, 50));
                
                st_astext
                ---------
                        LINESTRING EMPTY
                

Name

ST_Reverse — Retourne la géométrie avec l'ordre des sommets inversé.

Synopsis

geometry ST_Reverse(geometry g1);

Description

Peut être utilisé sur n'importe quelle géométrie et inverse l'ordre des sommets.

Amélioration : la prise en charge des courbes a été introduite dans la version 2.4.0.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

SELECT ST_AsText(geom) as line, ST_AsText(ST_Reverse(geom)) As reverseline
FROM
(SELECT ST_MakeLine(ST_Point(1,2),
                ST_Point(1,10)) As geom) as foo;
--result
                line         |     reverseline
---------------------+----------------------
LINESTRING(1 2,1 10) | LINESTRING(1 10,1 2)

Name

ST_Segmentize — Renvoie une geometry/geography modifiée dont aucun segment ne dépasse une distance donnée.

Synopsis

geometry ST_Segmentize(geometry geom, float max_segment_length);

geography ST_Segmentize(geography geog, float max_segment_length);

Description

Renvoie une geometry/geography modifiée dont aucun segment n'est plus long que max_segment_length. La longueur est calculée en 2D. Les segments sont toujours divisés en sous-segments de même longueur.

  • Pour la géométrie, la longueur maximale est exprimée dans les unités du système de référence spatiale.

  • En géographie, la longueur maximale est exprimée en mètres. Les distances sont calculées sur la sphère. Les sommets ajoutés sont créés le long des arcs de grands cercles sphériques définis par les extrémités des segments.

[Note]

Cette opération ne fait que raccourcir les segments longs. Elle n'allonge pas les segments plus courts que la longueur maximale.

[Warning]

Pour les entrées contenant de longs segments, la spécification d'un max_segment_length relativement court peut entraîner l'ajout d'un très grand nombre de sommets. Cela peut se produire involontairement si l'argument est spécifié accidentellement comme un nombre de segments, plutôt que comme une longueur maximale.

Disponibilité : 1.2.2

Amélioration : 3.0.0 La segmentation de géométrie produit désormais des sous-segments de longueur égale

Amélioration : 2.3.0 La segmentation d'objets geography produit désormais des sous-segments de longueur égale

Amélioration : la prise en charge des objets de type geography a été introduite dans la version 2.1.0.

Modifié : 2.1.0 Suite à l'introduction de la prise en charge du type geography, l'utilisation ST_Segmentize('LINESTRING(1 2, 3 4)', 0.5) provoque une erreur de fonction ambiguë. L'entrée doit être correctement typée en tant que geometry ou geography. Utilisez ST_GeomFromText, ST_GeogFromText ou un cast vers le type requis (par exemple, ST_Segmentize('LINESTRING(1 2, 3 4)'::geometry, 0.5) )

Exemples

La segmentation d'une ligne. Les segments longs sont divisés de manière égale et les segments courts ne sont pas divisés.

SELECT ST_AsText(ST_Segmentize(
    'MULTILINESTRING((0 0, 0 1, 0 9),(1 10, 1 18))'::geometry,
        5 ) );
---------------------------------------------------
MULTILINESTRING((0 0,0 1,0 5,0 9),(1 10,1 14,1 18))

Segmentation d'un polygone :

SELECT ST_AsText(
        ST_Segmentize(('POLYGON((0 0, 0 8, 30 0, 0 0))'::geometry), 10));
-------------------------------------------------------
POLYGON((0 0,0 8,7.5 6,15 4,22.5 2,30 0,20 0,10 0,0 0))

Segmentation d'une ligne géographique, en utilisant une longueur de segment maximale de 2000 kilomètres. Les sommets sont ajoutés le long de l'arc de grand cercle reliant les points d'extrémité.

SELECT ST_AsText(
        ST_Segmentize(('LINESTRING (0 0, 60 60)'::geography), 2000000));
-------------------------------------------------------------
LINESTRING(0 0,4.252632294621186 8.43596525986862,8.69579947419404 16.824093489701564,13.550465473227048 25.107950473646188,19.1066053508691 33.21091076089908,25.779290201459894 41.01711439406505,34.188839517966954 48.337222885886,45.238153936612264 54.84733442373889,60 60)

Une ligne géographique segmentée le long d'un arc de grand cercle


Name

ST_SetPoint — Remplacer le point d'une ligne par un point donné.

Synopsis

geometry ST_SetPoint(geometry linestring, integer zerobasedposition, geometry point);

Description

Remplace le point N de la ligne par le point donné. L'index est basé sur 0. Les index négatifs sont comptés à rebours, de sorte que -1 est le dernier point. Cette fonction est particulièrement utile dans les triggers lorsqu'il s'agit de maintenir la relation entre les articulations lorsqu'un sommet se déplace.

Disponibilité : 1.1.0

Mise à jour 2.3.0 : indexation négative

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

--Change first point in line string from -1 3 to -1 1
SELECT ST_AsText(ST_SetPoint('LINESTRING(-1 2,-1 3)', 0, 'POINT(-1 1)'));
           st_astext
-----------------------
 LINESTRING(-1 1,-1 3)

---Change last point in a line string (lets play with 3d linestring this time)
SELECT ST_AsEWKT(ST_SetPoint(foo.geom, ST_NumPoints(foo.geom) - 1, ST_GeomFromEWKT('POINT(-1 1 3)')))
FROM (SELECT ST_GeomFromEWKT('LINESTRING(-1 2 3,-1 3 4, 5 6 7)') As geom) As foo;
           st_asewkt
-----------------------
LINESTRING(-1 2 3,-1 3 4,-1 1 3)

SELECT ST_AsText(ST_SetPoint(g, -3, p))
FROM ST_GEomFromText('LINESTRING(0 0, 1 1, 2 2, 3 3, 4 4)') AS g
        , ST_PointN(g,1) as p;
           st_astext
-----------------------
LINESTRING(0 0,1 1,0 0,3 3,4 4)

                        

Name

ST_ShiftLongitude — Décale les coordonnées de longitude d'une géométrie entre -180..180 et 0..360.

Synopsis

geometry ST_ShiftLongitude(geometry geom);

Description

Lit chaque point/vertex d'une géométrie et déplace sa coordonnée de longitude de -180..0 à 180..360 et vice versa si elle se trouve entre ces plages. Cette fonction est symétrique, de sorte que le résultat est une représentation 0..360 d'une donnée -180..180 et une représentation -180..180 d'une donnée 0..360.

[Note]

Ceci n'est utile que pour les données dont les coordonnées sont exprimées en longitude/latitude ; par exemple, SRID 4326 (WGS 84 géographique)

[Warning]

Un bug antérieur à la version 1.3.4 empêchait le fonctionnement pour MULTIPOINT. La version 1.3.4+ fonctionne également avec MULTIPOINT.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Amélioration : 2.0.0 introduction du support TIN et surfaces polyédriques.

NOTE : cette fonction a été renommée "ST_Shift_Longitude" dans la version 2.2.0

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Exemples

--single point forward transformation
SELECT ST_AsText(ST_ShiftLongitude('SRID=4326;POINT(270 0)'::geometry))

st_astext
----------
POINT(-90 0)


--single point reverse transformation
SELECT ST_AsText(ST_ShiftLongitude('SRID=4326;POINT(-90 0)'::geometry))

st_astext
----------
POINT(270 0)


--for linestrings the functions affects only to the sufficient coordinates
SELECT ST_AsText(ST_ShiftLongitude('SRID=4326;LINESTRING(174 12, 182 13)'::geometry))

st_astext
----------
LINESTRING(174 12,-178 13)
        

Voir aussi

ST_WrapX


Name

ST_WrapX — Enveloppe une géométrie autour d'une valeur X.

Synopsis

geometry ST_WrapX(geometry geom, float8 wrap, float8 move);

Description

Cette fonction divise les géométries d'entrée et déplace ensuite chaque composant résultant tombant à droite (pour un "move" négatif) ou à gauche (pour un "move" positif) de la ligne "wrap" donnée dans la direction spécifiée par le paramètre "move", pour finalement réassembler les morceaux.

[Note]

Cette fonction est utile pour "recentrer" les données à long terme afin que les caractéristiques intéressantes ne soient pas produites d'un côté à l'autre.

Disponibilité : 2.3.0 nécessite GEOS

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

-- Move all components of the given geometries whose bounding box
-- falls completely on the left of x=0 to +360
select ST_WrapX(geom, 0, 360);

-- Move all components of the given geometries whose bounding box
-- falls completely on the left of x=-30 to +360
select ST_WrapX(geom, -30, 360);
        

Name

ST_SnapToGrid — Accrocher tous les points de la géométrie d'entrée à une grille régulière.

Synopsis

geometry ST_SnapToGrid(geometry geomA, float originX, float originY, float sizeX, float sizeY);

geometry ST_SnapToGrid(geometry geomA, float sizeX, float sizeY);

geometry ST_SnapToGrid(geometry geomA, float size);

geometry ST_SnapToGrid(geometry geomA, geometry pointOrigin, float sizeX, float sizeY, float sizeZ, float sizeM);

Description

Variante 1,2,3 : Accrocher tous les points de la géométrie d'entrée à la grille définie par l'origine et la taille des cellules. Supprime les points consécutifs tombant sur la même cellule, et renvoie éventuellement NULL si les points de sortie ne sont pas suffisants pour définir une géométrie du type donné. Les géométries écrasées d'une collection sont supprimées de celle-ci. Utile pour réduire la précision.

Variante 4 : Introduite dans la version 1.1.0 - Accroche tous les points de la géométrie d'entrée à la grille définie par son origine (le deuxième argument doit être un point) et la taille des cellules. Spécifiez 0 comme taille pour toute dimension que vous ne voulez pas accrocher à une grille.

[Note]

La géométrie renvoyée peut perdre sa simplicité (voir ST_IsSimple).

[Note]

Avant la version 1.1.0, cette fonction renvoyait toujours une géométrie 2D. A partir de la version 1.1.0, la géométrie renvoyée aura la même dimensionnalité que la géométrie d'entrée, les valeurs de dimensions supérieures n'étant pas modifiées. Utilisez la version prenant un second argument géométrique pour définir toutes les dimensions de la grille.

Disponibilité : 1.0.0RC1

Disponibilité : 1.1.0 - Prise en charge des Z et M

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

--Snap your geometries to a precision grid of 10^-3
UPDATE mytable
   SET geom = ST_SnapToGrid(geom, 0.001);

SELECT ST_AsText(ST_SnapToGrid(
                        ST_GeomFromText('LINESTRING(1.1115678 2.123, 4.111111 3.2374897, 4.11112 3.23748667)'),
                        0.001)
                );
                          st_astext
-------------------------------------
 LINESTRING(1.112 2.123,4.111 3.237)
 --Snap a 4d geometry
SELECT ST_AsEWKT(ST_SnapToGrid(
        ST_GeomFromEWKT('LINESTRING(-1.1115678 2.123 2.3456 1.11111,
                4.111111 3.2374897 3.1234 1.1111, -1.11111112 2.123 2.3456 1.1111112)'),
 ST_GeomFromEWKT('POINT(1.12 2.22 3.2 4.4444)'),
 0.1, 0.1, 0.1, 0.01) );
                                                                  st_asewkt
------------------------------------------------------------------------------
 LINESTRING(-1.08 2.12 2.3 1.1144,4.12 3.22 3.1 1.1144,-1.08 2.12 2.3 1.1144)


--With a 4d geometry - the ST_SnapToGrid(geom,size) only touches x and y coords but keeps m and z the same
SELECT ST_AsEWKT(ST_SnapToGrid(ST_GeomFromEWKT('LINESTRING(-1.1115678 2.123 3 2.3456,
                4.111111 3.2374897 3.1234 1.1111)'),
           0.01)      );
                                                st_asewkt
---------------------------------------------------------
 LINESTRING(-1.11 2.12 3 2.3456,4.11 3.24 3.1234 1.1111)

                

Name

ST_Snap — Accrocher les segments et les sommets de la géométrie d'entrée aux sommets d'une géométrie de référence.

Synopsis

geometry ST_Snap(geometry input, geometry reference, float tolerance);

Description

Accroche les sommets et les segments d'une géométrie aux sommets d'une autre géométrie. Une tolérance de distance d'accrochage est utilisée pour contrôler l'endroit où l'accrochage est effectué. La géométrie résultante est la géométrie d'entrée avec les sommets accrochés. Si aucun accrochage n'a lieu, la géométrie d'entrée est renvoyée inchangée.

L'accrochage d'une géométrie à une autre peut améliorer la robustesse des opérations de superposition en éliminant les arêtes presque coïncidentes (qui posent des problèmes lors du noding et du calcul de l'intersection).

Un accrochage trop important peut entraîner la création d'une topologie non valide, c'est pourquoi le nombre et l'emplacement des sommets accrochés sont décidés à l'aide d'une heuristique pour déterminer quand il est sûr d'accrocher. Cela peut toutefois entraîner l'omission de certains accrochages potentiels.

[Note]

La géométrie renvoyée peut perdre sa simplicité (voir ST_IsSimple) et sa validité (voir ST_IsValid).

Effectué par le module GEOS.

Disponibilité : 2.0.0

Exemples

Un multipolygone représenté par une ligne (avant tout accrochage)

Un multipolygone est accroché à une ligne de référence avec une tolérance de 1,01 de la distance. Le nouveau multipolygone est représenté avec la ligne de référence

SELECT ST_AsText(ST_Snap(poly,line, ST_Distance(poly,line)*1.01)) AS polysnapped
FROM (SELECT
   ST_GeomFromText('MULTIPOLYGON(
     ((26 125, 26 200, 126 200, 126 125, 26 125 ),
      ( 51 150, 101 150, 76 175, 51 150 )),
      (( 151 100, 151 200, 176 175, 151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;

                             polysnapped
---------------------------------------------------------------------
 MULTIPOLYGON(((26 125,26 200,126 200,126 125,101 100,26 125),
 (51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100)))
                                

Un multipolygone est accroché à une ligne de référence avec une tolérance de 1,25 de la distance. Le nouveau multipolygone est représenté avec la ligne de référence

SELECT ST_AsText(
    ST_Snap(poly,line, ST_Distance(poly,line)*1.25)
  ) AS polysnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
    (( 26 125, 26 200, 126 200, 126 125, 26 125 ),
      ( 51 150, 101 150, 76 175, 51 150 )),
      (( 151 100, 151 200, 176 175, 151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;

                             polysnapped
---------------------------------------------------------------------
MULTIPOLYGON(((5 107,26 200,126 200,126 125,101 100,54 84,5 107),
(51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100)))
                                

La ligne s'est accrochée au multipolygone d'origine avec une tolérance de 1,01 de la distance. La nouvelle ligne est représentée avec le multipolygone de référence

SELECT ST_AsText(
   ST_Snap(line, poly, ST_Distance(poly,line)*1.01)
  ) AS linesnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
     ((26 125, 26 200, 126 200, 126 125, 26 125),
      (51 150, 101 150, 76 175, 51 150 )),
      ((151 100, 151 200, 176 175, 151 100)))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;

              linesnapped
----------------------------------------
 LINESTRING(5 107,26 125,54 84,101 100)
                                

La ligne s'est accrochée au multipolygone d'origine avec une tolérance de 1,25 de la distance. La nouvelle ligne est représentée avec le multipolygone de référence

SELECT ST_AsText(
 ST_Snap(line, poly, ST_Distance(poly,line)*1.25)
  ) AS linesnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
     (( 26 125, 26 200, 126 200, 126 125, 26 125 ),
      (51 150, 101 150, 76 175, 51 150 )),
      ((151 100, 151 200, 176 175, 151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;
              linesnapped
---------------------------------------
LINESTRING(26 125,54 84,101 100)
                                

Voir aussi

ST_SnapToGrid


Name

ST_SwapOrdinates — Renvoie une version de la géométrie donnée avec les valeurs d'ordonnées permutées.

Synopsis

geometry ST_SwapOrdinates(geometry geom, cstring ords);

Description

Renvoie une version de la géométrie donnée dont les ordonnées ont été interverties.

Le paramètre ords est une chaîne de 2 caractères désignant les ordonnées à permuter. Les noms valides sont : x, y, z et m.

Disponibilité : 2.2.0

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les coordonnées M.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Exemple

-- Scale M value by 2
SELECT ST_AsText(
  ST_SwapOrdinates(
    ST_Scale(
      ST_SwapOrdinates(g,'xm'),
      2, 1
    ),
  'xm')
) FROM ( SELECT 'POINT ZM (0 0 0 2)'::geometry g ) foo;
     st_astext
--------------------
 POINT ZM (0 0 0 4)
                 

Voir aussi

ST_FlipCoordinates

7.6. Validation de la géométrie

Abstract

Ces fonctions vérifient si les géométries sont valides selon la norme SFS de l'OGC. Elles fournissent également des informations sur la nature et la localisation de l'invalidité. Il existe également une fonction permettant de créer une géométrie valide à partir d'une géométrie invalide.

  • ST_IsValid — Teste si une géométrie est bien formée en 2D.
  • ST_IsValidDetail — Renvoie une ligne valid_detail indiquant si une géométrie est valide ou sinon une raison et une localisation.
  • ST_IsValidReason — Renvoie un texte indiquant si une géométrie est valide, ou la raison de son invalidité.
  • ST_MakeValid — Tente de rendre valide une géométrie invalide sans perdre de sommets.

Name

ST_IsValid — Teste si une géométrie est bien formée en 2D.

Synopsis

boolean ST_IsValid(geometry g);

boolean ST_IsValid(geometry g, integer flags);

Description

Teste si une valeur ST_Geometry est bien formée et valide en 2D selon les règles de l'OGC. Pour les géométries à 3 et 4 dimensions, la validité est toujours testée uniquement en 2 dimensions. Pour les géométries qui ne sont pas valides, une NOTICE PostgreSQL est émise fournissant les détails de la raison pour laquelle elle n'est pas valide.

Pour la version avec le paramètre flags, les valeurs prises en charge sont documentées dans ST_IsValidDetail Cette version n'imprime pas de NOTICE expliquant l'invalidité.

Pour plus d'informations sur la définition de la validité des géométries, reportez-vous à Section 4.4, “Validation de la géométrie”

[Note]

SQL-MM définit le résultat de ST_IsValid(NULL) comme étant 0, alors que PostGIS renvoie NULL.

Effectué par le module GEOS.

La version acceptant les flags est disponible à partir de la version 2.0.0.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.9

[Note]

Les spécifications de l'OGC-SFS et de SQL-MM ne comprennent pas d'argument de type flag pour ST_IsValid. L'indicateur est une extension de PostGIS.

Exemples

SELECT ST_IsValid(ST_GeomFromText('LINESTRING(0 0, 1 1)')) As good_line,
        ST_IsValid(ST_GeomFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) As bad_poly
--results
NOTICE:  Self-intersection at or near point 0 0
 good_line | bad_poly
-----------+----------
 t         | f

Name

ST_IsValidDetail — Renvoie une ligne valid_detail indiquant si une géométrie est valide ou sinon une raison et une localisation.

Synopsis

valid_detail ST_IsValidDetail(geometry geom, integer flags);

Description

Renvoie une ligne valid_detail, contenant un booléen (valid) indiquant si une géométrie est valide, un varchar (reason) indiquant une raison pour laquelle elle est invalide et une géométrie (location) indiquant où elle est invalide.

Utile pour améliorer la combinaison de ST_IsValid et ST_IsValidReason afin de générer un rapport détaillé des géométries invalides.

Le paramètre facultatif flags est un champ de type bit. Il peut avoir les valeurs suivantes :

  • 0 : utiliser la sémantique de validité habituelle de l'OGC SFS.

  • 1 : Considérer certains types d'anneaux auto-touchants (coquilles inversées et trous exverts) comme valides. Ceci est également connu sous le nom de "flag ESRI", car c'est le modèle de validité utilisé par ces outils. Notez que cela n'est pas valide selon le modèle OGC.

Effectué par le module GEOS.

Disponibilité : 2.0.0

Exemples


--First 3 Rejects from a successful quintuplet experiment
SELECT gid, reason(ST_IsValidDetail(geom)), ST_AsText(location(ST_IsValidDetail(geom))) as location
FROM
(SELECT ST_MakePolygon(ST_ExteriorRing(e.buff), array_agg(f.line)) As geom, gid
FROM (SELECT ST_Buffer(ST_Point(x1*10,y1), z1) As buff, x1*10 + y1*100 + z1*1000 As gid
        FROM generate_series(-4,6) x1
        CROSS JOIN generate_series(2,5) y1
        CROSS JOIN generate_series(1,8) z1
        WHERE x1 
> y1*0.5 AND z1 < x1*y1) As e
        INNER JOIN (SELECT ST_Translate(ST_ExteriorRing(ST_Buffer(ST_Point(x1*10,y1), z1)),y1*1, z1*2) As line
        FROM generate_series(-3,6) x1
        CROSS JOIN generate_series(2,5) y1
        CROSS JOIN generate_series(1,10) z1
        WHERE x1 
> y1*0.75 AND z1 < x1*y1) As f
ON (ST_Area(e.buff) 
> 78 AND ST_Contains(e.buff, f.line))
GROUP BY gid, e.buff) As quintuplet_experiment
WHERE ST_IsValid(geom) = false
ORDER BY gid
LIMIT 3;

 gid  |      reason       |  location
------+-------------------+-------------
 5330 | Self-intersection | POINT(32 5)
 5340 | Self-intersection | POINT(42 5)
 5350 | Self-intersection | POINT(52 5)

 --simple example
SELECT * FROM ST_IsValidDetail('LINESTRING(220227 150406,2220227 150407,222020 150410)');

 valid | reason | location
-------+--------+----------
 t     |        |



Name

ST_IsValidReason — Renvoie un texte indiquant si une géométrie est valide, ou la raison de son invalidité.

Synopsis

text ST_IsValidReason(geometry geomA);

text ST_IsValidReason(geometry geomA, integer flags);

Description

Renvoie un texte indiquant si une géométrie est valide ou, si elle est invalide, une raison pour laquelle elle l'est.

Utile en combinaison avec ST_IsValid pour générer un rapport détaillé des géométries invalides et des raisons.

Les flags autorisés sont documentés dans ST_IsValidDetail.

Effectué par le module GEOS.

Disponibilité : 1.4

Disponibilité : la version 2.0 prend des flags.

Exemples

-- invalid bow-tie polygon
SELECT ST_IsValidReason(
    'POLYGON ((100 200, 100 100, 200 200,
     200 100, 100 200))'::geometry) as validity_info;
validity_info
--------------------------
Self-intersection[150 150]
        

--First 3 Rejects from a successful quintuplet experiment
SELECT gid, ST_IsValidReason(geom) as validity_info
FROM
(SELECT ST_MakePolygon(ST_ExteriorRing(e.buff), array_agg(f.line)) As geom, gid
FROM (SELECT ST_Buffer(ST_Point(x1*10,y1), z1) As buff, x1*10 + y1*100 + z1*1000 As gid
        FROM generate_series(-4,6) x1
        CROSS JOIN generate_series(2,5) y1
        CROSS JOIN generate_series(1,8) z1
        WHERE x1 
> y1*0.5 AND z1 < x1*y1) As e
        INNER JOIN (SELECT ST_Translate(ST_ExteriorRing(ST_Buffer(ST_Point(x1*10,y1), z1)),y1*1, z1*2) As line
        FROM generate_series(-3,6) x1
        CROSS JOIN generate_series(2,5) y1
        CROSS JOIN generate_series(1,10) z1
        WHERE x1 
> y1*0.75 AND z1 < x1*y1) As f
ON (ST_Area(e.buff) 
> 78 AND ST_Contains(e.buff, f.line))
GROUP BY gid, e.buff) As quintuplet_experiment
WHERE ST_IsValid(geom) = false
ORDER BY gid
LIMIT 3;

 gid  |      validity_info
------+--------------------------
 5330 | Self-intersection [32 5]
 5340 | Self-intersection [42 5]
 5350 | Self-intersection [52 5]

 --simple example
SELECT ST_IsValidReason('LINESTRING(220227 150406,2220227 150407,222020 150410)');

 st_isvalidreason
------------------
 Valid Geometry



Name

ST_MakeValid — Tente de rendre valide une géométrie invalide sans perdre de sommets.

Synopsis

geometry ST_MakeValid(geometry input);

geometry ST_MakeValid(geometry input, text params);

Description

La fonction tente de créer une représentation valide d'une géométrie invalide donnée sans perdre aucun des sommets d'entrée. Les géométries valides sont retournées inchangées.

Les types de données pris en charge sont : POINTS, MULTIPOINTS, LINESTRINGS, MULTILINESTRINGS, POLYGONS, MULTIPOLYGONS et GEOMETRYCOLLECTIONS contenant n'importe quel mélange de ces éléments.

En cas de diminution de dimension (total ou partiel), la géométrie de sortie peut être une collection de géométries de dimension inférieure à égale, ou une géométrie de dimension inférieure.

Les polygones simples peuvent devenir des multigéométries en cas d'auto-intersections.

L'argument params peut être utilisé pour fournir une chaîne d'options permettant de sélectionner la méthode à utiliser pour construire une géométrie valide. La chaîne d'options est au format "method=linework|structure keepcollapsed=true|false". Si aucun argument "params" n'est fourni, l'algorithme "linework" sera utilisé par défaut.

La clé "method" a deux valeurs.

  • Le "linework" est l'algorithme original, et construit des géométries valides en extrayant d'abord toutes les lignes, en codant ce linework ensemble, puis en construisant une sortie de valeur à partir du linework.

  • La "structure" est un algorithme qui distingue les anneaux intérieurs et extérieurs, construisant une nouvelle géométrie en réunissant les anneaux extérieurs, puis en différenciant tous les anneaux intérieurs.

La clé "keepcollapsed" est uniquement valable pour l'algorithme "structure" et prend la valeur "true" ou "false". Lorsqu'elle est définie sur "false", les composants géométriques qui se réduisent à une dimension inférieure, par exemple une ligne à un point, sont abandonnés.

Effectué par le module GEOS.

Disponibilité : 2.0.0

Amélioré : 2.0.1, améliorations de la vitesse

Amélioration : 2.1.0, ajout du support pour GEOMETRYCOLLECTION et MULTIPOINT.

Amélioration : 3.1.0, suppression des coordonnées avec des valeurs NaN.

Amélioration : 3.2.0, ajout d'options d'algorithme, 'linework' et 'structure' qui nécessite GEOS >= 3.10.0.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

before_geom : MULTIPOLYGON de 2 polygones qui se superposent

after_geom : MULTIPOLYGON de 4 polygones qui ne se superposent pas

after_geom_structure : MULTIPOLYGON de 1 polygone qui ne se chevauche pas

SELECT f.geom AS before_geom, ST_MakeValid(f.geom) AS after_geom, ST_MakeValid(f.geom, 'method=structure') AS after_geom_structure
FROM (SELECT 'MULTIPOLYGON(((186 194,187 194,188 195,189 195,190 195,
191 195,192 195,193 194,194 194,194 193,195 192,195 191,
195 190,195 189,195 188,194 187,194 186,14 6,13 6,12 5,11 5,
10 5,9 5,8 5,7 6,6 6,6 7,5 8,5 9,5 10,5 11,5 12,6 13,6 14,186 194)),
((150 90,149 80,146 71,142 62,135 55,128 48,119 44,110 41,100 40,
90 41,81 44,72 48,65 55,58 62,54 71,51 80,50 90,51 100,
54 109,58 118,65 125,72 132,81 136,90 139,100 140,110 139,
119 136,128 132,135 125,142 118,146 109,149 100,150 90)))'::geometry AS geom) AS f;

before_geom : MULTIPOLYGON de 6 polygones qui se superposent

after_geom : MULTIPOLYGON de 14 polygones qui ne se superposent pas

after_geom_structure : MULTIPOLYGON de 1 polygone qui ne se chevauche pas

SELECT c.geom AS before_geom,
                    ST_MakeValid(c.geom) AS after_geom,
                    ST_MakeValid(c.geom, 'method=structure') AS after_geom_structure
        FROM (SELECT 'MULTIPOLYGON(((91 50,79 22,51 10,23 22,11 50,23 78,51 90,79 78,91 50)),
                  ((91 100,79 72,51 60,23 72,11 100,23 128,51 140,79 128,91 100)),
                  ((91 150,79 122,51 110,23 122,11 150,23 178,51 190,79 178,91 150)),
                  ((141 50,129 22,101 10,73 22,61 50,73 78,101 90,129 78,141 50)),
                  ((141 100,129 72,101 60,73 72,61 100,73 128,101 140,129 128,141 100)),
                  ((141 150,129 122,101 110,73 122,61 150,73 178,101 190,129 178,141 150)))'::geometry AS geom) AS c;

Exemples

SELECT ST_AsText(ST_MakeValid(
    'LINESTRING(0 0, 0 0)',
    'method=structure keepcollapsed=true'
    ));

 st_astext
------------
 POINT(0 0)


SELECT ST_AsText(ST_MakeValid(
    'LINESTRING(0 0, 0 0)',
    'method=structure keepcollapsed=false'
    ));

    st_astext
------------------
 LINESTRING EMPTY

7.7. Fonctions des systèmes de référence spatiale

Abstract

Ces fonctions fonctionnent avec le système de référence spatiale des géométries défini dans la table spatial_ref_sys.

  • ST_InverseTransformPipeline — Renvoie une nouvelle géométrie dont les coordonnées ont été transformées dans un système de référence spatial différent en utilisant l'inverse d'un pipeline de transformation de coordonnées défini.
  • ST_SetSRID — Définir le SRID d'une géométrie.
  • ST_SRID — Renvoie l'identifiant de référence spatiale d'une géométrie.
  • ST_Transform — Renvoie une nouvelle géométrie dont les coordonnées ont été transformées dans un système de référence spatial différent.
  • ST_TransformPipeline — Retourner une nouvelle géométrie avec des coordonnées transformées dans un système de référence spatial différent à l'aide d'un pipeline de transformation de coordonnées défini.
  • postgis_srs_codes — Renvoie la liste des codes SRS associés à l'autorité donnée.
  • postgis_srs — Renvoyer une fiche de métadonnées pour l'autorité et le srid demandés.
  • postgis_srs_all — Renvoie des enregistrements de métadonnées pour chaque système de référence spatiale dans la base de données Proj sous-jacente.
  • postgis_srs_search — Renvoyer les enregistrements de métadonnées pour les systèmes de coordonnées projetées dont les zones d'utilisation contiennent entièrement le paramètre bounds.

Name

ST_InverseTransformPipeline — Renvoie une nouvelle géométrie dont les coordonnées ont été transformées dans un système de référence spatial différent en utilisant l'inverse d'un pipeline de transformation de coordonnées défini.

Synopsis

geometry ST_InverseTransformPipeline(geometry geom, text pipeline, integer to_srid);

Description

Renvoie une nouvelle géométrie dont les coordonnées ont été transformées dans un système de référence spatial différent à l'aide d'un pipeline de transformation de coordonnées défini pour aller dans la direction inverse.

Voir ST_TransformPipeline pour plus de détails sur l'écriture d'un pipeline de transformation.

Disponibilité : 3.4.0

Le SRID de la géométrie en entrée est ignoré et le SRID de la géométrie de sortie sera mis à zéro à moins qu'une valeur ne soit fournie via le paramètre facultatif to_srid. Lors de l'utilisation de ST_TransformPipeline, le pipeline est exécuté dans le sens direct. En utilisant `ST_InverseTransformPipeline()`, le pipeline est exécuté dans le sens inverse.

Les transformations utilisant des pipelines sont une version spéciale de ST_Transform. Dans la plupart des cas, `ST_Transform` choisira les opérations correctes pour convertir entre les systèmes de coordonnées, et devrait être préféré.

Exemples

Changer WGS 84 long lat en UTM 31N en utilisant la conversion EPSG:16031

-- Inverse direction
SELECT ST_AsText(ST_InverseTransformPipeline('POINT(426857.9877165967 5427937.523342293)'::geometry,
  'urn:ogc:def:coordinateOperation:EPSG::16031')) AS wgs_geom;

          wgs_geom
----------------------------
 POINT(2 48.99999999999999)
(1 row)
    

Exemple GDA2020.

-- using ST_Transform with automatic selection of a conversion pipeline.
SELECT ST_AsText(ST_Transform('SRID=4939;POINT(143.0 -37.0)'::geometry, 7844)) AS gda2020_auto;

                 gda2020_auto
-----------------------------------------------
 POINT(143.00000635638918 -36.999986706128176)
(1 row)
    

Name

ST_SetSRID — Définir le SRID d'une géométrie.

Synopsis

geometry ST_SetSRID(geometry geom, integer srid);

Description

Définit le SRID d'une géométrie à une valeur entière particulière. Utile pour construire des boîtes de délimitation pour les requêtes.

[Note]

Cette fonction ne transforme en aucune façon les coordonnées de la géométrie - elle définit simplement les métadonnées définissant le système de référence spatiale dans lequel la géométrie est supposée se trouver. Utilisez ST_Transform si vous souhaitez transformer la géométrie dans une nouvelle projection.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette méthode prend en charge les types Circular String et Curve.

Exemples

-- Marquer un point comme WGS 84 long lat --

SELECT ST_SetSRID(ST_Point(-123.365556, 48.428611),4326) As wgs84long_lat;
-- the ewkt representation (wrap with ST_AsEWKT) -
SRID=4326;POINT(-123.365556 48.428611)
      

-- Marquer un point comme WGS 84 long lat puis le transformer en mercator web (Mercator Sphérique) --

SELECT ST_Transform(ST_SetSRID(ST_Point(-123.365556, 48.428611),4326),3785) As spere_merc;
-- the ewkt representation (wrap with ST_AsEWKT) -
SRID=3785;POINT(-13732990.8753491 6178458.96425423)
      

Name

ST_SRID — Renvoie l'identifiant de référence spatiale d'une géométrie.

Synopsis

integer ST_SRID(geometry g1);

Description

Renvoie l'identifiant de référence spatiale pour la ST_Geometry tel que défini dans la table spatial_ref_sys. Section 4.5, “Systèmes de référence spatiale”

[Note]

La table spatial_ref_sys est une table qui répertorie tous les systèmes de référence spatiale connus de PostGIS et qui est utilisée pour les transformations d'un système de référence spatiale à un autre. Il est donc important de vérifier que vous disposez du bon identifiant de système de référence spatiale si vous envisagez de transformer vos géométries.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.5

Cette méthode prend en charge les types Circular String et Curve.

Exemples

SELECT ST_SRID(ST_GeomFromText('POINT(-71.1043 42.315)',4326));
    --result
    4326
    

Name

ST_Transform — Renvoie une nouvelle géométrie dont les coordonnées ont été transformées dans un système de référence spatial différent.

Synopsis

geometry ST_Transform(geometry g1, integer srid);

geometry ST_Transform(geometry geom, text to_proj);

geometry ST_Transform(geometry geom, text from_proj, text to_proj);

geometry ST_Transform(geometry geom, text from_proj, integer to_srid);

Description

Renvoie une nouvelle géométrie dont les coordonnées ont été transformées dans un système de référence spatiale différent. La référence spatiale de destination to_srid peut être identifiée par un paramètre entier SRID valide (c'est-à-dire qu'elle doit exister dans la table spatial_ref_sys). Il est également possible d'utiliser une référence spatiale définie comme une chaîne PROJ.4 pour to_proj et/ou from_proj, mais ces méthodes ne sont pas optimisées. Si le système de référence spatiale de destination est exprimé avec une chaîne PROJ.4 au lieu d'un SRID, le SRID de la géométrie de sortie sera mis à zéro. A l'exception des fonctions avec from_proj, les géométries d'entrée doivent avoir un SRID défini.

ST_Transform est souvent confondu avec ST_SetSRID. ST_Transform modifie en fait les coordonnées d'une géométrie d'un système de référence spatiale à un autre, tandis que ST_SetSRID() modifie simplement l'identifiant SRID de la géométrie.

ST_Transform sélectionne automatiquement un pipeline de conversion approprié en fonction des systèmes de référence spatiale source et cible. Pour utiliser une méthode de conversion spécifique, utilisez ST_TransformPipeline.

[Note]

PostGIS doit être compilé avec le support PROJ. Utilisez PostGIS_Full_Version pour confirmer que vous avez compilé le support PROJ.

[Note]

Si l'on utilise plus d'une transformation, il est utile de disposer d'un index fonctionnel sur les transformations les plus couramment utilisées afin de tirer parti de l'utilisation de l'index.

[Note]

Avant la version 1.3.4, cette fonction se bloquait si elle était utilisée avec des géométries contenant des CURVES. Ce problème est corrigé dans la version 1.3.4+

Amélioration : 2.0.0 introduction du support des surfaces polyédriques.

Amélioration : la version 2.3.0 a introduit la prise en charge du texte PROJ.4 direct.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3: 5.1.6

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

Changer la géométrie des pieds US du plan de l'État du Massachusetts en WGS 84 long lat

SELECT ST_AsText(ST_Transform(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,
  743265 2967450,743265.625 2967416,743238 2967416))',2249),4326)) As wgs_geom;

 wgs_geom
---------------------------
 POLYGON((-71.1776848522251 42.3902896512902,-71.1776843766326 42.3903829478009,
-71.1775844305465 42.3903826677917,-71.1775825927231 42.3902893647987,-71.177684
8522251 42.3902896512902));
(1 row)

--3D Circular String example
SELECT ST_AsEWKT(ST_Transform(ST_GeomFromEWKT('SRID=2249;CIRCULARSTRING(743238 2967416 1,743238 2967450 2,743265 2967450 3,743265.625 2967416 3,743238 2967416 4)'),4326));

         st_asewkt
--------------------------------------------------------------------------------------
 SRID=4326;CIRCULARSTRING(-71.1776848522251 42.3902896512902 1,-71.1776843766326 42.3903829478009 2,
 -71.1775844305465 42.3903826677917 3,
 -71.1775825927231 42.3902893647987 3,-71.1776848522251 42.3902896512902 4)

    

Exemple de création d'un index fonctionnel partiel. Pour les tables dont vous n'êtes pas sûr que toutes les géométries seront renseignées, il est préférable d'utiliser un index partiel qui laisse de côté les géométries nulles, ce qui permet à la fois de conserver de l'espace et de rendre votre index plus petit et plus efficace.

CREATE INDEX idx_geom_26986_parcels
  ON parcels
  USING gist
  (ST_Transform(geom, 26986))
  WHERE geom IS NOT NULL;
    

Exemples d'utilisation du texte PROJ.4 pour transformer avec des références spatiales personnalisées.

-- Find intersection of two polygons near the North pole, using a custom Gnomic projection
-- See http://boundlessgeo.com/2012/02/flattening-the-peel/
 WITH data AS (
   SELECT
     ST_GeomFromText('POLYGON((170 50,170 72,-130 72,-130 50,170 50))', 4326) AS p1,
     ST_GeomFromText('POLYGON((-170 68,-170 90,-141 90,-141 68,-170 68))', 4326) AS p2,
     '+proj=gnom +ellps=WGS84 +lat_0=70 +lon_0=-160 +no_defs'::text AS gnom
 )
 SELECT ST_AsText(
   ST_Transform(
     ST_Intersection(ST_Transform(p1, gnom), ST_Transform(p2, gnom)),
   gnom, 4326))
 FROM data;
                                          st_astext
 --------------------------------------------------------------------------------
  POLYGON((-170 74.053793645338,-141 73.4268621378904,-141 68,-170 68,-170 74.053793645338))
    

Configurer le comportement de transformation

Parfois, la transformation de coordonnées impliquant un décalage de grille peut échouer, par exemple si PROJ.4 n'a pas été construit avec des fichiers de décalage de grille ou si la coordonnée ne se trouve pas dans la plage pour laquelle le décalage de grille est défini. Par défaut, PostGIS génère une erreur si un fichier de décalage de grille n'est pas présent, mais ce comportement peut être configuré pour chaque SRID, soit en testant différentes valeurs to_proj de texte PROJ.4, soit en modifiant la valeur proj4text dans la table spatial_ref_sys.

Par exemple, le paramètre proj4text +datum=NAD87 est une forme abrégée du paramètre +nadgrids suivant :

+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat

Le préfixe @ signifie qu'aucune erreur n'est signalée si les fichiers ne sont pas présents, mais si la fin de la liste est atteinte sans qu'aucun fichier n'ait été approprié (c'est-à-dire trouvé et se chevauchant), une erreur est émise.

Si, à l'inverse, vous voulez vous assurer qu'au moins les fichiers standard sont présents, mais que si tous les fichiers ont été analysés sans résultat, une transformation nulle est appliquée, vous pouvez utiliser :

+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat,null

Le fichier de décalage de grille nul est un fichier de décalage de grille valide couvrant le monde entier et n'appliquant aucun décalage. Ainsi, pour un exemple complet, si vous vouliez modifier PostGIS de manière à ce que les transformations du SRID 4267 qui ne se situent pas dans la plage correcte n'entraînent pas d'ERREUR, vous utiliseriez ce qui suit :

UPDATE spatial_ref_sys SET proj4text = '+proj=longlat +ellps=clrk66 +nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat,null +no_defs' WHERE srid = 4267;

Name

ST_TransformPipeline — Retourner une nouvelle géométrie avec des coordonnées transformées dans un système de référence spatial différent à l'aide d'un pipeline de transformation de coordonnées défini.

Synopsis

geometry ST_TransformPipeline(geometry g1, text pipeline, integer to_srid);

Description

Retourner une nouvelle géométrie dont les coordonnées ont été transformées dans un système de référence spatial différent à l'aide d'un pipeline de transformation de coordonnées défini.

Les pipelines de transformation sont définis à l'aide de l'un des formats de texte suivants :

  • urn:ogc:def:coordinateOperation:AUTHORITY::CODE. Notez qu'une simple chaîne de caractère EPSG:CODE n'identifie pas de manière unique une opération de coordonnées : le même code EPSG peut être utilisé pour une définition CRS.

  • Une chaîne de caractères de pipeline PROJ de la forme : +proj=pipeline .... La normalisation automatique des axes ne sera pas appliquée et, si nécessaire, l'appelant devra ajouter une étape de pipeline supplémentaire ou supprimer les étapes axisswap.

  • Opérations concaténées de la forme : urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618.

Disponibilité : 3.4.0

Le SRID de la géométrie d'entrée est ignoré, et le SRID de la géométrie de sortie sera mis à zéro à moins qu'une valeur ne soit fournie via le paramètre optionnel to_srid. Lors de l'utilisation de `ST_TransformPipeline()`, le pipeline est exécuté dans la direction avant. En utilisant ST_InverseTransformPipeline le pipeline est exécuté dans le sens inverse.

Les transformations utilisant des pipelines sont une version spéciale de ST_Transform. Dans la plupart des cas, `ST_Transform` choisira les opérations correctes pour convertir entre les systèmes de coordonnées, et devrait être préféré.

Exemples

Changer WGS 84 long lat en UTM 31N en utilisant la conversion EPSG:16031

-- Forward direction
SELECT ST_AsText(ST_TransformPipeline('SRID=4326;POINT(2 49)'::geometry,
  'urn:ogc:def:coordinateOperation:EPSG::16031')) AS utm_geom;

                  utm_geom
--------------------------------------------
 POINT(426857.9877165967 5427937.523342293)
(1 row)

-- Inverse direction
SELECT ST_AsText(ST_InverseTransformPipeline('POINT(426857.9877165967 5427937.523342293)'::geometry,
  'urn:ogc:def:coordinateOperation:EPSG::16031')) AS wgs_geom;

          wgs_geom
----------------------------
 POINT(2 48.99999999999999)
(1 row)
    

Exemple GDA2020.

-- using ST_Transform with automatic selection of a conversion pipeline.
SELECT ST_AsText(ST_Transform('SRID=4939;POINT(143.0 -37.0)'::geometry, 7844)) AS gda2020_auto;

                 gda2020_auto
-----------------------------------------------
 POINT(143.00000635638918 -36.999986706128176)
(1 row)

-- using a defined conversion (EPSG:8447)
SELECT ST_AsText(ST_TransformPipeline('SRID=4939;POINT(143.0 -37.0)'::geometry,
  'urn:ogc:def:coordinateOperation:EPSG::8447')) AS gda2020_code;

                   gda2020_code
----------------------------------------------
 POINT(143.0000063280214 -36.999986718287545)
(1 row)

-- using a PROJ pipeline definition matching EPSG:8447, as returned from
-- 'projinfo -s EPSG:4939 -t EPSG:7844'.
-- NOTE: any 'axisswap' steps must be removed.
SELECT ST_AsText(ST_TransformPipeline('SRID=4939;POINT(143.0 -37.0)'::geometry,
  '+proj=pipeline
   +step +proj=unitconvert +xy_in=deg +xy_out=rad
   +step +proj=hgridshift +grids=au_icsm_GDA94_GDA2020_conformal_and_distortion.tif
   +step +proj=unitconvert +xy_in=rad +xy_out=deg')) AS gda2020_pipeline;

                   gda2020_pipeline
----------------------------------------------
 POINT(143.0000063280214 -36.999986718287545)
(1 row)
    

Name

postgis_srs_codes — Renvoie la liste des codes SRS associés à l'autorité donnée.

Synopsis

setof text postgis_srs_codes(text auth_name);

Description

Renvoie un ensemble de tous les auth_srid pour le auth_name donné.

Disponibilité : 3.4.0

Proj version 6+

Exemples

Indiquez les dix premiers codes associés à l'autorité EPSG.

SELECT * FROM postgis_srs_codes('EPSG') LIMIT 10;

 postgis_srs_codes
-------------------
 2000
 20004
 20005
 20006
 20007
 20008
 20009
 2001
 20010
 20011
    

Name

postgis_srs — Renvoyer une fiche de métadonnées pour l'autorité et le srid demandés.

Synopsis

setof record postgis_srs(text auth_name, text auth_srid);

Description

Renvoie un enregistrement de métadonnées pour le auth_srid demandé pour le auth_name donné. L'enregistrement contiendra les éléments suivants : auth_name, auth_srid, srname, srtext, proj4text, et les angles de la zone d'utilisation, point_sw et point_ne.

Disponibilité : 3.4.0

Proj version 6+

Exemples

Obtenir les métadonnées pour EPSG:3005.

SELECT * FROM postgis_srs('EPSG', '3005');

auth_name | EPSG
auth_srid | 3005
srname    | NAD83 / BC Albers
srtext    | PROJCS["NAD83 / BC Albers", ... ]]
proj4text | +proj=aea +lat_0=45 +lon_0=-126 +lat_1=50 +lat_2=58.5 +x_0=1000000 +y_0=0 +datum=NAD83 +units=m +no_defs +type=crs
point_sw  | 0101000020E6100000E17A14AE476161C00000000000204840
point_ne  | 0101000020E610000085EB51B81E855CC0E17A14AE47014E40
    

Name

postgis_srs_all — Renvoie des enregistrements de métadonnées pour chaque système de référence spatiale dans la base de données Proj sous-jacente.

Synopsis

setof record postgis_srs_all(void);

Description

Renvoie un ensemble d'enregistrements de métadonnées dans la base de données Proj sous-jacente. Les enregistrements auront le auth_name, auth_srid, srname, srtext, proj4text, et les angles de la zone d'utilisation, point_sw et point_ne.

Disponibilité : 3.4.0

Proj version 6+

Exemples

Obtenir les 10 premiers enregistrements de métadonnées de la base de données Proj.

SELECT auth_name, auth_srid, srname FROM postgis_srs_all() LIMIT 10;

 auth_name | auth_srid |                  srname
-----------+-----------+------------------------------------------
 EPSG      | 2000      | Anguilla 1957 / British West Indies Grid
 EPSG      | 20004     | Pulkovo 1995 / Gauss-Kruger zone 4
 EPSG      | 20005     | Pulkovo 1995 / Gauss-Kruger zone 5
 EPSG      | 20006     | Pulkovo 1995 / Gauss-Kruger zone 6
 EPSG      | 20007     | Pulkovo 1995 / Gauss-Kruger zone 7
 EPSG      | 20008     | Pulkovo 1995 / Gauss-Kruger zone 8
 EPSG      | 20009     | Pulkovo 1995 / Gauss-Kruger zone 9
 EPSG      | 2001      | Antigua 1943 / British West Indies Grid
 EPSG      | 20010     | Pulkovo 1995 / Gauss-Kruger zone 10
 EPSG      | 20011     | Pulkovo 1995 / Gauss-Kruger zone 11    

7.8. Import de géométrie

Abstract

Ces fonctions créent des objets géométriques à partir de divers formats textuels ou binaires.

7.8.1. Well-Known Text (WKT)

  • ST_BdPolyFromText — Construit un Polygon à partir d'une collection de lignes fermées, exprimées sous forme de MultiLineString en représentation Well-Known text.
  • ST_BdMPolyFromText — Construit un MultiPolygon à partir d'une collection de lignes fermées, exprimées sous forme de MultiLineString en représentation Well-Known text.
  • ST_GeogFromText — Retourne un objet de type geography à partir de sa représentation Well-Know Text (WKT ou EWKT).
  • ST_GeographyFromText — Retourne un objet de type geography à partir de sa représentation Well-Know Text (WKT ou EWKT).
  • ST_GeomCollFromText — Crée une collection Geometry à partir de la collection WKT avec le SRID donné. Si le SRID n'est pas donné, la valeur par défaut est 0.
  • ST_GeomFromEWKT — Retourne un objet ST_Geometry à partir de sa représentation textuelle étendue (Extended Well-Known Text representation, EWKT).
  • ST_GeomFromMARC21 — Prend les données géographiques MARC21/XML en entrée et renvoie un objet géométrique PostGIS.
  • ST_GeometryFromText — Retourne un objet ST_Geometry à partir de sa représentation textuelle Well-Known Text (WKT). Alias pour ST_GeomFromText
  • ST_GeomFromText — Retourne un objet ST_Geometry à partir de sa représentation textuelle Well-Known Text (WKT).
  • ST_LineFromText — Construit une géométrie à partir d'une représentation WKT avec le SRID donné. Si aucun SRID n'est donné, la valeur par défaut est 0.
  • ST_MLineFromText — Retourne un objet de type ST_MultiLineString à partir de sa représentation WKT.
  • ST_MPointFromText — Créé une Geometry depuis un WKT avec le SRID donné. Si le SRID n'est pas fourni, il sera défini par défaut à 0.
  • ST_MPolyFromText — Crée une géométrie multi-polygone à partir de WKT avec le SRID donné. Si le SRID n'est pas donné, la valeur par défaut est 0.
  • ST_PointFromText — Construit une géométrie point à partir d'une représentation WKT et le SRID donné. Si aucun SRID n'est donné, la valeur par défaut est 0.
  • ST_PolygonFromText — Créé une Geometry depuis un WKT avec le SRID donné. Si le SRID n'est pas fourni, il sera défini par défaut à 0.
  • ST_WKTToSQL — Retourne un objet ST_Geometry à partir de sa représentation textuelle Well-Known Text (WKT). Alias pour ST_GeomFromText

Name

ST_BdPolyFromText — Construit un Polygon à partir d'une collection de lignes fermées, exprimées sous forme de MultiLineString en représentation Well-Known text.

Synopsis

geometry ST_BdPolyFromText(text WKT, integer srid);

Description

Construit un Polygon à partir d'une collection de lignes fermées, exprimées sous forme de MultiLineString en représentation Well-Known text.

[Note]

Renvoie une erreur si le WKT n'est pas une MULTILINESTRING. Renvoie une erreur si le résultat est un MULTIPOLYGON. Utiliser ST_BdMPolyFromText dans ce cas, ou voir ST_BuildArea() pour une approche basée sur une fonction spécifique.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Effectué par le module GEOS.

Disponibilité : 1.1.0


Name

ST_BdMPolyFromText — Construit un MultiPolygon à partir d'une collection de lignes fermées, exprimées sous forme de MultiLineString en représentation Well-Known text.

Synopsis

geometry ST_BdMPolyFromText(text WKT, integer srid);

Description

Construit un Polygon à partir d'une collection de lignes fermées, de polygones ou de MultiLineStrings exprimés en représentation Well-Known text.

[Note]

Renvoie une erreur si le WKT n'est pas une MULTILINESTRING. Force le type de retour en MULTIPOLYGON même si le résultat est en fait composé d'un seul POLYGON. Utiliser ST_BdPolyFromText si l'on est sûr que le résultat produit des Polygon, ou voir la fonction spécifique PostGIS ST_BuildArea().

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Effectué par le module GEOS.

Disponibilité : 1.1.0


Name

ST_GeogFromText — Retourne un objet de type geography à partir de sa représentation Well-Know Text (WKT ou EWKT).

Synopsis

geography ST_GeogFromText(text EWKT);

Description

Retourne un objet de type geography à partir de sa représentation Well-Know Text (WKT ou EWKT). Le SRID 4326 est pris par défaut. Ceci est un alias pour ST_GeographyFromText. Les coordonnées des points sont exprimées en longitude latitude.

Exemples

--- converting lon lat coords to geography
ALTER TABLE sometable ADD COLUMN geog geography(POINT,4326);
UPDATE sometable SET geog = ST_GeogFromText('SRID=4326;POINT(' || lon || ' ' || lat || ')');

--- specify a geography point using EPSG:4267, NAD27
SELECT ST_AsEWKT(ST_GeogFromText('SRID=4267;POINT(-77.0092 38.889588)'));
                        

Name

ST_GeographyFromText — Retourne un objet de type geography à partir de sa représentation Well-Know Text (WKT ou EWKT).

Synopsis

geography ST_GeographyFromText(text EWKT);

Description

Retourne un objet de type geography à partir de sa représentation Well-Know Text (WKT ou EWKT). SRID 4326 par défaut.


Name

ST_GeomCollFromText — Crée une collection Geometry à partir de la collection WKT avec le SRID donné. Si le SRID n'est pas donné, la valeur par défaut est 0.

Synopsis

geometry ST_GeomCollFromText(text WKT, integer srid);

geometry ST_GeomCollFromText(text WKT);

Description

Crée une géométrie de collection à partir de la représentation Well-Known-Text (WKT) avec le SRID donné. Si le SRID n'est pas donné, la valeur par défaut est 0.

OGC SPEC 3.2.6.2 - l'option SRID est issue des tests de conformité

Retourne null si le WKT n'est pas une GEOMETRYCOLLECTION

[Note]

Si vous êtes absolument sûrs que toutes les géométries WKT sont des collections, ne pas utiliser cette fonction. Elle est plus lente que ST_GeomFromText à cause d'une étape de validation supplémentaire.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Cette méthode implémente la spécification SQL/MM.

Exemples

SELECT ST_GeomCollFromText('GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(1 2, 3 4))');

Name

ST_GeomFromEWKT — Retourne un objet ST_Geometry à partir de sa représentation textuelle étendue (Extended Well-Known Text representation, EWKT).

Synopsis

geometry ST_GeomFromEWKT(text EWKT);

Description

Retourne un objet ST_Geometry à partir de sa représentation textuelle étendue OGC (Extended Well-Known Text representation, EWKT).

[Note]

Le format EWKT n'est pas une norme OGC, mais un format spécifique à PostGIS incluant l'identifiant du système de référence des coordonnées (SRID)

Amélioration : 2.0.0 introduction du support TIN et surfaces polyédriques.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Exemples

SELECT ST_GeomFromEWKT('SRID=4269;LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)');
SELECT ST_GeomFromEWKT('SRID=4269;MULTILINESTRING((-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932))');

SELECT ST_GeomFromEWKT('SRID=4269;POINT(-71.064544 42.28787)');

SELECT ST_GeomFromEWKT('SRID=4269;POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,
-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');

SELECT ST_GeomFromEWKT('SRID=4269;MULTIPOLYGON(((-71.1031880899493 42.3152774590236,
-71.1031627617667 42.3152960829043,-71.102923838298 42.3149156848307,
-71.1023097974109 42.3151969047397,-71.1019285062273 42.3147384934248,
-71.102505233663 42.3144722937587,-71.10277487471 42.3141658254797,
-71.103113945163 42.3142739188902,-71.10324876416 42.31402489987,
-71.1033002961013 42.3140393340215,-71.1033488797549 42.3139495090772,
-71.103396240451 42.3138632439557,-71.1041521907712 42.3141153348029,
-71.1041411411543 42.3141545014533,-71.1041287795912 42.3142114839058,
-71.1041188134329 42.3142693656241,-71.1041112482575 42.3143272556118,
-71.1041072845732 42.3143851580048,-71.1041057218871 42.3144430686681,
-71.1041065602059 42.3145009876017,-71.1041097995362 42.3145589148055,
-71.1041166403905 42.3146168544148,-71.1041258822717 42.3146748022936,
-71.1041375307579 42.3147318674446,-71.1041492906949 42.3147711126569,
-71.1041598612795 42.314808571739,-71.1042515013869 42.3151287620809,
-71.1041173835118 42.3150739481917,-71.1040809891419 42.3151344119048,
-71.1040438678912 42.3151191367447,-71.1040194562988 42.3151832057859,
-71.1038734225584 42.3151140942995,-71.1038446938243 42.3151006300338,
-71.1038315271889 42.315094347535,-71.1037393329282 42.315054824985,
-71.1035447555574 42.3152608696313,-71.1033436658644 42.3151648370544,
-71.1032580383161 42.3152269126061,-71.103223066939 42.3152517403219,
-71.1031880899493 42.3152774590236)),
((-71.1043632495873 42.315113108546,-71.1043583974082 42.3151211109857,
-71.1043443253471 42.3150676015829,-71.1043850704575 42.3150793250568,-71.1043632495873 42.315113108546)))');
--3d circular string
SELECT ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)');
--Polyhedral Surface example
SELECT ST_GeomFromEWKT('POLYHEDRALSURFACE(
        ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
        ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
        ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
        ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
        ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)),
        ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1))
)');

Name

ST_GeomFromMARC21 — Prend les données géographiques MARC21/XML en entrée et renvoie un objet géométrique PostGIS.

Synopsis

geometry ST_GeomFromMARC21 ( text marcxml );

Description

Cette fonction crée une géométrie PostGIS à partir d'un enregistrement MARC21/XML, qui peut contenir un POINT ou un POLYGON. En cas d'entrées de données géographiques multiples dans le même enregistrement MARC21/XML, un MULTIPOINT ou MULTIPOLYGON sera renvoyé. Si la notice contient des types de géométrie mixtes, une GEOMETRYCOLLECTION sera retournée. Il renvoie NULL si l'enregistrement MARC21/XML ne contient pas de données géographiques (datafield :034).

Prise en charge des versions LOC MARC21/XML :

Disponibilité : 3.3.0, nécessite libxml2 2.6+

[Note]

Les données mathématiques cartographiques codées MARC21/XML ne fournissent actuellement aucun moyen de décrire le système de référence spatiale des coordonnées codées, de sorte que cette fonction retournera toujours une géométrie avec SRID 0.

[Note]

Les géométries POLYGON retournées seront toujours orientées dans le sens des aiguilles d'une montre.

Exemples

Conversion de données géographiques MARC21/XML contenant un seul POINT encodé en hddd.dddddd


                SELECT
                ST_AsText(
                    ST_GeomFromMARC21('
                        <record xmlns="http://www.loc.gov/MARC21/slim">
                            <leader
>00000nz a2200000nc 4500</leader>
                            <controlfield tag="001"
>040277569</controlfield>
                            <datafield tag="034" ind1=" " ind2=" ">
                                <subfield code="d"
>W004.500000</subfield>
                                <subfield code="e"
>W004.500000</subfield>
                                <subfield code="f"
>N054.250000</subfield>
                                <subfield code="g"
>N054.250000</subfield>
                            </datafield>
                        </record
>'));

                st_astext
                -------------------
                POINT(-4.5 54.25)
                (1 row)

            

Conversion de données géographiques MARC21/XML contenant un seul POLYGON encodé en hdddmmss



                SELECT
                ST_AsText(
                    ST_GeomFromMARC21('
                        <record xmlns="http://www.loc.gov/MARC21/slim">
                            <leader
>01062cem a2200241 a 4500</leader>
                            <controlfield tag="001"
>   84696781 </controlfield>
                            <datafield tag="034" ind1="1" ind2=" ">
                                <subfield code="a"
>a</subfield>
                                <subfield code="b"
>50000</subfield>
                                <subfield code="d"
>E0130600</subfield>
                                <subfield code="e"
>E0133100</subfield>
                                <subfield code="f"
>N0523900</subfield>
                                <subfield code="g"
>N0522300</subfield>
                            </datafield>
                        </record
>'));

                st_astext
                -----------------------------------------------------------------------------------------------------------------------
                POLYGON((13.1 52.65,13.516666666666667 52.65,13.516666666666667 52.38333333333333,13.1 52.38333333333333,13.1 52.65))
                (1 row)

            

Conversion de données géographiques MARC21/XML contenant un POLYGON et un POINT :



                SELECT
                ST_AsText(
                    ST_GeomFromMARC21('
                <record xmlns="http://www.loc.gov/MARC21/slim">
                    <datafield tag="034" ind1="1" ind2=" ">
                        <subfield code="a"
>a</subfield>
                        <subfield code="b"
>50000</subfield>
                        <subfield code="d"
>E0130600</subfield>
                        <subfield code="e"
>E0133100</subfield>
                        <subfield code="f"
>N0523900</subfield>
                        <subfield code="g"
>N0522300</subfield>
                    </datafield>
                    <datafield tag="034" ind1=" " ind2=" ">
                        <subfield code="d"
>W004.500000</subfield>
                        <subfield code="e"
>W004.500000</subfield>
                        <subfield code="f"
>N054.250000</subfield>
                        <subfield code="g"
>N054.250000</subfield>
                    </datafield>
                </record
>'));
                                                                                        st_astext
                -------------------------------------------------------------------------------------------------------------------------------------------------------------
                GEOMETRYCOLLECTION(POLYGON((13.1 52.65,13.516666666666667 52.65,13.516666666666667 52.38333333333333,13.1 52.38333333333333,13.1 52.65)),POINT(-4.5 54.25))
                (1 row)
            

Voir aussi

ST_AsMARC21


Name

ST_GeometryFromText — Retourne un objet ST_Geometry à partir de sa représentation textuelle Well-Known Text (WKT). Alias pour ST_GeomFromText

Synopsis

geometry ST_GeometryFromText(text WKT);

geometry ST_GeometryFromText(text WKT, integer srid);

Description

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.40

Voir aussi

ST_GeomFromText


Name

ST_GeomFromText — Retourne un objet ST_Geometry à partir de sa représentation textuelle Well-Known Text (WKT).

Synopsis

geometry ST_GeomFromText(text WKT);

geometry ST_GeomFromText(text WKT, integer srid);

Description

Construit un objet Postgis de type geometry à partir d'une représentation OGC Well-Known Text WKT.

[Note]

Il existe deux variantes de la fonction ST_GeomFromText. La première ne prend pas de SRID et renvoie une géométrie sans système de référence spatiale défini (SRID=0). La seconde prend un SRID comme deuxième argument et renvoie une géométrie qui inclut ce SRID comme partie de ses métadonnées.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2 - l'option SRID est issue des tests de conformité.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.40

Cette méthode prend en charge les types Circular String et Curve.

[Note]

Bien que non conforme à l'OGC, ST_MakePoint est plus rapide que ST_GeomFromText et ST_PointFromText. Il est également plus facile à utiliser pour les valeurs de coordonnées numériques. ST_Point est une autre option similaire en vitesse à ST_MakePoint et est conforme à l'OGC, mais ne prend pas en charge autre chose que les points 2D.

[Warning]

Changement : 2.0.0 dans les version précédentes de PostGIS ST_GeomFromText('GEOMETRYCOLLECTION(EMPTY)') etait autorisé. C'est désormais interdit dans PostGIS 2.0.0 pour respecter la norme SQL/MM. La forme privilégiée désormais est : ST_GeomFromText('GEOMETRYCOLLECTION EMPTY')

Exemples

SELECT ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)');
SELECT ST_GeomFromText('LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932)',4269);

SELECT ST_GeomFromText('MULTILINESTRING((-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932))');

SELECT ST_GeomFromText('POINT(-71.064544 42.28787)');

SELECT ST_GeomFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,
-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');

SELECT ST_GeomFromText('MULTIPOLYGON(((-71.1031880899493 42.3152774590236,
-71.1031627617667 42.3152960829043,-71.102923838298 42.3149156848307,
-71.1023097974109 42.3151969047397,-71.1019285062273 42.3147384934248,
-71.102505233663 42.3144722937587,-71.10277487471 42.3141658254797,
-71.103113945163 42.3142739188902,-71.10324876416 42.31402489987,
-71.1033002961013 42.3140393340215,-71.1033488797549 42.3139495090772,
-71.103396240451 42.3138632439557,-71.1041521907712 42.3141153348029,
-71.1041411411543 42.3141545014533,-71.1041287795912 42.3142114839058,
-71.1041188134329 42.3142693656241,-71.1041112482575 42.3143272556118,
-71.1041072845732 42.3143851580048,-71.1041057218871 42.3144430686681,
-71.1041065602059 42.3145009876017,-71.1041097995362 42.3145589148055,
-71.1041166403905 42.3146168544148,-71.1041258822717 42.3146748022936,
-71.1041375307579 42.3147318674446,-71.1041492906949 42.3147711126569,
-71.1041598612795 42.314808571739,-71.1042515013869 42.3151287620809,
-71.1041173835118 42.3150739481917,-71.1040809891419 42.3151344119048,
-71.1040438678912 42.3151191367447,-71.1040194562988 42.3151832057859,
-71.1038734225584 42.3151140942995,-71.1038446938243 42.3151006300338,
-71.1038315271889 42.315094347535,-71.1037393329282 42.315054824985,
-71.1035447555574 42.3152608696313,-71.1033436658644 42.3151648370544,
-71.1032580383161 42.3152269126061,-71.103223066939 42.3152517403219,
-71.1031880899493 42.3152774590236)),
((-71.1043632495873 42.315113108546,-71.1043583974082 42.3151211109857,
-71.1043443253471 42.3150676015829,-71.1043850704575 42.3150793250568,-71.1043632495873 42.315113108546)))',4326);

SELECT ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)');
        

Name

ST_LineFromText — Construit une géométrie à partir d'une représentation WKT avec le SRID donné. Si aucun SRID n'est donné, la valeur par défaut est 0.

Synopsis

geometry ST_LineFromText(text WKT);

geometry ST_LineFromText(text WKT, integer srid);

Description

Crée une géométrie à partir de WKT avec le SRID donné. Si le SRID n'est pas donné, la valeur par défaut est 0. Si le WKT passé n'est pas un LINESTRING, null est retourné.

[Note]

OGC SPEC 3.2.6.2 - option SRID issue des tests de conformité.

[Note]

Si vous êtes sûrs que toutes les géométries WKT sont des LINESTRINGS, la fonction ST_GeomFromText est plus efficace car elle ne contrôle pas le type de la géométrie renvoyée.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 7.2.8

Exemples

SELECT ST_LineFromText('LINESTRING(1 2, 3 4)') AS aline, ST_LineFromText('POINT(1 2)') AS null_return;
aline                            | null_return
------------------------------------------------
010200000002000000000000000000F ... | t
                

Voir aussi

ST_GeomFromText


Name

ST_MLineFromText — Retourne un objet de type ST_MultiLineString à partir de sa représentation WKT.

Synopsis

geometry ST_MLineFromText(text WKT, integer srid);

geometry ST_MLineFromText(text WKT);

Description

Crée une géométrie à partir du texte connu (WKT) avec le SRID donné. Si le SRID n'est pas donné, la valeur par défaut est 0.

OGC SPEC 3.2.6.2 - l'option SRID est issue des tests de conformité

Retourne NULL si le WKT n'est pas une MULTILINESTRING

[Note]

Si vous êtes absolument sûrs que toutes les géométries WKT sont des points, ne pas utiliser cette fonction. Elle est plus lente que ST_GeomFromText à cause d'une étape de validation supplémentaire.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 9.4.4

Exemples

SELECT ST_MLineFromText('MULTILINESTRING((1 2, 3 4), (4 5, 6 7))');

Voir aussi

ST_GeomFromText


Name

ST_MPointFromText — Créé une Geometry depuis un WKT avec le SRID donné. Si le SRID n'est pas fourni, il sera défini par défaut à 0.

Synopsis

geometry ST_MPointFromText(text WKT, integer srid);

geometry ST_MPointFromText(text WKT);

Description

Créé une Geometry depuis un WKT avec le SRID donné. Si le SRID n'est pas fourni, il sera défini par défaut à 0.

OGC SPEC 3.2.6.2 - l'option SRID est issue des tests de conformité

Retourne NULL si le WKT n'est pas une MULTIPOINT

[Note]

Si vous êtes absolument sûrs que toutes les géométries WKT sont des points, ne pas utiliser cette fonction. Elle est plus lente que ST_GeomFromText à cause d'une étape de validation supplémentaire.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. 3.2.6.2

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 9.2.4

Exemples

SELECT ST_MPointFromText('MULTIPOINT((1 2),(3 4))');
SELECT ST_MPointFromText('MULTIPOINT((-70.9590 42.1180),(-70.9611 42.1223))', 4326);

Voir aussi

ST_GeomFromText


Name

ST_MPolyFromText — Crée une géométrie multi-polygone à partir de WKT avec le SRID donné. Si le SRID n'est pas donné, la valeur par défaut est 0.

Synopsis

geometry ST_MPolyFromText(text WKT, integer srid);

geometry ST_MPolyFromText(text WKT);

Description

Crée un MultiPolygone à partir de WKT avec le SRID donné. Si le SRID n'est pas donné, la valeur par défaut est 0.

OGC SPEC 3.2.6.2 - l'option SRID est issue des tests de conformité

Retourne une erreur si le WKT n'est pas un MULTIPOLYGON

[Note]

Si vous êtes absolument sûrs que toutes les géométries WKT sont des multipolygones, ne pas utiliser cette fonction. Elle est plus lente que ST_GeomFromText à cause d'une étape de validation supplémentaire.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 9.6.4

Exemples

SELECT ST_MPolyFromText('MULTIPOLYGON(((0 0 1,20 0 1,20 20 1,0 20 1,0 0 1),(5 5 3,5 7 3,7 7 3,7 5 3,5 5 3)))');
SELECt ST_MPolyFromText('MULTIPOLYGON(((-70.916 42.1002,-70.9468 42.0946,-70.9765 42.0872,-70.9754 42.0875,-70.9749 42.0879,-70.9752 42.0881,-70.9754 42.0891,-70.9758 42.0894,-70.9759 42.0897,-70.9759 42.0899,-70.9754 42.0902,-70.9756 42.0906,-70.9753 42.0907,-70.9753 42.0917,-70.9757 42.0924,-70.9755 42.0928,-70.9755 42.0942,-70.9751 42.0948,-70.9755 42.0953,-70.9751 42.0958,-70.9751 42.0962,-70.9759 42.0983,-70.9767 42.0987,-70.9768 42.0991,-70.9771 42.0997,-70.9771 42.1003,-70.9768 42.1005,-70.977 42.1011,-70.9766 42.1019,-70.9768 42.1026,-70.9769 42.1033,-70.9775 42.1042,-70.9773 42.1043,-70.9776 42.1043,-70.9778 42.1048,-70.9773 42.1058,-70.9774 42.1061,-70.9779 42.1065,-70.9782 42.1078,-70.9788 42.1085,-70.9798 42.1087,-70.9806 42.109,-70.9807 42.1093,-70.9806 42.1099,-70.9809 42.1109,-70.9808 42.1112,-70.9798 42.1116,-70.9792 42.1127,-70.979 42.1129,-70.9787 42.1134,-70.979 42.1139,-70.9791 42.1141,-70.9987 42.1116,-71.0022 42.1273,
        -70.9408 42.1513,-70.9315 42.1165,-70.916 42.1002)))',4326);

Name

ST_PointFromText — Construit une géométrie point à partir d'une représentation WKT et le SRID donné. Si aucun SRID n'est donné, la valeur par défaut est 0.

Synopsis

geometry ST_PointFromText(text WKT);

geometry ST_PointFromText(text WKT, integer srid);

Description

Construit un objet point ST_Geometry de PostGIS à partir de la représentation textuelle Well-Known de l'OGC. Si le SRID n'est pas donné, il prend par défaut la valeur inconnue (actuellement 0). Si la géométrie n'est pas une représentation de point WKT, retourne null. Si la représentation WKT n'est pas du tout valide, une erreur est générée.

[Note]

Il existe 2 versions de la fonction ST_PointFromText : la première ne prend pas de SRID en paramètre et retourne une geometry sans système de coordonnées. La seconde prend un SRID en second paramètre et retourne une ST_Geometry incluant un SRID dans ses métadonnées. Ce SRID doit obligatoirement exister dans la table spatial_ref_sys.

[Note]

Si vous êtes absolument sûrs que toutes les géométries WKT sont des points, ne pas utiliser cette fonction. Elle est plus lente que ST_GeomFromText à cause d'une étape de validation supplémentaire. Si le point doit être construit à partir de coordonnées latitude longitude et que la performance est recherchée, utiliser la fonction ST_MakePoint ou son équivalent OGC ST_Point.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2 - l'option SRID est issue des tests de conformité.

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 6.1.8

Exemples

SELECT ST_PointFromText('POINT(-71.064544 42.28787)');
SELECT ST_PointFromText('POINT(-71.064544 42.28787)', 4326);
        

Name

ST_PolygonFromText — Créé une Geometry depuis un WKT avec le SRID donné. Si le SRID n'est pas fourni, il sera défini par défaut à 0.

Synopsis

geometry ST_PolygonFromText(text WKT);

geometry ST_PolygonFromText(text WKT, integer srid);

Description

Crée une géométrie à partir de WKT avec le SRID donné. Si le SRID n'est pas donné, la valeur par défaut est 0. Retourne null si WKT n'est pas un polygone.

OGC SPEC 3.2.6.2 - l'option SRID est issue des tests de conformité

[Note]

Si vous êtes absolument sûrs que toutes les géométries WKT sont des polygones, ne pas utiliser cette fonction. Elle est plus lente que ST_GeomFromText à cause d'une étape de validation supplémentaire.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 8.3.6

Exemples

SELECT ST_PolygonFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,
-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');
st_polygonfromtext
------------------
010300000001000000050000006...


SELECT ST_PolygonFromText('POINT(1 2)') IS NULL as point_is_notpoly;

point_is_not_poly
----------
t

Voir aussi

ST_GeomFromText


Name

ST_WKTToSQL — Retourne un objet ST_Geometry à partir de sa représentation textuelle Well-Known Text (WKT). Alias pour ST_GeomFromText

Synopsis

geometry ST_WKTToSQL(text WKT);

Description

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.34

Voir aussi

ST_GeomFromText

7.8.2. Well-Known Binary (WKB)

  • ST_GeogFromWKB — Retourne un objet de type geography à partir de sa représentation binaire Well-Know Binary (WKB ou EWKB).
  • ST_GeomFromEWKB — Retourne un objet ST_Geometry à partir de sa représentation binaire étendue (Extended Well-Known Binary representation, EWKB).
  • ST_GeomFromWKB — Retourne un objet de type geometry à partir de sa représentation binaire Well-Know Binary (WKB) et d'un SRID optionnel.
  • ST_LineFromWKB — Construit une LINESTRING depuis la représentation binaire WKB et le srid donné
  • ST_LinestringFromWKB — Construit une géométrie depuis la représentation binaire WKB et le SRID donné.
  • ST_PointFromWKB — Construit une géométrie depuis la représentation binaire WKB et le SRID donné
  • ST_WKBToSQL — Retourne un objet ST_Geometry à partir de sa représentation textuelle Well-Known Binary (WKB). Alias pour ST_GeomFromWKB sans SRID

Name

ST_GeogFromWKB — Retourne un objet de type geography à partir de sa représentation binaire Well-Know Binary (WKB ou EWKB).

Synopsis

geography ST_GeogFromWKB(bytea wkb);

Description

ST_GeogFromWKB prend en paramètre une représentation binaire d'une géométrie (WKB ou EWKB) et crée une instance de type geography. Cette fonction assure le rôle de Geometry Factory en SQL.

Si le SRID n'est pas spécifié, la valeur 4326 est prise (WGS 84 long lat).

Cette méthode prend en charge les types Circular String et Curve.

Exemples

--Although bytea rep contains single \, these need to be escaped when inserting into a table
SELECT ST_AsText(
ST_GeogFromWKB(E'\\001\\002\\000\\000\\000\\002\\000\\000\\000\\037\\205\\353Q\\270~\\\\\\300\\323Mb\\020X\\231C@\\020X9\\264\\310~\\\\\\300)\\\\\\217\\302\\365\\230C@')
);
                                          st_astext
------------------------------------------------------
 LINESTRING(-113.98 39.198,-113.981 39.195)
(1 row)


Name

ST_GeomFromEWKB — Retourne un objet ST_Geometry à partir de sa représentation binaire étendue (Extended Well-Known Binary representation, EWKB).

Synopsis

geometry ST_GeomFromEWKB(bytea EWKB);

Description

Retourne un objet ST_Geometry à partir de sa représentation textuelle étendue OGC (Extended Well-Known Text representation, EWKT).

[Note]

Le format EWKB n'est pas une norme OGC, mais un format spécifique à PostGIS incluant l'identifiant du système de référence des coordonnées (SRID)

Amélioration : 2.0.0 introduction du support TIN et surfaces polyédriques.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Exemples

line string binary rep 0f LINESTRING(-71.160281 42.258729,-71.160837 42.259113,-71.161144 42.25932) in NAD 83 long lat (4269).

[Note]

NOTE : Si le paramètre standard_conforming_strings est à la valeur off, il est nécessaire d'échapper les caractères \ et ' avec \ et ". Ceci diffère de la représentation AsEWKB.

SELECT ST_GeomFromEWKB(E'\\001\\002\\000\\000 \\255\\020\\000\\000\\003\\000\\000\\000\\344J=
\\013B\\312Q\\300n\\303(\\010\\036!E@''\\277E''K
\\312Q\\300\\366{b\\235*!E@\\225|\\354.P\\312Q
\\300p\\231\\323e1!E@');
[Note]

Dans PostgreSQL 9.1+ - standard_conforming_strings est activé par défaut, alors que dans les versions précédentes il était désactivé. Vous pouvez modifier les valeurs par défaut selon vos besoins pour une seule requête ou au niveau de la base de données ou du serveur. Voici comment procéder avec standard_conforming_strings = on. Dans ce cas, nous échappons le ' avec le standard ansi ', mais les barres obliques ne sont pas échappées

set standard_conforming_strings = on;
SELECT ST_GeomFromEWKB('\001\002\000\000 \255\020\000\000\003\000\000\000\344J=\012\013B
    \312Q\300n\303(\010\036!E@''\277E''K\012\312Q\300\366{b\235*!E@\225|\354.P\312Q\012\300p\231\323e1')

Name

ST_GeomFromWKB — Retourne un objet de type geometry à partir de sa représentation binaire Well-Know Binary (WKB) et d'un SRID optionnel.

Synopsis

geometry ST_GeomFromWKB(bytea geom);

geometry ST_GeomFromWKB(bytea geom, integer srid);

Description

ST_GeomFromWKB prend en paramètre une représentation binaire d'une géométrie (WKB ou EWKB) et un SRID optionnel (SRID) et crée une instance de type geometry. Cette fonction assure le rôle de Geometry Factory en SQL. Alias pour ST_WKBToSQL.

Si le SRID n'est pas précisé, la valeur 0 (indéfini) est prise par défaut.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s3.2.7.2 - le paramètre optionnel est issu des tests de conformité

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.41

Cette méthode prend en charge les types Circular String et Curve.

Exemples

--Although bytea rep contains single \, these need to be escaped when inserting into a table
                -- unless standard_conforming_strings is set to on.
SELECT ST_AsEWKT(
ST_GeomFromWKB(E'\\001\\002\\000\\000\\000\\002\\000\\000\\000\\037\\205\\353Q\\270~\\\\\\300\\323Mb\\020X\\231C@\\020X9\\264\\310~\\\\\\300)\\\\\\217\\302\\365\\230C@',4326)
);
                                          st_asewkt
------------------------------------------------------
 SRID=4326;LINESTRING(-113.98 39.198,-113.981 39.195)
(1 row)

SELECT
  ST_AsText(
        ST_GeomFromWKB(
          ST_AsEWKB('POINT(2 5)'::geometry)
        )
  );
 st_astext
------------
 POINT(2 5)
(1 row)

Name

ST_LineFromWKB — Construit une LINESTRING depuis la représentation binaire WKB et le srid donné

Synopsis

geometry ST_LineFromWKB(bytea WKB);

geometry ST_LineFromWKB(bytea WKB, integer srid);

Description

ST_LineFromWKB prend en paramètre une représentation binaire d'une géométrie (WKB ou EWKB) et un SRID (SRID) et crée une instance du bon type géométrique, en l'occurence une LINESTRING. Cette fonction assure le rôle de Geometry Factory en SQL.

Si le SRID n'est pas précisé, la valeur 0 est prise par défaut. NULL est retourné si le paramètre bytea donné ne représente pas une LINESTRING.

[Note]

OGC SPEC 3.2.6.2 - option SRID issue des tests de conformité.

[Note]

Si vous savez que toutes vos géométries sont des LINESTRING, il est plus efficace d'utiliser ST_GeomFromWKB. Cette fonction appelle simplement ST_GeomFromWKB et ajoute une validation supplémentaire indiquant qu'elle renvoie une linestring.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 7.2.9

Exemples

SELECT ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))) AS aline,
                ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('POINT(1 2)'))) IS NULL AS null_return;
aline                            | null_return
------------------------------------------------
010200000002000000000000000000F ... | t
                

Name

ST_LinestringFromWKB — Construit une géométrie depuis la représentation binaire WKB et le SRID donné.

Synopsis

geometry ST_LinestringFromWKB(bytea WKB);

geometry ST_LinestringFromWKB(bytea WKB, integer srid);

Description

La fonction ST_LinestringFromWKB prend en paramètre une représentation binaire d'une géométrie (WKB ou EWKB) et un SRID (SRID) et crée une instance du bon type géométrique, en l'occurence une LINESTRING. Cette fonction assure le rôle de Geometry Factory en SQL.

Si le SRID n'est pas précisé, la valeur 0 est prise par défaut. NULL est retourné si le paramètre bytea donné ne représente pas une LINESTRING. Alias pour ST_LineFromWKB.

[Note]

OGC SPEC 3.2.6.2 - SRID optionnel issu des tests de conformité.

[Note]

Si vous savez que toutes vos géométries sont des LINESTRING, il est plus efficace d'utiliser ST_GeomFromWKB. Cette fonction appelle simplement ST_GeomFromWKB et ajoute une validation supplémentaire indiquant qu'elle renvoie une LINESTRING.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s3.2.6.2

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 7.2.9

Exemples

SELECT
  ST_LineStringFromWKB(
        ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))
  ) AS aline,
  ST_LinestringFromWKB(
        ST_AsBinary(ST_GeomFromText('POINT(1 2)'))
  ) IS NULL AS null_return;
   aline                            | null_return
------------------------------------------------
010200000002000000000000000000F ... | t

Name

ST_PointFromWKB — Construit une géométrie depuis la représentation binaire WKB et le SRID donné

Synopsis

geometry ST_GeomFromWKB(bytea geom);

geometry ST_GeomFromWKB(bytea geom, integer srid);

Description

ST_PointFromWKB prend en paramètre une représentation binaire d'une géométrie et un SRID (SRID) et crée une instance du bon type géométrique, en l'occurence une POINT . Cette fonction assure le rôle de Geometry Factory en SQL.

Si le SRID n'est pas précisé, la valeur 0 est prise par défaut. NULL est retourné si le paramètre bytea donné ne représente pas une géométrie POINT.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s3.2.7.2

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 6.1.9

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Exemples

SELECT
  ST_AsText(
        ST_PointFromWKB(
          ST_AsEWKB('POINT(2 5)'::geometry)
        )
  );
 st_astext
------------
 POINT(2 5)
(1 row)

SELECT
  ST_AsText(
        ST_PointFromWKB(
          ST_AsEWKB('LINESTRING(2 5, 2 6)'::geometry)
        )
  );
 st_astext
-----------

(1 row)

Name

ST_WKBToSQL — Retourne un objet ST_Geometry à partir de sa représentation textuelle Well-Known Binary (WKB). Alias pour ST_GeomFromWKB sans SRID

Synopsis

geometry ST_WKBToSQL(bytea WKB);

Description

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.36

Voir aussi

ST_GeomFromWKB

7.8.3. Autres formats

  • ST_Box2dFromGeoHash — Retourne une BOX2D à partir d'une chaîne GeoHash.
  • ST_GeomFromGeoHash — Retourne une geometry depuis une chaîne GeoHash.
  • ST_GeomFromGML — Prend en paramètre une représentation GML d'une géométrie et renvoie un objet PostGIS de type geometry
  • ST_GeomFromGeoJSON — Prend en entrée une géométrie au format geojson et renvoie un objet Postgis de type geometry
  • ST_GeomFromKML — Prend en entrée une géométrie au format KML et renvoie un objet Postgis de type geometry
  • ST_GeomFromTWKB — Crée une instance de geometry depuis une représentation de géométrie en TWKB ("Tiny Well-Known Binary").
  • ST_GMLToSQL — Retourne un objet de type ST_Geometry à partir de sa représentation GML. Alias pour ST_GeomFromGML
  • ST_LineFromEncodedPolyline — Crée une LineString depuis une polyligne encodée ( "Encoded Polyline" ).
  • ST_PointFromGeoHash — Retourne un point à partir d'une chaîne GeoHash.
  • ST_FromFlatGeobufToTable — Crée une table basée sur la structure des données FlatGeobuf.
  • ST_FromFlatGeobuf — Lit les données FlatGeobuf.

Name

ST_Box2dFromGeoHash — Retourne une BOX2D à partir d'une chaîne GeoHash.

Synopsis

box2d ST_Box2dFromGeoHash(text geohash, integer precision=full_precision_of_geohash);

Description

Retourne une BOX2D à partir d'une chaîne GeoHash.

Si aucune precision n'est spécifiée, ST_Box2dFromGeoHash retourne un BOX2D basé sur la précision complète de la chaîne GeoHash d'entrée.

Si precision est spécifié, ST_Box2dFromGeoHash utilise autant de caractère du GeoHash pour créer la BOX2D. Une précision plus basse retourne des BOXD2 plus grandes, et une valeur plus haute améliore la précision.

Disponibilité : 2.1.0

Exemples

SELECT ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0');

                st_geomfromgeohash
--------------------------------------------------
 BOX(-115.172816 36.114646,-115.172816 36.114646)

SELECT ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 0);

 st_box2dfromgeohash
----------------------
 BOX(-180 -90,180 90)

 SELECT ST_Box2dFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 10);
                            st_box2dfromgeohash
---------------------------------------------------------------------------
 BOX(-115.17282128334 36.1146408319473,-115.172810554504 36.1146461963654)

                

Name

ST_GeomFromGeoHash — Retourne une geometry depuis une chaîne GeoHash.

Synopsis

geometry ST_GeomFromGeoHash(text geohash, integer precision=full_precision_of_geohash);

Description

Retourne une Geometry à partir d'une chaîne GeoHash. La géométrie sera un polygone représentant les limites du GeoHash.

Si aucune precision n'est spécifiée, ST_GeomFromGeoHash retourne un polygone basé sur la précision complète de la chaîne GeoHash en entrée.

Si precision est spécifié, ST_GeomFromGeoHash utilise autant de caractère du GeoHash pour créer le polygone.

Disponibilité : 2.1.0

Exemples

SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0'));
                                                        st_astext
--------------------------------------------------------------------------------------------------------------------------
 POLYGON((-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646))

SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 4));
                                                          st_astext
------------------------------------------------------------------------------------------------------------------------------
 POLYGON((-115.3125 36.03515625,-115.3125 36.2109375,-114.9609375 36.2109375,-114.9609375 36.03515625,-115.3125 36.03515625))

SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 10));
                                                                                       st_astext
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 POLYGON((-115.17282128334 36.1146408319473,-115.17282128334 36.1146461963654,-115.172810554504 36.1146461963654,-115.172810554504 36.1146408319473,-115.17282128334 36.1146408319473))

                

Name

ST_GeomFromGML — Prend en paramètre une représentation GML d'une géométrie et renvoie un objet PostGIS de type geometry

Synopsis

geometry ST_GeomFromGML(text geomgml);

geometry ST_GeomFromGML(text geomgml, integer srid);

Description

Construit un objet PostGIS ST_Geometry à partir d'une représentation GML OGC.

La fonction ST_GeomFromGML fonctionne uniquement avec le fragment GML représentant la géométrie. Elle renvoie une error si un document GML complet est utilisé.

version OGC GML supportée :

  • GML 3.2.1 Namespace

  • GML 3.1.1 Simple Features profile SF-2 (with GML 3.1.0 and 3.0.0 backward compatibility)

  • GML 2.1.2

OGC GML standards, cf : http://www.opengeospatial.org/standards/gml :

Disponibilité : 1.5, nécessite libxml2 1.6+

Amélioration : 2.0.0 introduction du support TIN et surfaces polyédriques.

Amélioration : 2.0.0 paramètre optionnel de srid par défaut ajouté.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Le format GML supporte des objets de dimensions différentes (2D et 3D dans la même MultiGeometry par exemple). PostGIS ne supportant pas cela, la fonction convertit toute la géometrie en 2D si une seule coordonnée Z manque.

Le format GML supporte des objets ayant des SRID différents dans la même MultiGeometry. PostGIS ne supportant pas cela, ST_GeomFromGML reprojète toutes les sous géométries dans le SRS du noeud racine. Si aucun attribut srsName n'est disponible pour le noeud racine GML, la fonction renvoie une erreur.

La fonction ST_GeomFromGML n'impose pas d'utiliser un espace de noms GML explicite. Pour les usages courants, il peut être ignoré. Il est en revanche nécessaire en cas d'utilisation de la fonctionnalité XLink dans le GML.

[Note]

La fonction ST_GeomFromGML ne supporte pas les géométries de type SQL/MM courbes.

Exemple : une géométrie unique avec srsName

SELECT ST_GeomFromGML($$
    <gml:LineString xmlns:gml="http://www.opengis.net/gml"
                        srsName="EPSG:4269">
        <gml:coordinates>
            -71.16028,42.258729 -71.160837,42.259112 -71.161143,42.25932
        </gml:coordinates>
    </gml:LineString>
$$);

                

Exemple - utilisation de XLink

SELECT ST_GeomFromGML($$
    <gml:LineString xmlns:gml="http://www.opengis.net/gml"
            xmlns:xlink="http://www.w3.org/1999/xlink"
            srsName="urn:ogc:def:crs:EPSG::4269">
        <gml:pointProperty>
            <gml:Point gml:id="p1"
><gml:pos
>42.258729 -71.16028</gml:pos
></gml:Point>
        </gml:pointProperty>
        <gml:pos
>42.259112 -71.160837</gml:pos>
        <gml:pointProperty>
            <gml:Point xlink:type="simple" xlink:href="#p1"/>
        </gml:pointProperty>
    </gml:LineString>
$$);

                

Exemple - Surface Polyédrique

SELECT ST_AsEWKT(ST_GeomFromGML('
<gml:PolyhedralSurface xmlns:gml="http://www.opengis.net/gml">
<gml:polygonPatches>
  <gml:PolygonPatch>
    <gml:exterior>
      <gml:LinearRing
><gml:posList srsDimension="3"
>0 0 0 0 0 1 0 1 1 0 1 0 0 0 0</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing
><gml:posList srsDimension="3"
>0 0 0 0 1 0 1 1 0 1 0 0 0 0 0</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing
><gml:posList srsDimension="3"
>0 0 0 1 0 0 1 0 1 0 0 1 0 0 0</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing
><gml:posList srsDimension="3"
>1 1 0 1 1 1 1 0 1 1 0 0 1 1 0</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing
><gml:posList srsDimension="3"
>0 1 0 0 1 1 1 1 1 1 1 0 0 1 0</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
  <gml:PolygonPatch>
    <gml:exterior>
        <gml:LinearRing
><gml:posList srsDimension="3"
>0 0 1 1 0 1 1 1 1 0 1 1 0 0 1</gml:posList
></gml:LinearRing>
    </gml:exterior>
  </gml:PolygonPatch>
</gml:polygonPatches>
</gml:PolyhedralSurface
>'));

-- result --
 POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
 ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
 ((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
 ((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
 ((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
 ((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)))
                

Name

ST_GeomFromGeoJSON — Prend en entrée une géométrie au format geojson et renvoie un objet Postgis de type geometry

Synopsis

geometry ST_GeomFromGeoJSON(text geomjson);

geometry ST_GeomFromGeoJSON(json geomjson);

geometry ST_GeomFromGeoJSON(jsonb geomjson);

Description

Construit un objet Postgis de type geometry à partir d'une représentation GeoJSON.

La fonction ST_GeomFromGeoJSON fonctionne uniquement avec le fragment JSON représentant la géométrie. Elle renvoie une erreur si un document JSON complet est utilisé.

Amélioré : 3.0.0 La géométrie parsée prend par défaut la valeur SRID=4326 si elle n'est pas spécifiée autrement.

Amélioration : 2.5.0 peut maintenant accepter json et jsonb comme entrées.

Disponibilité : 2.0.0 nécessite JSON-C >= 0.9

[Note]

Si JSON-C n'est pas disponible sur le système, une erreur est renvoyée. Pour activer JSON-C, lancer configure --with-jsondir=/path/to/json-c. Cf. Section 2.2.3, “Configuration de la compilation” pour plus de détails.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

SELECT ST_AsText(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-48.23456,20.12345]}')) As wkt;
wkt
------
POINT(-48.23456 20.12345)
-- a 3D linestring
SELECT ST_AsText(ST_GeomFromGeoJSON('{"type":"LineString","coordinates":[[1,2,3],[4,5,6],[7,8,9]]}')) As wkt;

wkt
-------------------
LINESTRING(1 2,4 5,7 8)

Name

ST_GeomFromKML — Prend en entrée une géométrie au format KML et renvoie un objet Postgis de type geometry

Synopsis

geometry ST_GeomFromKML(text geomkml);

Description

Construit un objet Postgis de type geometry à partir d'une représentation OGC KML.

La fonction ST_GeomFromKML fonctionne uniquement avec le fragment KML représentant la géométrie. Elle renvoie une erreur si un document KML complet est utilisé.

versions OGC KML supportées :

  • KML 2.2.0 Namespace

OGC KML standards, cf : http://www.opengeospatial.org/standards/kml :

Disponibilité : 1.5, nécessite libxml2 2.6+

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

[Note]

La fonction ST_GeomFromGML ne supporte pas les géométries de type SQL/MM courbes.

Exemple : une géométrie unique avec srsName

SELECT ST_GeomFromKML($$
    <LineString>
        <coordinates
>-71.1663,42.2614
            -71.1667,42.2616</coordinates>
    </LineString>
$$);

        

Name

ST_GeomFromTWKB — Crée une instance de geometry depuis une représentation de géométrie en TWKB ("Tiny Well-Known Binary").

Synopsis

geometry ST_GeomFromTWKB(bytea twkb);

Description

La fonction ST_GeomFromTWKB prend une représentation de géométrie TWKB ("Tiny Well-Known Binary") et crée une instance du type de géométrie approprié.

Exemples

SELECT ST_AsText(ST_GeomFromTWKB(ST_AsTWKB('LINESTRING(126 34, 127 35)'::geometry)));

         st_astext
-----------------------------
 LINESTRING(126 34, 127 35)
(1 row)


SELECT ST_AsEWKT(
  ST_GeomFromTWKB(E'\\x620002f7f40dbce4040105')
);
                                          st_asewkt
------------------------------------------------------
LINESTRING(-113.98 39.198,-113.981 39.195)
(1 row)

Voir aussi

ST_AsTWKB


Name

ST_GMLToSQL — Retourne un objet de type ST_Geometry à partir de sa représentation GML. Alias pour ST_GeomFromGML

Synopsis

geometry ST_GMLToSQL(text geomgml);

geometry ST_GMLToSQL(text geomgml, integer srid);

Description

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.50 (sauf pour le support des courbes).

Disponibilité : 1.5, nécessite libxml2 1.6+

Amélioration : 2.0.0 introduction du support TIN et surfaces polyédriques.

Amélioration : 2.0.0 paramètre optionnel de srid par défaut ajouté.


Name

ST_LineFromEncodedPolyline — Crée une LineString depuis une polyligne encodée ( "Encoded Polyline" ).

Synopsis

geometry ST_LineFromEncodedPolyline(text polyline, integer precision=5);

Description

Crée une LineString à partir d'une chaîne de polyligne encodée ( "Encoded Polyline").

L'option precision spécifie le nombre de décimales qui seront préservées dans la polyligne encodée. La valeur doit être la même à l'encodage et au décodage, sinon les coordonnées seront incorrectes.

Voir http://developers.google.com/maps/documentation/utilities/polylinealgorithm

Disponibilité : 2.2.0

Exemples

-- Create a line string from a polyline
SELECT ST_AsEWKT(ST_LineFromEncodedPolyline('_p~iF~ps|U_ulLnnqC_mqNvxq`@'));
-- result --
SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)

-- Select different precision that was used for polyline encoding
SELECT ST_AsEWKT(ST_LineFromEncodedPolyline('_p~iF~ps|U_ulLnnqC_mqNvxq`@',6));
-- result --
SRID=4326;LINESTRING(-12.02 3.85,-12.095 4.07,-12.6453 4.3252)

    

Name

ST_PointFromGeoHash — Retourne un point à partir d'une chaîne GeoHash.

Synopsis

point ST_PointFromGeoHash(text geohash, integer precision=full_precision_of_geohash);

Description

Retourne une point à partir d'une chaîne GeoHash. Le point représente le centre du GeoHash.

Si aucune precision n'est spécifiée, ST_PointFromGeoHash retourne une un point basé sur la précision complète de la chaîne GeoHash en entrée.

Si precision est spécifié, ST_PointFromGeoHash utilise autant de caractère du GeoHash pour créer le point.

Disponibilité : 2.1.0

Exemples

SELECT ST_AsText(ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0'));
          st_astext
------------------------------
 POINT(-115.172816 36.114646)

SELECT ST_AsText(ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 4));
             st_astext
-----------------------------------
 POINT(-115.13671875 36.123046875)

SELECT ST_AsText(ST_PointFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 10));
                 st_astext
-------------------------------------------
 POINT(-115.172815918922 36.1146435141563)

                

Name

ST_FromFlatGeobufToTable — Crée une table basée sur la structure des données FlatGeobuf.

Synopsis

void ST_FromFlatGeobufToTable(text schemaname, text tablename, bytea FlatGeobuf input data);

Description

Crée une table basée sur la structure des données FlatGeobuf. (http://flatgeobuf.org).

schema Nom du schéma.

table Nom de la table.

data Données FlatGeobuf en entrée.

Disponibilité : 3.2.0


Name

ST_FromFlatGeobuf — Lit les données FlatGeobuf.

Synopsis

setof anyelement ST_FromFlatGeobuf(anyelement Table reference, bytea FlatGeobuf input data);

Description

Lit les données FlatGeobuf (http://flatgeobuf.org). REMARQUE : les chaînes binaires de PostgreSQL ne peuvent pas dépasser 1 Go.

tabletype référence à un type de table.

data données d'entrée FlatGeobuf.

Disponibilité : 3.2.0

7.9. Export de géométrie

Abstract

Ces fonctions convertissent les objets géométriques en divers formats textuels ou binaires.

7.9.1. Well-Known Text (WKT)

  • ST_AsEWKT — Renvoie la représentation Well-Known Text (WKT) de la géométrie avec les métadonnées SRID.
  • ST_AsText — Renvoie la représentation Well-Known Text (WKT) de la géométrie/geography sans métadonnées SRID.

Name

ST_AsEWKT — Renvoie la représentation Well-Known Text (WKT) de la géométrie avec les métadonnées SRID.

Synopsis

text ST_AsEWKT(geometry g1);

text ST_AsEWKT(geometry g1, integer maxdecimaldigits=15);

text ST_AsEWKT(geography g1);

text ST_AsEWKT(geography g1, integer maxdecimaldigits=15);

Description

Renvoie la représentation Well-Known Text de la géométrie préfixée par le SRID. L'argument facultatif maxdecimaldigits peut être utilisé pour réduire le nombre maximal de chiffres décimaux après la virgule flottante utilisés dans la sortie (valeur par défaut : 15).

Pour effectuer la conversion inverse de la représentation EWKT en géométrie PostGIS, utilisez ST_GeomFromEWKT.

[Warning]

L'utilisation du paramètre maxdecimaldigits peut rendre la géométrie de sortie invalide. Pour éviter cela, utilisez d'abord ST_ReducePrecision avec une taille de grille appropriée.

[Note]

La spécification WKT ne comprend pas le SRID. Pour obtenir le format WKT de l'OGC, utilisez ST_AsText.

[Warning]

Le format WKT ne maintient pas la précision. Pour éviter la troncature flottante, utilisez le format ST_AsBinary ou ST_AsEWKB pour le transport.

Amélioré : support du paramètre optionnel de précision dans la version 3.1.0.

Amélioration : la version 2.0.0 a introduit la prise en charge de la geography, des surfaces polyédriques, des triangles et des TIN.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Exemples

SELECT ST_AsEWKT('0103000020E61000000100000005000000000000
                        000000000000000000000000000000000000000000000000000000
                        F03F000000000000F03F000000000000F03F000000000000F03
                        F000000000000000000000000000000000000000000000000'::geometry);

                   st_asewkt
--------------------------------
SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0 0))
(1 row)

SELECT ST_AsEWKT('0108000080030000000000000060E30A4100000000785C0241000000000000F03F0000000018
E20A4100000000485F024100000000000000400000000018
E20A4100000000305C02410000000000000840')

--st_asewkt---
CIRCULARSTRING(220268 150415 1,220227 150505 2,220227 150406 3)

Name

ST_AsText — Renvoie la représentation Well-Known Text (WKT) de la géométrie/geography sans métadonnées SRID.

Synopsis

text ST_AsText(geometry g1);

text ST_AsText(geometry g1, integer maxdecimaldigits = 15);

text ST_AsText(geography g1);

text ST_AsText(geography g1, integer maxdecimaldigits = 15);

Description

Renvoie la représentation OGC Well-Known Text (WKT) de la géométrie/geography. L'argument facultatif maxdecimaldigits peut être utilisé pour limiter le nombre de chiffres après la virgule dans les ordonnées de sortie (valeur par défaut : 15).

Pour effectuer la conversion inverse de la représentation WKT en géométrie PostGIS, utilisez ST_GeomFromText.

[Note]

La représentation WKT standard de l'OGC n'inclut pas le SRID. Pour inclure le SRID dans la représentation de sortie, utilisez la fonction PostGIS non standard ST_AsEWKT

[Warning]

La représentation textuelle des nombres en WKT peut ne pas maintenir une précision totale en virgule flottante. Pour garantir une précision totale pour le stockage ou le transport des données, il est préférable d'utiliser le format Well-Known Binary (WKB) (voir ST_AsBinary et maxdecimaldigits).

[Warning]

L'utilisation du paramètre maxdecimaldigits peut rendre la géométrie de sortie invalide. Pour éviter cela, utilisez d'abord ST_ReducePrecision avec une taille de grille appropriée.

Disponibilité : 1.5 - le support de la geography a été introduit.

Amélioration : 2.5 - introduction de la précision des paramètres optionnels.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.25

Cette méthode prend en charge les types Circular String et Curve.

Exemples

SELECT ST_AsText('01030000000100000005000000000000000000
000000000000000000000000000000000000000000000000
F03F000000000000F03F000000000000F03F000000000000F03
F000000000000000000000000000000000000000000000000');

    st_astext
--------------------------------
 POLYGON((0 0,0 1,1 1,1 0,0 0))

La sortie de précision complète est la valeur par défaut.

SELECT ST_AsText('POINT(111.1111111 1.1111111)'));
    st_astext
------------------------------
 POINT(111.1111111 1.1111111)

L'argument maxdecimaldigits peut être utilisé pour limiter la précision de la sortie.

SELECT ST_AsText('POINT(111.1111111 1.1111111)'), 2);
    st_astext
--------------------
 POINT(111.11 1.11)

7.9.2. Well-Known Binary (WKB)

  • ST_AsBinary — Renvoie la représentation OGC/ISO Well-Known Binary (WKB) de la géométrie/geography sans les métadonnées SRID.
  • ST_AsEWKB — Renvoie la représentation Extended Well-Known Binary (EWKB) de la géométrie avec les métadonnées SRID.
  • ST_AsHEXEWKB — Renvoie une géométrie au format HEXEWKB (en tant que texte) en utilisant l'encodage little-endian (NDR) ou big-endian (XDR).

Name

ST_AsBinary — Renvoie la représentation OGC/ISO Well-Known Binary (WKB) de la géométrie/geography sans les métadonnées SRID.

Synopsis

bytea ST_AsBinary(geometry g1);

bytea ST_AsBinary(geometry g1, text NDR_or_XDR);

bytea ST_AsBinary(geography g1);

bytea ST_AsBinary(geography g1, text NDR_or_XDR);

Description

Renvoie la représentation OGC/ISO Well-Known Binary (WKB) de la géométrie. La première variante de fonction propose par défaut un encodage utilisant l'endian de la machine serveur. La deuxième variante de la fonction prend un argument texte spécifiant l'encodage endian, soit little-endian ('NDR') ou big-endian ('XDR').

Le format WKB est utile pour lire les données géométriques de la base de données et maintenir une précision numérique totale. Cela permet d'éviter les arrondis de précision qui peuvent se produire avec les formats texte tels que WKT.

Pour effectuer la conversion inverse de la géométrie WKB en géométrie PostGIS, utilisez ST_GeomFromWKB.

[Note]

Le format WKB de l'OGC/ISO ne comprend pas le SRID. Pour obtenir le format EWKB qui inclut le SRID, utilisez ST_AsEWKB

[Note]

Le comportement par défaut dans PostgreSQL 9.0 a été modifié pour sortir bytea en encodage hexagonal. Si vos outils GUI nécessitent l'ancien comportement, alors SET bytea_output='escape' dans votre base de données.

Amélioration : 2.0.0 introduction du support TIN, Triangles et surfaces polyédriques.

Amélioration : 2.0.0 le support pour des dimensions de coordonnées plus élevées a été introduit.

Amélioration : 2.0.0 le support pour spécifier endian avec geography a été introduit.

Disponibilité : 1.5.0 Le support de la géographie a été introduit.

Modifié : 2.0.0 Les entrées de cette fonction ne peuvent pas être inconnues, elles doivent être des géométries. Des constructions telles que ST_AsBinary('POINT(1 2)') ne sont plus valides et vous obtiendrez une erreur de type n st_asbinary(unknown) is not unique. Un code comme celui-là doit être changé en ST_AsBinary('POINT(1 2)'::geometry);. Si cela n'est pas possible, alors installez legacy.sql.

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.1

Cette méthode implémente la spécification SQL/MM. SQL-MM 3 : 5.1.37

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));

                   st_asbinary
--------------------------------
\x01030000000100000005000000000000000000000000000000000000000000000000000000000000
000000f03f000000000000f03f000000000000f03f000000000000f03f0000000000000000000000
00000000000000000000000000
SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326), 'XDR');
                   st_asbinary
--------------------------------
\x000000000300000001000000050000000000000000000000000000000000000000000000003ff000
00000000003ff00000000000003ff00000000000003ff00000000000000000000000000000000000
00000000000000000000000000

Name

ST_AsEWKB — Renvoie la représentation Extended Well-Known Binary (EWKB) de la géométrie avec les métadonnées SRID.

Synopsis

bytea ST_AsEWKB(geometry g1);

bytea ST_AsEWKB(geometry g1, text NDR_or_XDR);

Description

Renvoie la représentation Extended Well-Known Binary (EWKB) de la géométrie avec les métadonnées SRID. La première variante de la fonction utilise par défaut l'encodage endian de la machine du serveur. La deuxième variante de la fonction prend un argument texte spécifiant l'encodage endian, soit little-endian ('NDR') ou big-endian ('XDR').

Le format WKB est utile pour lire les données géométriques de la base de données et maintenir une précision numérique totale. Cela permet d'éviter les arrondis de précision qui peuvent se produire avec les formats texte tels que WKT.

Pour effectuer la conversion inverse de la géométrie EWKB en géométrie PostGIS, utilisez ST_GeomFromEWKB.

[Note]

Pour obtenir le format OGC/ISO WKB, utilisez ST_AsBinary. Notez que le format OGC/ISO WKB ne comprend pas le SRID.

Amélioration : 2.0.0 introduction du support TIN, Triangles et surfaces polyédriques.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Exemples

SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));

                   st_asewkb
--------------------------------
\x0103000020e610000001000000050000000000000000000000000000000000000000000000000000
00000000000000f03f000000000000f03f000000000000f03f000000000000f03f00000000000000
0000000000000000000000000000000000
SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326), 'XDR');
                   st_asewkb
--------------------------------
\x0020000003000010e600000001000000050000000000000000000000000000000000000000000000
003ff00000000000003ff00000000000003ff00000000000003ff000000000000000000000000000
0000000000000000000000000000000000
                

Name

ST_AsHEXEWKB — Renvoie une géométrie au format HEXEWKB (en tant que texte) en utilisant l'encodage little-endian (NDR) ou big-endian (XDR).

Synopsis

text ST_AsHEXEWKB(geometry g1, text NDRorXDR);

text ST_AsHEXEWKB(geometry g1);

Description

Renvoie une géométrie au format HEXEWKB (en tant que texte) en utilisant l'encodage little-endian (NDR) ou big-endian (XDR). Si aucun encodage n'est spécifié, NDR est utilisé.

[Note]

Disponibilité : 1.2.2

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

Exemples

SELECT ST_AsHEXEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
                which gives same answer as

                SELECT ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326)::text;

                st_ashexewkb
                --------
                0103000020E6100000010000000500
                00000000000000000000000000000000
                00000000000000000000000000000000F03F
                000000000000F03F000000000000F03F000000000000F03
                F000000000000000000000000000000000000000000000000

7.9.3. Autres formats

  • ST_AsEncodedPolyline — Renvoie une polyligne encodée à partir d'une géométrie LineString.
  • ST_AsFlatGeobuf — Renvoie une représentation FlatGeobuf d'un ensemble de lignes.
  • ST_AsGeobuf — Retourne une représentation Geobuf d'un ensemble de lignes.
  • ST_AsGeoJSON — Renvoyer une géométrie ou un élément au format GeoJSON.
  • ST_AsGML — Renvoyer la géométrie en tant qu'élément GML version 2 ou 3.
  • ST_AsKML — Renvoyer la géométrie sous forme d'élément KML.
  • ST_AsLatLonText — Renvoie la représentation en degrés, minutes et secondes du point donné.
  • ST_AsMARC21 — Renvoie la géométrie sous forme d'enregistrement MARC21/XML avec un champ de données géographiques (034).
  • ST_AsMVTGeom — Transforme une géométrie dans l'espace de coordonnées d'une tuile MVT.
  • ST_AsMVT — Fonction d'agrégation renvoyant une représentation MVT d'un ensemble de lignes.
  • ST_AsSVG — Renvoie les données de chemin SVG pour une géométrie.
  • ST_AsTWKB — Renvoie la géométrie sous forme de TWKB, diminutif de "Tiny Well-Known Binary"
  • ST_AsX3D — Renvoie une géométrie au format X3D xml node element : ISO-IEC-19776-1.2-X3DEncodings-XML
  • ST_GeoHash — Retourne une représentation GeoHash de la géométrie.

Name

ST_AsEncodedPolyline — Renvoie une polyligne encodée à partir d'une géométrie LineString.

Synopsis

text ST_AsEncodedPolyline(geometry geom, integer precision=5);

Description

Renvoie la géométrie sous forme de polyligne encodée. Ce format est utilisé par Google Maps avec précision=5 et par Open Source Routing Machine avec précision=5 et 6.

L'option precision spécifie le nombre de décimales qui seront préservées dans la polyligne encodée. La valeur doit être la même à l'encodage et au décodage, sinon les coordonnées seront incorrectes.

Disponibilité : 2.2.0

Exemples

Base

SELECT ST_AsEncodedPolyline(GeomFromEWKT('SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
        --result--
        |_p~iF~ps|U_ulLnnqC_mqNvxq`@
        

Utiliser en conjonction avec geography linestring et geography segmentize, et mettre sur google maps

-- the SQL for Boston to San Francisco, segments every 100 KM
        SELECT ST_AsEncodedPolyline(
                ST_Segmentize(
                        ST_GeogFromText('LINESTRING(-71.0519 42.4935,-122.4483 37.64)'),
                                100000)::geometry) As encodedFlightPath;

Le javascript ressemblera à quelque chose comme ceci où la variable $ est remplacée par le résultat de la requête

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=geometry"
></script>
<script type="text/javascript">
         flightPath = new google.maps.Polyline({
                        path:  google.maps.geometry.encoding.decodePath("$encodedFlightPath"),
                        map: map,
                        strokeColor: '#0000CC',
                        strokeOpacity: 1.0,
                        strokeWeight: 4
                });
</script>


Name

ST_AsFlatGeobuf — Renvoie une représentation FlatGeobuf d'un ensemble de lignes.

Synopsis

bytea ST_AsFlatGeobuf(anyelement set row);

bytea ST_AsFlatGeobuf(anyelement row, bool index);

bytea ST_AsFlatGeobuf(anyelement row, bool index, text geom_name);

Description

Renvoie une représentation FlatGeobuf (http://flatgeobuf.org) d'un ensemble de lignes correspondant à une FeatureCollection. REMARQUE : les octets PostgreSQL ne peuvent pas dépasser 1 Go.

row données de ligne avec au moins une colonne de géométrie.

index basculer la création d'un index spatial. La valeur par défaut est false.

geom_name est le nom de la colonne de géométrie dans les données de la ligne. Si elle est NULL, elle prendra par défaut la première colonne de géométrie trouvée.

Disponibilité : 3.2.0


Name

ST_AsGeobuf — Retourne une représentation Geobuf d'un ensemble de lignes.

Synopsis

bytea ST_AsGeobuf(anyelement set row);

bytea ST_AsGeobuf(anyelement row, text geom_name);

Description

Renvoie une représentation Geobuf (https://github.com/mapbox/geobuf) d'un ensemble de lignes correspondant à une FeatureCollection. Chaque géométrie en entrée est analysée afin de déterminer la précision maximale pour un stockage optimal. Notez que Geobuf dans sa forme actuelle ne peut pas être streamé, donc la sortie complète sera assemblée en mémoire.

row données de ligne avec au moins une colonne de géométrie.

geom_name est le nom de la colonne de géométrie dans les données de la ligne. Si elle est NULL, elle prendra par défaut la première colonne de géométrie trouvée.

Disponibilité : 2.4.0

Exemples

SELECT encode(ST_AsGeobuf(q, 'geom'), 'base64')
    FROM (SELECT ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))') AS geom) AS q;
 st_asgeobuf
----------------------------------
 GAAiEAoOCgwIBBoIAAAAAgIAAAE=


                

Name

ST_AsGeoJSON — Renvoyer une géométrie ou un élément au format GeoJSON.

Synopsis

text ST_AsGeoJSON(record feature, text geom_column="", integer maxdecimaldigits=9, boolean pretty_bool=false, text id_column='');

text ST_AsGeoJSON(geometry geom, integer maxdecimaldigits=9, integer options=8);

text ST_AsGeoJSON(geography geog, integer maxdecimaldigits=9, integer options=0);

Description

Renvoie une géométrie sous forme d'objet GeoJSON "geometry", ou une ligne sous forme d'objet GeoJSON "feature".

Les représentations de géométrie et d'entités GeoJSON résultantes sont conformes aux spécifications GeoJSON RFC 7946, sauf lorsque les géométries analysées sont référencées avec un CRS autre que la longitude et la latitude WGS84 (EPSG:4326, urn:ogc:def:crs:OGC::CRS84) ; l'objet géométrique GeoJSON aura alors un identifiant SRID CRS court attaché par défaut. Les géométries 2D et 3D sont toutes deux supportées. GeoJSON ne supporte que les types de géométrie SFS 1.1 (pas de support pour les courbes par exemple).

Le paramètre geom_column est utilisé pour faire la distinction entre plusieurs colonnes géométriques. S'il est omis, la première colonne géométrique de l'enregistrement sera déterminée. Inversement, l'utilisation de ce paramètre permet d'économiser les recherches sur le type de colonne.

L'argument maxdecimaldigits peut être utilisé pour réduire le nombre maximum de décimales utilisées dans la sortie (par défaut 9). Si vous utilisez EPSG:4326 et que vous sortez la géométrie uniquement pour l'affichage, maxdecimaldigits=6 peut être un bon choix pour de nombreuses cartes.

[Warning]

L'utilisation du paramètre maxdecimaldigits peut rendre la géométrie de sortie invalide. Pour éviter cela, utilisez d'abord ST_ReducePrecision avec une taille de grille appropriée.

L'argument options peut être utilisé pour ajouter BBOX ou CRS dans la sortie GeoJSON :

  • 0 : signifie aucune option

  • 1 : GeoJSON BBOX

  • 2 : GeoJSON Short CRS (e.g. EPSG:4326)

  • 4 : GeoJSON Long CRS (e.g. urn:ogc:def:crs:EPSG::4326)

  • 8 : GeoJSON Short CRS si pas EPSG:4326 (par défaut)

Le paramètre id_column est utilisé pour définir le membre "id" des caractéristiques GeoJSON renvoyées. Conformément à la RFC GeoJSON, ce paramètre DEVRAIT être utilisé chaque fois qu'un élément a un identifiant couramment utilisé, tel qu'une clé primaire. Si elle n'est pas spécifiée, les entités produites n'auront pas de membre "id" et toutes les colonnes autres que la géométrie, y compris les clés potentielles, se retrouveront dans le membre "properties" de l'entité.

La spécification GeoJSON indique que les polygones sont orientés selon la règle de la main droite, et certains clients exigent cette orientation. Ceci peut être assuré en utilisant ST_ForcePolygonCCW . La spécification exige également que la géométrie soit dans le système de coordonnées WGS84 (SRID = 4326). Si nécessaire, la géométrie peut être projetée en WGS84 en utilisant ST_Transform : ST_Transform( geom, 4326 ).

GeoJSON peut être testé et visualisé en ligne sur geojson.io et geojsonlint.com. Il est largement pris en charge par les frameworks de cartographie web :

Disponibilité : 1.3.4

Disponibilité : 1.5.0 Le support de la géographie a été introduit.

Modifié : 2.0.0 supporte les args par défaut et les args nommés.

Modifié : la version 3.0.0 prend en charge les enregistrements en tant que données d'entrée

Modifié : 3.0.0 SRID de sortie si ce n'est pas EPSG:4326.

Modifié : la version 3.5.0 permet de spécifier la colonne contenant l'identifiant de l'élément

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

Générer une FeatureCollection :

SELECT json_build_object(
    'type', 'FeatureCollection',
    'features', json_agg(ST_AsGeoJSON(t.*, id_column =
> 'id')::json)
    )
FROM ( VALUES (1, 'one', 'POINT(1 1)'::geometry),
              (2, 'two', 'POINT(2 2)'),
              (3, 'three', 'POINT(3 3)')
     ) as t(id, name, geom);
{"type" : "FeatureCollection", "features" : [{"type": "Feature", "geometry": {"type":"Point","coordinates":[1,1]}, "id": 1, "properties": {"name": "one"}}, {"type": "Feature", "geometry": {"type":"Point","coordinates":[2,2]}, "id": 2, "properties": {"name": "two"}}, {"type": "Feature", "geometry": {"type":"Point","coordinates":[3,3]}, "id": 3, "properties": {"name": "three"}}]}

Génère une Feature :

SELECT ST_AsGeoJSON(t.*, id_column =
> 'id')
FROM (VALUES (1, 'one', 'POINT(1 1)'::geometry)) AS t(id, name, geom);
st_asgeojson
-----------------------------------------------------------------------------------------------------------------
 {"type": "Feature", "geometry": {"type":"Point","coordinates":[1,1]}, "id": 1, "properties": {"name": "one"}}

N'oubliez pas de transformer vos données en longitude et latitude WGS84 pour vous conformer à la spécification GeoJSON :

SELECT ST_AsGeoJSON(ST_Transform(geom,4326)) from fe_edges limit 1;
st_asgeojson
-----------------------------------------------------------------------------------------------------------

{"type":"MultiLineString","coordinates":[[[-89.734634999999997,31.492072000000000],
[-89.734955999999997,31.492237999999997]]]}

Les géométries 3D sont prises en charge :

SELECT ST_AsGeoJSON('LINESTRING(1 2 3, 4 5 6)');
{"type":"LineString","coordinates":[[1,2,3],[4,5,6]]}

Options argument can be used to add BBOX and CRS in GeoJSON output:

SELECT ST_AsGeoJSON(ST_SetSRID('POINT(1 1)'::geometry, 4326), 9, 4|1);
{"type":"Point","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"bbox":[1.000000000,1.000000000,1.000000000,1.000000000],"coordinates":[1,1]}

Name

ST_AsGML — Renvoyer la géométrie en tant qu'élément GML version 2 ou 3.

Synopsis

text ST_AsGML(geometry geom, integer maxdecimaldigits=15, integer options=0);

text ST_AsGML(geography geog, integer maxdecimaldigits=15, integer options=0, text nprefix=null, text id=null);

text ST_AsGML(integer version, geometry geom, integer maxdecimaldigits=15, integer options=0, text nprefix=null, text id=null);

text ST_AsGML(integer version, geography geog, integer maxdecimaldigits=15, integer options=0, text nprefix=null, text id=null);

Description

Renvoie la géométrie sous la forme d'un élément GML (Geography Markup Language). Le paramètre de version, s'il est spécifié, peut être 2 ou 3. Si aucun paramètre de version n'est spécifié, la valeur par défaut est 2. L'argument maxdecimaldigits peut être utilisé pour réduire le nombre maximum de décimales utilisées dans la sortie (15 par défaut).

[Warning]

L'utilisation du paramètre maxdecimaldigits peut rendre la géométrie de sortie invalide. Pour éviter cela, utilisez d'abord ST_ReducePrecision avec une taille de grille appropriée.

GML 2 fait référence à la version 2.1.2, GML 3 à la version 3.1.1

L'argument "options" est un champ de bits. Il peut être utilisé pour définir le type de sortie CRS dans la sortie GML, et pour déclarer les données comme lat/lon :

  • 0 : GML Short CRS (e.g. EPSG:4326), valeur par défaut

  • 1: GML Long CRS (e.g urn:ogc:def:crs:EPSG::4326)

  • 2 : Pour GML 3 uniquement, supprimer l'attribut srsDimension de la sortie.

  • 4 : Pour GML 3 uniquement, utilisez la balise <LineString> plutôt que la balise <Curve> pour les lignes.

  • 16 : Déclare que les données sont des lat/lon (par exemple srid=4326). Par défaut, on suppose que les données sont planaires. Cette option n'est utile que pour la sortie GML 3.1.1, en ce qui concerne l'ordre des axes. Ainsi, si vous la définissez, les coordonnées seront échangées pour que l'ordre soit lat lon au lieu de lon lat dans la base de données.

  • 32 : Sortie de la boîte de la géométrie (enveloppe).

L'argument 'namespace prefix' peut être utilisé pour spécifier un préfixe d'espace de noms personnalisé ou aucun préfixe (s'il est vide). Si l'argument est nul ou omis, le préfixe 'gml' est utilisé

Disponibilité : 1.3.2

Disponibilité : 1.5.0 Le support de la géographie a été introduit.

Amélioration : la prise en charge du préfixe 2.0.0 a été introduite. L'option 4 pour GML3 a été introduite pour permettre l'utilisation de LineString au lieu de Curve tag pour les lignes. La prise en charge GML3 des surfaces polyédriques et des TINS a été introduite. L'option 32 a été introduite pour produire la boîte.

Modifié : 2.0.0 utiliser les args nommés par défaut

Amélioration : 2.1.0 La prise en charge des identifiants a été introduite pour GML 3.

[Note]

Seule la version 3+ de ST_AsGML prend en charge les surfaces polyédriques et les TINS.

Cette méthode implémente la spécification SQL/MM. SQL-MM IEC 13249-3: 17.2

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Exemples : Version 2

SELECT ST_AsGML(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
                st_asgml
                --------
                <gml:Polygon srsName="EPSG:4326"
><gml:outerBoundaryIs
><gml:LinearRing
><gml:coordinates
>0,0 0,1 1,1 1,0 0,0</gml:coordinates
></gml:LinearRing
></gml:outerBoundaryIs
></gml:Polygon>

Exemples : Version 3

-- Flip coordinates and output extended EPSG (16 | 1)--
SELECT ST_AsGML(3, ST_GeomFromText('POINT(5.234234233242 6.34534534534)',4326), 5, 17);
                        st_asgml
                        --------
                <gml:Point srsName="urn:ogc:def:crs:EPSG::4326"
><gml:pos
>6.34535 5.23423</gml:pos
></gml:Point>

-- Output the envelope (32) --
SELECT ST_AsGML(3, ST_GeomFromText('LINESTRING(1 2, 3 4, 10 20)',4326), 5, 32);
                st_asgml
                --------
        <gml:Envelope srsName="EPSG:4326">
                <gml:lowerCorner
>1 2</gml:lowerCorner>
                <gml:upperCorner
>10 20</gml:upperCorner>
        </gml:Envelope>

-- Output the envelope (32) , reverse (lat lon instead of lon lat) (16), long srs (1)= 32 | 16 | 1 = 49 --
SELECT ST_AsGML(3, ST_GeomFromText('LINESTRING(1 2, 3 4, 10 20)',4326), 5, 49);
        st_asgml
        --------
<gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326">
        <gml:lowerCorner
>2 1</gml:lowerCorner>
        <gml:upperCorner
>20 10</gml:upperCorner>
</gml:Envelope>

-- Polyhedral Example --
SELECT ST_AsGML(3, ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )'));
        st_asgml
        --------
 <gml:PolyhedralSurface>
<gml:polygonPatches>
   <gml:PolygonPatch>
                <gml:exterior>
                          <gml:LinearRing>
                                   <gml:posList srsDimension="3"
>0 0 0 0 0 1 0 1 1 0 1 0 0 0 0</gml:posList>
                          </gml:LinearRing>
                </gml:exterior>
   </gml:PolygonPatch>
   <gml:PolygonPatch>
                <gml:exterior>
                          <gml:LinearRing>
                                   <gml:posList srsDimension="3"
>0 0 0 0 1 0 1 1 0 1 0 0 0 0 0</gml:posList>
                          </gml:LinearRing>
                </gml:exterior>
   </gml:PolygonPatch>
   <gml:PolygonPatch>
                <gml:exterior>
                          <gml:LinearRing>
                                   <gml:posList srsDimension="3"
>0 0 0 1 0 0 1 0 1 0 0 1 0 0 0</gml:posList>
                          </gml:LinearRing>
                </gml:exterior>
   </gml:PolygonPatch>
   <gml:PolygonPatch>
                <gml:exterior>
                          <gml:LinearRing>
                                   <gml:posList srsDimension="3"
>1 1 0 1 1 1 1 0 1 1 0 0 1 1 0</gml:posList>
                          </gml:LinearRing>
                </gml:exterior>
   </gml:PolygonPatch>
   <gml:PolygonPatch>
                <gml:exterior>
                          <gml:LinearRing>
                                   <gml:posList srsDimension="3"
>0 1 0 0 1 1 1 1 1 1 1 0 0 1 0</gml:posList>
                          </gml:LinearRing>
                </gml:exterior>
   </gml:PolygonPatch>
   <gml:PolygonPatch>
                <gml:exterior>
                          <gml:LinearRing>
                                   <gml:posList srsDimension="3"
>0 0 1 1 0 1 1 1 1 0 1 1 0 0 1</gml:posList>
                          </gml:LinearRing>
                </gml:exterior>
   </gml:PolygonPatch>
</gml:polygonPatches>
</gml:PolyhedralSurface>

Voir aussi

ST_GeomFromGML


Name

ST_AsKML — Renvoyer la géométrie sous forme d'élément KML.

Synopsis

text ST_AsKML(geometry geom, integer maxdecimaldigits=15, text nprefix=NULL);

text ST_AsKML(geography geog, integer maxdecimaldigits=15, text nprefix=NULL);

Description

Renvoie la géométrie sous la forme d'un élément KML (Keyhole Markup Language). Le nombre maximal de décimales par défaut est de 15, la valeur par défaut du namespace est sans préfixe.

[Warning]

L'utilisation du paramètre maxdecimaldigits peut rendre la géométrie de sortie invalide. Pour éviter cela, utilisez d'abord ST_ReducePrecision avec une taille de grille appropriée.

[Note]

Exige que PostGIS soit compilé avec le support Proj. Utilisez PostGIS_Full_Version pour confirmer que vous avez compilé le support Proj.

[Note]

Disponibilité : 1.2.2 - les variantes ultérieures qui incluent le paramétrage de la version sont disponibles dans la version 1.3.2

[Note]

Amélioré : 2.0.0 - Ajout d'un préfixe namespace, utilisation d'arguments par défaut et d'arguments nommés

[Note]

Modifié : 3.0.0 - Suppression de la signature de la variante "versioned"

[Note]

La sortie AsKML ne fonctionnera pas avec les géométries qui n'ont pas de SRID

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

SELECT ST_AsKML(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));

                st_askml
                --------
                <Polygon
><outerBoundaryIs
><LinearRing
><coordinates
>0,0 0,1 1,1 1,0 0,0</coordinates
></LinearRing
></outerBoundaryIs
></Polygon>

                --3d linestring
                SELECT ST_AsKML('SRID=4326;LINESTRING(1 2 3, 4 5 6)');
                <LineString
><coordinates
>1,2,3 4,5,6</coordinates
></LineString>


Voir aussi

ST_AsSVG, ST_AsGML


Name

ST_AsLatLonText — Renvoie la représentation en degrés, minutes et secondes du point donné.

Synopsis

text ST_AsLatLonText(geometry pt, text format='');

Description

Renvoie la représentation en degrés, minutes et secondes du point.

[Note]

On suppose que le point se trouve dans une projection lat/lon. Les coordonnées X (lon) et Y (lat) sont normalisées dans la sortie à la plage "normale" (-180 à +180 pour lon, -90 à +90 pour lat).

Le paramètre text est une chaîne de caractères contenant le format du texte résultant, similaire à une chaîne de caractères de date. Les symboles autorisés sont "D" pour les degrés, "M" pour les minutes, "S" pour les secondes et "C" pour la direction cardinale (NSEW). Les jetons DMS peuvent être répétés pour indiquer la largeur et la précision souhaitées ("SSS.SSSS" signifie "1,0023").

Les lettres "M", "S" et "C" sont facultatives. Si "C" est omis, les degrés sont indiqués avec un signe "-" s'il s'agit du sud ou de l'ouest. Si "S" est omis, les minutes sont affichées sous forme décimale avec autant de chiffres de précision que vous le spécifiez. Si "M" est également omis, les degrés sont affichés sous forme décimale avec autant de chiffres de précision que vous le spécifiez.

Si la chaîne de caractères format est omise (ou de longueur nulle), un format par défaut sera utilisé.

Disponibilité : 2.0

Exemples

Format par défaut.

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)'));
      st_aslatlontext
----------------------------
 2°19'29.928"S 3°14'3.243"W

Fournir un format (identique au format par défaut).

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D°M''S.SSS"C'));
      st_aslatlontext
----------------------------
 2°19'29.928"S 3°14'3.243"W

Les caractères autres que D, M, S, C et . ne sont pas pris en compte.

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D degrees, M minutes, S seconds to the C'));
                                   st_aslatlontext
--------------------------------------------------------------------------------------
 2 degrees, 19 minutes, 30 seconds to the S 3 degrees, 14 minutes, 3 seconds to the W

Les degrés signés au lieu des directions cardinales.

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D°M''S.SSS"'));
      st_aslatlontext
----------------------------
 -2°19'29.928" -3°14'3.243"

Degrés décimaux.

SELECT (ST_AsLatLonText('POINT (-3.2342342 -2.32498)', 'D.DDDD degrees C'));
          st_aslatlontext
-----------------------------------
 2.3250 degrees S 3.2342 degrees W

Les valeurs trop importantes sont normalisées.

SELECT (ST_AsLatLonText('POINT (-302.2342342 -792.32498)'));
        st_aslatlontext
-------------------------------
 72°19'29.928"S 57°45'56.757"E

Name

ST_AsMARC21 — Renvoie la géométrie sous forme d'enregistrement MARC21/XML avec un champ de données géographiques (034).

Synopsis

text ST_AsMARC21 ( geometry geom , text format='hdddmmss' );

Description

Cette fonction renvoie un enregistrement MARC21/XML avec Coded Cartographic Mathematical Data représentant la boîte de délimitation d'une géométrie donnée. Le paramètre format permet de coder les coordonnées dans les sous-champs $d,$e,$f et $g dans tous les formats pris en charge par la norme MARC21/XML. Les formats valides sont les suivants :

  • la direction cardinale, en degrés, minutes et secondes (par défaut) : hdddmmss

  • degrés décimaux avec la direction cardinale : hddd.dddddd

  • degrés décimaux sans direction cardinale : ddd.dddddd

  • minutes décimales avec la direction cardinale : hdddmm.mmmm

  • minutes décimales sans direction cardinale : dddmm.mmmm

  • secondes décimales avec la direction cardinale : hdddmmss.sss

Le signe décimal peut également être une virgule, par exemple hdddmm,mmmm.

La précision des formats décimaux peut être limitée par le nombre de caractères après le signe décimal, par exemple hdddmm.mm pour des minutes décimales avec une précision de deux décimales.

Cette fonction ignore les dimensions Z et M.

Prise en charge des versions LOC MARC21/XML :

Disponibilité : 3.3.0

[Note]

Cette fonction ne prend pas en charge les géométries non lon/lat, car elles ne sont pas prises en charge par la norme MARC21/XML (Coded Cartographic Mathematical Data).

[Note]

La norme MARC21/XML ne prévoit aucun moyen d'annoter le système de référence spatiale pour les données mathématiques cartographiques codées, ce qui signifie que cette information sera perdue après la conversion au format MARC21/XML.

Exemples

Conversion d'un POINT en MARC21/XML au format hdddmmss (par défaut)



                SELECT ST_AsMARC21('SRID=4326;POINT(-4.504289 54.253312)'::geometry);

                                st_asmarc21
                -------------------------------------------------
                <record xmlns="http://www.loc.gov/MARC21/slim">
                    <datafield tag="034" ind1="1" ind2=" ">
                        <subfield code="a"
>a</subfield>
                        <subfield code="d"
>W0043015</subfield>
                        <subfield code="e"
>W0043015</subfield>
                        <subfield code="f"
>N0541512</subfield>
                        <subfield code="g"
>N0541512</subfield>
                    </datafield>
                </record>



Conversion d'un POLYGON en MARC21/XML formaté en degrés décimaux



                SELECT ST_AsMARC21('SRID=4326;POLYGON((-4.5792388916015625 54.18172660239091,-4.56756591796875 54.196993557130355,-4.546623229980469 54.18313300502024,-4.5792388916015625 54.18172660239091))'::geometry,'hddd.dddd');

                <record xmlns="http://www.loc.gov/MARC21/slim">
                    <datafield tag="034" ind1="1" ind2=" ">
                        <subfield code="a"
>a</subfield>
                        <subfield code="d"
>W004.5792</subfield>
                        <subfield code="e"
>W004.5466</subfield>
                        <subfield code="f"
>N054.1970</subfield>
                        <subfield code="g"
>N054.1817</subfield>
                    </datafield>
                </record>



Conversion d'une GEOMETRYCOLLECTION en MARC21/XML en minutes décimales. L'ordre des géométries dans la sortie MARC21/XML correspond à leur ordre dans la collection.



                SELECT ST_AsMARC21('SRID=4326;GEOMETRYCOLLECTION(POLYGON((13.1 52.65,13.516666666666667 52.65,13.516666666666667 52.38333333333333,13.1 52.38333333333333,13.1 52.65)),POINT(-4.5 54.25))'::geometry,'hdddmm.mmmm');

                                st_asmarc21
                -------------------------------------------------
                <record xmlns="http://www.loc.gov/MARC21/slim">
                    <datafield tag="034" ind1="1" ind2=" ">
                        <subfield code="a"
>a</subfield>
                        <subfield code="d"
>E01307.0000</subfield>
                        <subfield code="e"
>E01331.0000</subfield>
                        <subfield code="f"
>N05240.0000</subfield>
                        <subfield code="g"
>N05224.0000</subfield>
                    </datafield>
                    <datafield tag="034" ind1="1" ind2=" ">
                        <subfield code="a"
>a</subfield>
                        <subfield code="d"
>W00430.0000</subfield>
                        <subfield code="e"
>W00430.0000</subfield>
                        <subfield code="f"
>N05415.0000</subfield>
                        <subfield code="g"
>N05415.0000</subfield>
                    </datafield>
                </record>




Name

ST_AsMVTGeom — Transforme une géométrie dans l'espace de coordonnées d'une tuile MVT.

Synopsis

geometry ST_AsMVTGeom(geometry geom, box2d bounds, integer extent=4096, integer buffer=256, boolean clip_geom=true);

Description

Transforme une géométrie dans l'espace de coordonnées d'une tuile MVT (Mapbox Vector Tile), en l'ajustant aux limites de la tuile si nécessaire. La géométrie doit être dans le système de coordonnées de la carte cible (en utilisant ST_Transform si nécessaire). Il s'agit généralement de Web Mercator (SRID:3857).

La fonction tente de préserver la validité de la géométrie et la corrige si nécessaire. Cela peut entraîner l'effondrement de la géométrie résultante à une dimension inférieure.

Les limites rectangulaires de la tuile dans l'espace de coordonnées de la carte cible doivent être fournies, afin que la géométrie puisse être transformée et coupée si nécessaire. Les limites peuvent être générées à l'aide de ST_TileEnvelope.

Cette fonction est utilisée pour convertir la géométrie dans l'espace de coordonnées de la tuile requis par ST_AsMVT.

geom est la géométrie à transformer, dans le système de coordonnées de la carte cible.

bounds est la limite rectangulaire de la tuile dans l'espace de coordonnées de la carte, sans tampon.

extent est la taille de l'étendue de la tuile dans l'espace de coordonnées de la tuile tel que défini par la spécification MVT. La valeur par défaut est 4096.

buffer est la taille du tampon dans l'espace de coordonnées de la tuile pour le découpage de la géométrie. La valeur par défaut est 256.

clip_geom est un booléen qui contrôle si les géométries sont découpées ou encodées telles quelles. La valeur par défaut est true.

Disponibilité : 2.4.0

[Note]

A partir de la version 3.0, Wagyu peut être choisi au moment de la configuration pour découper et valider les polygones MVT. Cette bibliothèque est plus rapide et produit des résultats plus corrects que la bibliothèque par défaut de GEOS, mais elle peut mettre de côté de petits polygones.

Exemples

SELECT ST_AsText(ST_AsMVTGeom(
        ST_GeomFromText('POLYGON ((0 0, 10 0, 10 5, 0 -5, 0 0))'),
        ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)),
        4096, 0, false));
                              st_astext
--------------------------------------------------------------------
 MULTIPOLYGON(((5 4096,10 4091,10 4096,5 4096)),((5 4096,0 4101,0 4096,5 4096)))
                

Exemple canonique d'une tuile Web Mercator utilisant les limites calculées d'une tuile pour interroger et découper la géométrie.


SELECT ST_AsMVTGeom(
            ST_Transform( geom, 3857 ),
            ST_TileEnvelope(12, 513, 412), extent =
> 4096, buffer =
> 64) AS geom
  FROM data
  WHERE geom && ST_TileEnvelope(12, 513, 412, margin =
> (64.0 / 4096))



Name

ST_AsMVT — Fonction d'agrégation renvoyant une représentation MVT d'un ensemble de lignes.

Synopsis

bytea ST_AsMVT(anyelement set row);

bytea ST_AsMVT(anyelement row, text name);

bytea ST_AsMVT(anyelement row, text name, integer extent);

bytea ST_AsMVT(anyelement row, text name, integer extent, text geom_name);

bytea ST_AsMVT(anyelement row, text name, integer extent, text geom_name, text feature_id_name);

Description

Une fonction agrégée qui renvoie une représentation binaire Mapbox Vector Tile d'un ensemble de lignes correspondant à une couche de tuiles. Les lignes doivent contenir une colonne de géométrie qui sera encodée comme une géométrie d'élément. La géométrie doit être dans l'espace de coordonnées de la tuile et valide conformément à la spécification MVT. ST_AsMVTGeom peut être utilisé pour transformer la géométrie dans l'espace de coordonnées des tuiles. Les autres colonnes de la ligne sont encodées en tant qu'attributs de caractéristiques.

Le format Mapbox Vector Tile peut stocker des éléments avec différents ensembles d'attributs. Pour utiliser cette fonctionnalité, il convient de fournir une colonne JSONB dans les données de la ligne contenant des objets Json à un niveau de profondeur. Les clés et les valeurs des valeurs JSONB seront encodées en tant qu'attributs d'entités.

Les tuiles à couches multiples peuvent être créées en concaténant plusieurs appels à cette fonction en utilisant || ou STRING_AGG.

[Important]

Ne pas appeler avec un GEOMETRYCOLLECTION comme élément de la ligne. Cependant, vous pouvez utiliser ST_AsMVTGeom pour préparer une collection de géométrie à inclure.

row données de ligne avec au moins une colonne de géométrie.

name est le nom de la couche. La valeur par défaut est la chaîne de caractères "default".

extent est l'étendue de la tuile dans l'espace de l'écran tel que défini par la spécification. La valeur par défaut est 4096.

geom_name est le nom de la colonne géométrique dans les données de la ligne. La valeur par défaut est la première colonne géométrique. Notez que PostgreSQL, par défaut, plie automatiquement les identifiants non cités en minuscules, ce qui signifie qu'à moins que la colonne géométrique ne soit citée, par exemple "MyMVTGeom", ce paramètre doit être fourni en minuscules.

feature_id_name est le nom de la colonne Feature ID dans les données de la ligne. S'il est NULL ou négatif, l'identifiant de la caractéristique n'est pas défini. La première colonne correspondant au nom et au type valide (smallint, integer, bigint) sera utilisée comme Feature ID, et toute colonne suivante sera ajoutée en tant que propriété. Les propriétés JSON ne sont pas prises en charge.

Amélioration : 3.0 - ajout de la prise en charge du Feature ID.

Amélioration : 2.5.0 - ajout de la prise en charge des requêtes parallèles.

Disponibilité : 2.4.0

Exemples

WITH mvtgeom AS
(
  SELECT ST_AsMVTGeom(geom, ST_TileEnvelope(12, 513, 412), extent =
> 4096, buffer =
> 64) AS geom, name, description
  FROM points_of_interest
  WHERE geom && ST_TileEnvelope(12, 513, 412, margin =
> (64.0 / 4096))
)
SELECT ST_AsMVT(mvtgeom.*)
FROM mvtgeom;


        

Name

ST_AsSVG — Renvoie les données de chemin SVG pour une géométrie.

Synopsis

text ST_AsSVG(geometry geom, integer rel=0, integer maxdecimaldigits=15);

text ST_AsSVG(geography geog, integer rel=0, integer maxdecimaldigits=15);

Description

Renvoie la géométrie sous forme de données de chemin SVG (Scalar Vector Graphics). Utilisez 1 comme deuxième argument pour que les données de chemin soient implémentées en termes de déplacements relatifs, la valeur par défaut (ou 0) utilise des déplacements absolus. Le troisième argument peut être utilisé pour réduire le nombre maximal de chiffres décimaux utilisés dans la sortie (15 par défaut). Les géométries ponctuelles seront rendues sous la forme cx/cy lorsque l'argument 'rel' est 0, x/y lorsque 'rel' est 1. Les géométries multipoints sont délimitées par des virgules (","), les géométries GeometryCollection sont délimitées par des points-virgules (" ;").

Pour travailler avec les graphiques PostGIS SVG, consultez la bibliothèque pg_svg qui fournit des fonctions plpgsql pour travailler avec les résultats de ST_AsSVG.

Amélioration : 3.4.0 pour prendre en charge tous les types de courbes

Modifié : 2.0.0 pour utiliser les args par défaut et supporter les args nommés

[Note]

Disponibilité : 1.2.2. Disponibilité : 1.4.0 Modifié dans PostGIS 1.4.0 pour inclure la commande L dans le chemin absolu afin de se conformer à http://www.w3.org/TR/SVG/paths.html#PathDataBNF

Cette méthode prend en charge les types Circular String et Curve.

Exemples

SELECT ST_AsSVG('POLYGON((0 0,0 1,1 1,1 0,0 0))'::geometry);

st_assvg
--------
M 0 0 L 0 -1 1 -1 1 0 Z

Circular string

SELECT ST_AsSVG( ST_GeomFromText('CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)') );

st_assvg
--------
M -2 0 A 2 2 0 0 1 2 0 A 2 2 0 0 1 2 -4

Multi-curve

SELECT ST_AsSVG('MULTICURVE((5 5,3 5,3 3,0 3),
 CIRCULARSTRING(0 0,2 1,2 2))'::geometry, 0, 0);
 st_assvg
------------------------------------------------
 M 5 -5 L 3 -5 3 -3 0 -3 M 0 0 A 2 2 0 0 0 2 -2
 

Multi-surface

SELECT ST_AsSVG('MULTISURFACE(
CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),
    (-1 0,0 0.5,1 0,0 1,-1 0)),
((7 8,10 10,6 14,4 11,7 8)))'::geometry, 0, 2);

st_assvg
---------------------------------------------------------
M -2 0 A 1 1 0 0 0 0 0 A 1 1 0 0 0 2 0 A 2 2 0 0 0 -2 0 Z
M -1 0 L 0 -0.5 1 0 0 -1 -1 0 Z
M 7 -8 L 10 -10 6 -14 4 -11 Z
 

Name

ST_AsTWKB — Renvoie la géométrie sous forme de TWKB, diminutif de "Tiny Well-Known Binary"

Synopsis

bytea ST_AsTWKB(geometry geom, integer prec=0, integer prec_z=0, integer prec_m=0, boolean with_sizes=false, boolean with_boxes=false);

bytea ST_AsTWKB(geometry[] geom, bigint[] ids, integer prec=0, integer prec_z=0, integer prec_m=0, boolean with_sizes=false, boolean with_boxes=false);

Description

Renvoie la géométrie au format TWKB (Tiny Well-Known Binary). TWKB est un format binaire compressé dont l'objectif est de minimiser la taille de la sortie.

Les paramètres relatifs aux chiffres décimaux déterminent le degré de précision stocké dans la sortie. Par défaut, les valeurs sont arrondies à l'unité la plus proche avant l'encodage. Si vous souhaitez transférer plus de précision, augmentez le nombre. Par exemple, une valeur de 1 implique que le premier chiffre à droite du point décimal sera préservé.

Les paramètres "sizes" et "bounding boxes" déterminent si les informations optionnelles concernant la longueur encodée de l'objet et les limites de l'objet sont incluses dans la sortie. Par défaut, elles ne le sont pas. Ne les activez pas à moins que votre logiciel client n'en ait l'utilité, car ils ne font qu'utiliser de l'espace (et économiser de l'espace est l'objectif de TWKB).

La forme tableau de la fonction est utilisée pour convertir une collection de géométries et d'identifiants uniques en une collection TWKB qui préserve les identifiants. Cette fonction est utile pour les clients qui souhaitent décompresser une collection et accéder ensuite à d'autres informations sur les objets qu'elle contient. Vous pouvez créer les tableaux à l'aide de la fonction array_agg. Les autres paramètres sont les mêmes que pour la forme simple de la fonction.

[Note]

La spécification du format est disponible en ligne à l'adresse https://github.com/TWKB/Specification, et le code permettant de créer un client JavaScript est disponible à l'adresse https://github.com/TWKB/twkb.js.

Amélioration : 2.4.0 amélioration de la mémoire et de la vitesse.

Disponibilité : 2.2.0

Exemples

SELECT ST_AsTWKB('LINESTRING(1 1,5 5)'::geometry);
                 st_astwkb
--------------------------------------------
\x02000202020808

Pour créer un objet TWKB agrégé comprenant des identifiants, il faut d'abord agréger les géométries et les objets souhaités en utilisant "array_agg()", puis appeler la fonction TWKB appropriée.

SELECT ST_AsTWKB(array_agg(geom), array_agg(gid)) FROM mytable;
                 st_astwkb
--------------------------------------------
\x040402020400000202

Name

ST_AsX3D — Renvoie une géométrie au format X3D xml node element : ISO-IEC-19776-1.2-X3DEncodings-XML

Synopsis

text ST_AsX3D(geometry g1, integer maxdecimaldigits=15, integer options=0);

Description

Renvoie une géométrie sous la forme d'un élément de nœud X3D xml formaté http://www.web3d.org/standards/number/19776-1. Si maxdecimaldigits (précision) n'est pas spécifié, la valeur par défaut est 15.

[Note]

Il existe plusieurs options pour traduire les géométries PostGIS en X3D, car les types de géométrie X3D ne correspondent pas directement aux types de géométrie PostGIS, et nous avons évité certains types X3D plus récents qui pourraient constituer de meilleures correspondances, car la plupart des outils de rendu ne les prennent pas en charge actuellement. Ce sont les correspondances que nous avons choisies. N'hésitez pas à poster un ticket de bug si vous avez des idées sur l'idée ou sur la façon dont nous pouvons permettre aux gens de dénoter leurs correspondances préférées.

Voici comment nous faisons actuellement correspondre les types 2D/3D de PostGIS aux types X3D

L'argument 'options' est un champ de bits. Pour PostGIS 2.2+, il est utilisé pour indiquer si les coordonnées doivent être représentées avec le nœud géospatial X3D GeoCoordinates et si l'axe x/y doit être inversé. Par défaut, ST_AsX3D produit les données sous forme de base de données (long,lat ou X,Y), mais la valeur par défaut de lat/lon, y/x de X3D peut être préférée.

  • 0 : X/Y dans l'ordre de la base de données (par exemple long/lat = X,Y est l'ordre standard de la base de données), valeur par défaut, et coordonnées non spatiales (juste un bon vieux Coordinate tag).

  • 1 : Inverser X et Y. Si cette option est utilisée en conjonction avec l'option GeoCoordinate, la sortie sera par défaut "latitude_first" et les coordonnées seront également inversées.

  • 2 : Sortie des coordonnées enGeoSpatial GeoCoordinates. Cette option génère une erreur si les géométries ne sont pas en WGS 84 long lat (srid : 4326). C'est actuellement le seul type de GeoCoordinate pris en charge. Référence aux spécifications X3D spécifiant un système de référence spatiale.. La sortie par défaut sera GeoCoordinate geoSystem='"GD" "WE" "longitude_first"'. Si vous préférez la sortie par défaut X3D de GeoCoordinate geoSystem='"GD" "WE" "latitude_first"', utilisez (2 + 1) = 3

Type PostGISType 2D X3DType 3D X3D
LINESTRINGpas encore implémenté - sera PolyLine2DLineSet
MULTILINESTRINGpas encore implémenté - sera PolyLine2DIndexedLineSet
MULTIPOINTPolypoint2DPointSet
POINTproduit les coordonnées délimitées par l'espaceproduit les coordonnées délimitées par l'espace
(MULTI) POLYGON, POLYHEDRALSURFACEBalises X3D non validesIndexedFaceSet (les anneaux intérieurs sont actuellement édités sous la forme d'un autre jeu de faces)
TINTriangleSet2D (Pas encore implémenté)IndexedTriangleSet
[Note]

La prise en charge de la géométrie 2D n'est pas encore terminée. Les anneaux intérieurs sont actuellement dessinés comme des polygones séparés. Nous y travaillons.

De nombreuses avancées ont lieu dans l'espace 3D, en particulier avec X3D Integration with HTML5

Il existe également une visionneuse X3D open source que vous pouvez utiliser pour visualiser les géométries rendues. Des binaires Wrl http://freewrl.sourceforge.net/ gratuits sont disponibles pour Mac, Linux et Windows. Utilisez le FreeWRL_Launcher pour visualiser les géométries.

Consultez également PostGIS minimalist X3D viewer qui utilise cette fonction et x3dDom html/js open source toolkit.

Disponibilité : 2.0.0: ISO-IEC-19776-1.2-X3DEncodings-XML

Amélioration : 2.2.0 : Prise en charge des coordonnées géographiques et de l'inversion des axes (x/y, long/lat). Voir les options pour plus de détails.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Exemple : Créer un document X3D entièrement fonctionnel - Cela permet de générer un cube qui peut être visualisé dans FreeWrl et d'autres visionneuses X3D.

SELECT '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D>
  <Scene>
    <Transform>
      <Shape>
       <Appearance>
            <Material emissiveColor=''0 0 1''/>
       </Appearance
> ' ||
       ST_AsX3D( ST_GeomFromEWKT('POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)),
((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) )')) ||
      '</Shape>
    </Transform>
  </Scene>
</X3D
>' As x3ddoc;

                x3ddoc
                --------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "http://www.web3d.org/specifications/x3d-3.0.dtd">
<X3D>
  <Scene>
    <Transform>
      <Shape>
       <Appearance>
            <Material emissiveColor='0 0 1'/>
       </Appearance>
       <IndexedFaceSet  coordIndex='0 1 2 3 -1 4 5 6 7 -1 8 9 10 11 -1 12 13 14 15 -1 16 17 18 19 -1 20 21 22 23'>
            <Coordinate point='0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 0 1 0 0 1 0 1 0 0 1 1 1 0 1 1 1 1 0 1 1 0 0 0 1 0 0 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 0 1 1' />
      </IndexedFaceSet>
      </Shape>
    </Transform>
  </Scene>
</X3D>

Bâtiments PostGIS

Copiez et collez le résultat de cette requête dans x3d scene viewer et cliquez sur Show

SELECT string_agg('<Shape
>' || ST_AsX3D(ST_Extrude(geom, 0,0, i*0.5)) ||
    '<Appearance>
          <Material diffuseColor="' || (0.01*i)::text || ' 0.8 0.2" specularColor="' || (0.05*i)::text || ' 0 0.5"/>
        </Appearance>
    </Shape
>', '')
FROM ST_Subdivide(ST_Letters('PostGIS'),20) WITH ORDINALITY AS f(geom,i);

Bâtiments formés par subdivision PostGIS et extrusion

Exemple : Un octogone élevé à 3 unités et une précision décimale de 6

SELECT ST_AsX3D(
ST_Translate(
    ST_Force_3d(
        ST_Buffer(ST_Point(10,10),5, 'quad_segs=2')), 0,0,
    3)
  ,6) As x3dfrag;

x3dfrag
--------
<IndexedFaceSet coordIndex="0 1 2 3 4 5 6 7">
    <Coordinate point="15 10 3 13.535534 6.464466 3 10 5 3 6.464466 6.464466 3 5 10 3 6.464466 13.535534 3 10 15 3 13.535534 13.535534 3 " />
</IndexedFaceSet>

Exemple : TIN

SELECT ST_AsX3D(ST_GeomFromEWKT('TIN (((
                0 0 0,
                0 0 1,
                0 1 0,
                0 0 0
            )), ((
                0 0 0,
                0 1 0,
                1 1 0,
                0 0 0
            ))
            )')) As x3dfrag;

                x3dfrag
                --------
<IndexedTriangleSet  index='0 1 2 3 4 5'
><Coordinate point='0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 1 0'/></IndexedTriangleSet>

Exemple : multiligne fermée (la limite d'un polygone avec des trous)

SELECT ST_AsX3D(
                    ST_GeomFromEWKT('MULTILINESTRING((20 0 10,16 -12 10,0 -16 10,-12 -12 10,-20 0 10,-12 16 10,0 24 10,16 16 10,20 0 10),
  (12 0 10,8 8 10,0 12 10,-8 8 10,-8 0 10,-8 -4 10,0 -8 10,8 -4 10,12 0 10))')
) As x3dfrag;

                x3dfrag
                --------
<IndexedLineSet  coordIndex='0 1 2 3 4 5 6 7 0 -1 8 9 10 11 12 13 14 15 8'>
    <Coordinate point='20 0 10 16 -12 10 0 -16 10 -12 -12 10 -20 0 10 -12 16 10 0 24 10 16 16 10 12 0 10 8 8 10 0 12 10 -8 8 10 -8 0 10 -8 -4 10 0 -8 10 8 -4 10 ' />
 </IndexedLineSet>

Name

ST_GeoHash — Retourne une représentation GeoHash de la géométrie.

Synopsis

text ST_GeoHash(geometry geom, integer maxchars=full_precision_of_point);

Description

Calcule une représentation GeoHash d'une géométrie. Un GeoHash encode un point géographique sous forme de texte qui peut être trié et recherché en fonction du préfixe. Un GeoHash plus court est une représentation moins précise d'un point. Il peut être considéré comme une boîte qui contient le point.

Les valeurs géométriques non ponctuelles dont l'étendue n'est pas nulle peuvent également être mises en correspondance avec des codes GeoHash. La précision du code dépend de l'étendue géographique de la géométrie.

Si maxchars n'est pas spécifié, le code GeoHash renvoyé correspond à la plus petite cellule contenant la géométrie d'entrée. Les points renvoient un GeoHash avec 20 caractères de précision (ce qui est suffisant pour contenir la double précision de l'entrée). D'autres types géométriques peuvent renvoyer un GeoHash avec moins de précision, en fonction de l'étendue de la géométrie. Les géométries plus grandes sont représentées avec moins de précision, les plus petites avec plus de précision. La boîte déterminée par le code GeoHash contient toujours l'élément d'entrée.

Si maxchars est spécifié, le code GeoHash renvoyé comporte au maximum ce nombre de caractères. Il correspond à une représentation (éventuellement) de moindre précision de la géométrie d'entrée. Pour les non-points, le point de départ du calcul est le centre de la boîte de délimitation de la géométrie.

Disponibilité : 1.4.0

[Note]

ST_GeoHash exige que la géométrie d'entrée soit en coordonnées géographiques (lon/lat).

Cette méthode prend en charge les types Circular String et Curve.

Exemples

SELECT ST_GeoHash( ST_Point(-126,48) );

         st_geohash
----------------------
 c0w3hf1s70w3hf1s70w3

SELECT ST_GeoHash( ST_Point(-126,48), 5);

 st_geohash
------------
 c0w3h

-- This line contains the point, so the GeoHash is a prefix of the point code
SELECT ST_GeoHash('LINESTRING(-126 48, -126.1 48.1)'::geometry);

 st_geohash
------------
 c0w3

                

7.10. Opérateurs

7.10.1. Opérateurs de Bounding Box

  • && — Renvoi VRAI si la boite englobante 2D de A intersecte la boite englobante 2D de B.
  • &&(geometry,box2df) — Renvoie TRUE si la boîte de délimitation 2D (en cache) d'une géométrie intersecte une boîte de délimitation 2D de précision flottante (BOX2DF).
  • &&(box2df,geometry) — Renvoie TRUE si une boîte de délimitation 2D de précision flottante (BOX2DF) intersecte la boîte de délimitation 2D (mise en cache) d'une géométrie.
  • &&(box2df,box2df) — Renvoie TRUE si deux boîtes de délimitation 2D à précision flottante (BOX2DF) se croisent.
  • &&& — Renvoie TRUE si la boîte de délimitation n-D de A intersecte la boîte de délimitation n-D de B.
  • &&&(geometry,gidx) — Renvoie TRUE si la boîte de délimitation n-D (en cache) d'une géométrie intersecte une boîte de délimitation de précision flottante n-D (GIDX).
  • &&&(gidx,geometry) — Renvoie TRUE si une boîte de délimitation de précision flottante n-D (GIDX) intersecte la boîte de délimitation n-D (mise en cache) d'une géométrie.
  • &&&(gidx,gidx) — Renvoie TRUE si deux boîtes de délimitation (GIDX) de précision flottante n-D se croisent.
  • &< — Renvoie TRUE si la boîte englobante de A chevauche ou est à gauche de celle de B.
  • &<| — Renvoie TRUE si la boîte englobante de A chevauche ou est inférieure à celle de B.
  • &> — Renvoie TRUE si la boîte de délimitation de A chevauche ou est à droite de celle de B.
  • << — Renvoie TRUE si la boîte de délimitation de A est strictement à gauche de celle de B.
  • <<| — Renvoie TRUE si la boîte de délimitation de A est strictement inférieure à celle de B.
  • = — Renvoie TRUE si les coordonnées et l'ordre des coordonnées de la géométrie/géographie A sont les mêmes que les coordonnées et l'ordre des coordonnées de la géométrie/géographie B.
  • >> — Renvoie TRUE si la boîte de délimitation de A est strictement à droite de celle de B.
  • @ — Renvoie TRUE si la boîte de délimitation de A est contenue par celle de B.
  • @(geometry,box2df) — Renvoie TRUE si la boîte de délimitation 2D d'une géométrie est contenue dans une boîte de délimitation 2D à précision flottante (BOX2DF).
  • @(box2df,geometry) — Renvoie TRUE si une boîte de délimitation de précision flottante 2D (BOX2DF) est contenue dans la boîte de délimitation 2D d'une géométrie.
  • @(box2df,box2df) — Renvoie TRUE si une boîte de délimitation de précision flottante 2D (BOX2DF) est contenue dans une autre boîte de délimitation de précision flottante 2D.
  • |&> — Renvoie TRUE si la boîte de délimitation de A chevauche ou est au-dessus de celle de B.
  • |>> — Renvoie TRUE si la boîte de délimitation de A est strictement au-dessus de celle de B.
  • ~ — Renvoie TRUE si la boîte de délimitation de A contient celle de B.
  • ~(geometry,box2df) — Renvoie TRUE si la boîte de délimitation 2D d'une géométrie contient une boîte de délimitation de précision flottante 2D (GIDX).
  • ~(box2df,geometry) — Renvoie TRUE si une boîte de délimitation de précision flottante 2D (BOX2DF) contient la boîte de délimitation 2D d'une géométrie.
  • ~(box2df,box2df) — Renvoie TRUE si une boîte de délimitation de précision flottante 2D (BOX2DF) contient une autre boîte de délimitation de précision flottante 2D (BOX2DF).
  • ~= — Renvoie TRUE si la boîte de délimitation de A est la même que celle de B.

Name

&& — Renvoi VRAI si la boite englobante 2D de A intersecte la boite englobante 2D de B.

Synopsis

boolean &&( geometry A , geometry B );

boolean &&( geography A , geography B );

Description

L'opérateur && renvoi VRAI si la boite englobante 2D de la géométrie A intersecte la boite englobante 2D de la géométrie B.

[Note]

Cette opérande utilisera tous les index qui peuvent être disponibles sur les géométries.

Amélioration : 2.0.0 introduction du support des surfaces polyédriques.

Disponibilité : 1.5.0 le support de la géographie a été introduit.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

SELECT tbl1.column1, tbl2.column1, tbl1.column2 && tbl2.column2 AS overlaps
FROM ( VALUES
        (1, 'LINESTRING(0 0, 3 3)'::geometry),
        (2, 'LINESTRING(0 1, 0 5)'::geometry)) AS tbl1,
( VALUES
        (3, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl2;

 column1 | column1 | overlaps
---------+---------+----------
           1 |       3 | t
           2 |       3 | f
(2 rows)

Voir aussi

ST_Intersects, ST_Extent, |&>, &>, &<|, &<, ~, @


Name

&&(geometry,box2df) — Renvoie TRUE si la boîte de délimitation 2D (en cache) d'une géométrie intersecte une boîte de délimitation 2D de précision flottante (BOX2DF).

Synopsis

boolean &&( geometry A , box2df B );

Description

L'opérateur && renvoie TRUE si la boîte de délimitation 2D mise en cache de la géométrie A intersecte la boîte de délimitation 2D B, en utilisant la précision float. Cela signifie que si B est un box2d (double précision), il sera converti en interne en une boîte de délimitation 2D à précision flottante (BOX2DF)

[Note]

Cet opérande est destiné à être utilisé en interne par les index BRIN, plus que par les utilisateurs.

Disponibilité : 2.3.0 le support des Block Range INdexes (BRIN) a été introduit. Nécessite PostgreSQL 9.5+.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

SELECT ST_Point(1,1) && ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

&&(box2df,geometry) — Renvoie TRUE si une boîte de délimitation 2D de précision flottante (BOX2DF) intersecte la boîte de délimitation 2D (mise en cache) d'une géométrie.

Synopsis

boolean &&( box2df A , geometry B );

Description

L'opérateur && renvoie TRUE si la boîte de délimitation 2D A intersecte la boîte de délimitation 2D mise en cache de la géométrie B, en utilisant la précision float. Cela signifie que si A est un box2d (double précision), il sera converti en interne en une boîte de délimitation 2D à précision flottante (BOX2DF)

[Note]

Cet opérande est destiné à être utilisé en interne par les index BRIN, plus que par les utilisateurs.

Disponibilité : 2.3.0 le support des Block Range INdexes (BRIN) a été introduit. Nécessite PostgreSQL 9.5+.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

SELECT ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) && ST_Point(1,1) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

&&(box2df,box2df) — Renvoie TRUE si deux boîtes de délimitation 2D à précision flottante (BOX2DF) se croisent.

Synopsis

boolean &&( box2df A , box2df B );

Description

L'opérateur && renvoie TRUE si deux boîtes de délimitation 2D A et B se croisent, en utilisant la précision float. Cela signifie que si A (ou B) est un box2d (double précision), il sera converti en interne en une boîte de délimitation 2D de précision flottante (BOX2DF)

[Note]

Cet opérateur est destiné à être utilisé en interne par les index BRIN, plus que par les utilisateurs.

Disponibilité : 2.3.0 le support des Block Range INdexes (BRIN) a été introduit. Nécessite PostgreSQL 9.5+.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

SELECT ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) && ST_MakeBox2D(ST_Point(1,1), ST_Point(3,3)) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

&&& — Renvoie TRUE si la boîte de délimitation n-D de A intersecte la boîte de délimitation n-D de B.

Synopsis

boolean &&&( geometry A , geometry B );

Description

L'opérateur &&& renvoie TRUE si la boîte de délimitation n-D de la géométrie A intersecte la boîte de délimitation n-D de la géométrie B.

[Note]

Cette opérande utilisera tous les index qui peuvent être disponibles sur les géométries.

Disponibilité : 2.0.0

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples : LineStrings 3D

SELECT tbl1.column1, tbl2.column1, tbl1.column2 &&& tbl2.column2 AS overlaps_3d,
                                    tbl1.column2 && tbl2.column2 AS overlaps_2d
FROM ( VALUES
        (1, 'LINESTRING Z(0 0 1, 3 3 2)'::geometry),
        (2, 'LINESTRING Z(1 2 0, 0 5 -1)'::geometry)) AS tbl1,
( VALUES
        (3, 'LINESTRING Z(1 2 1, 4 6 1)'::geometry)) AS tbl2;

 column1 | column1 | overlaps_3d | overlaps_2d
---------+---------+-------------+-------------
       1 |       3 | t           | t
       2 |       3 | f           | t

Exemples : LineStrings 3M

SELECT tbl1.column1, tbl2.column1, tbl1.column2 &&& tbl2.column2 AS overlaps_3zm,
                                    tbl1.column2 && tbl2.column2 AS overlaps_2d
FROM ( VALUES
        (1, 'LINESTRING M(0 0 1, 3 3 2)'::geometry),
        (2, 'LINESTRING M(1 2 0, 0 5 -1)'::geometry)) AS tbl1,
( VALUES
        (3, 'LINESTRING M(1 2 1, 4 6 1)'::geometry)) AS tbl2;

 column1 | column1 | overlaps_3zm | overlaps_2d
---------+---------+-------------+-------------
       1 |       3 | t           | t
       2 |       3 | f           | t

Voir aussi

&&


Name

&&&(geometry,gidx) — Renvoie TRUE si la boîte de délimitation n-D (en cache) d'une géométrie intersecte une boîte de délimitation de précision flottante n-D (GIDX).

Synopsis

boolean &&&( geometry A , gidx B );

Description

L'opérateur &&& renvoie TRUE si la boîte de délimitation n-D mise en cache de la géométrie A intersecte la boîte de délimitation n-D B, en utilisant la précision float. Cela signifie que si B est un box3d (double précision), il sera converti en interne en une boîte de délimitation 3D de précision flottante (GIDX)

[Note]

Cet opérateur est destiné à être utilisé en interne par les index BRIN, plus que par les utilisateurs.

Disponibilité : 2.3.0 le support des Block Range INdexes (BRIN) a été introduit. Nécessite PostgreSQL 9.5+.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

SELECT ST_MakePoint(1,1,1) &&& ST_3DMakeBox(ST_MakePoint(0,0,0), ST_MakePoint(2,2,2)) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

&&&(gidx,geometry) — Renvoie TRUE si une boîte de délimitation de précision flottante n-D (GIDX) intersecte la boîte de délimitation n-D (mise en cache) d'une géométrie.

Synopsis

boolean &&&( gidx A , geometry B );

Description

L'opérateur &&& renvoie TRUE si la boîte de délimitation n-D A intersecte la boîte de délimitation n-D mise en cache de la géométrie B, en utilisant la précision float. Cela signifie que si A est un box3d (à double précision), il sera converti en interne en une boîte de délimitation 3D à précision flottante (GIDX)

[Note]

Cet opérateur est destiné à être utilisé en interne par les index BRIN, plus que par les utilisateurs.

Disponibilité : 2.3.0 le support des Block Range INdexes (BRIN) a été introduit. Nécessite PostgreSQL 9.5+.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

SELECT ST_3DMakeBox(ST_MakePoint(0,0,0), ST_MakePoint(2,2,2)) &&& ST_MakePoint(1,1,1) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

&&&(gidx,gidx) — Renvoie TRUE si deux boîtes de délimitation (GIDX) de précision flottante n-D se croisent.

Synopsis

boolean &&&( gidx A , gidx B );

Description

L'opérateur &&& renvoie TRUE si deux boîtes de délimitation n-D A et B se croisent, en utilisant la précision float. Cela signifie que si A (ou B) est un box3d (double précision), il sera converti en interne en une boîte de délimitation 3D de précision flottante (GIDX)

[Note]

Cet opérateur est destiné à être utilisé en interne par les index BRIN, plus que par les utilisateurs.

Disponibilité : 2.3.0 le support des Block Range INdexes (BRIN) a été introduit. Nécessite PostgreSQL 9.5+.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Cette fonction prend en charge les triangles et les réseaux irréguliers triangulés (TIN).

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Exemples

SELECT ST_3DMakeBox(ST_MakePoint(0,0,0), ST_MakePoint(2,2,2)) &&& ST_3DMakeBox(ST_MakePoint(1,1,1), ST_MakePoint(3,3,3)) AS overlaps;

 overlaps
----------
 t
(1 row)

Name

&< — Renvoie TRUE si la boîte englobante de A chevauche ou est à gauche de celle de B.

Synopsis

boolean &<( geometry A , geometry B );

Description

L'opérateur &< renvoie TRUE si la boîte de délimitation de la géométrie A chevauche ou est à gauche de la boîte de délimitation de la géométrie B, ou plus exactement, chevauche ou n'est PAS à droite de la boîte de délimitation de la géométrie B.

[Note]

Cette opérande utilisera tous les index qui peuvent être disponibles sur les géométries.

Exemples

SELECT tbl1.column1, tbl2.column1, tbl1.column2 &< tbl2.column2 AS overleft
FROM
  ( VALUES
        (1, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING(0 0, 3 3)'::geometry),
        (3, 'LINESTRING(0 1, 0 5)'::geometry),
        (4, 'LINESTRING(6 0, 6 1)'::geometry)) AS tbl2;

 column1 | column1 | overleft
---------+---------+----------
           1 |       2 | f
           1 |       3 | f
           1 |       4 | t
(3 rows)

Voir aussi

&&, |&>, &>, &<|


Name

&<| — Renvoie TRUE si la boîte englobante de A chevauche ou est inférieure à celle de B.

Synopsis

boolean &<|( geometry A , geometry B );

Description

L'opérateur &<| renvoie TRUE si la boîte de délimitation de la géométrie A chevauche ou est en dessous de la boîte de délimitation de la géométrie B, ou plus exactement, chevauche ou n'est PAS au-dessus de la boîte de délimitation de la géométrie B.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

[Note]

Cette opérande utilisera tous les index qui peuvent être disponibles sur les géométries.

Exemples

SELECT tbl1.column1, tbl2.column1, tbl1.column2 &<| tbl2.column2 AS overbelow
FROM
  ( VALUES
        (1, 'LINESTRING(6 0, 6 4)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING(0 0, 3 3)'::geometry),
        (3, 'LINESTRING(0 1, 0 5)'::geometry),
        (4, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl2;

 column1 | column1 | overbelow
---------+---------+-----------
           1 |       2 | f
           1 |       3 | t
           1 |       4 | t
(3 rows)

Voir aussi

&&, |&>, &>, &<


Name

&> — Renvoie TRUE si la boîte de délimitation de A chevauche ou est à droite de celle de B.

Synopsis

boolean &>( geometry A , geometry B );

Description

L'opérateur &> renvoie TRUE si la boîte de délimitation de la géométrie A chevauche ou est à droite de la boîte de délimitation de la géométrie B, ou plus exactement, chevauche ou n'est PAS à gauche de la boîte de délimitation de la géométrie B.

[Note]

Cette opérande utilisera tous les index qui peuvent être disponibles sur les géométries.

Exemples

SELECT tbl1.column1, tbl2.column1, tbl1.column2 &
> tbl2.column2 AS overright
FROM
  ( VALUES
        (1, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING(0 0, 3 3)'::geometry),
        (3, 'LINESTRING(0 1, 0 5)'::geometry),
        (4, 'LINESTRING(6 0, 6 1)'::geometry)) AS tbl2;

 column1 | column1 | overright
---------+---------+-----------
           1 |       2 | t
           1 |       3 | t
           1 |       4 | f
(3 rows)

Voir aussi

&&, |&>, &<|, &<


Name

<< — Renvoie TRUE si la boîte de délimitation de A est strictement à gauche de celle de B.

Synopsis

boolean <<( geometry A , geometry B );

Description

L'opérateur << renvoie TRUE si la boîte de délimitation de la géométrie A est strictement à gauche de la boîte de délimitation de la géométrie B.

[Note]

Cette opérande utilisera tous les index qui peuvent être disponibles sur les géométries.

Exemples

SELECT tbl1.column1, tbl2.column1, tbl1.column2 << tbl2.column2 AS left
FROM
  ( VALUES
        (1, 'LINESTRING (1 2, 1 5)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING (0 0, 4 3)'::geometry),
        (3, 'LINESTRING (6 0, 6 5)'::geometry),
        (4, 'LINESTRING (2 2, 5 6)'::geometry)) AS tbl2;

 column1 | column1 | left
---------+---------+------
           1 |       2 | f
           1 |       3 | t
           1 |       4 | t
(3 rows)

Voir aussi

>>, |>>, <<|


Name

<<| — Renvoie TRUE si la boîte de délimitation de A est strictement inférieure à celle de B.

Synopsis

boolean <<|( geometry A , geometry B );

Description

L'opérateur <<| renvoie TRUE si la boîte de délimitation de la géométrie A est strictement inférieure à la boîte de délimitation de la géométrie B.

[Note]

Cette opérande utilisera tous les index qui peuvent être disponibles sur les géométries.

Exemples

SELECT tbl1.column1, tbl2.column1, tbl1.column2 <<| tbl2.column2 AS below
FROM
  ( VALUES
        (1, 'LINESTRING (0 0, 4 3)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING (1 4, 1 7)'::geometry),
        (3, 'LINESTRING (6 1, 6 5)'::geometry),
        (4, 'LINESTRING (2 3, 5 6)'::geometry)) AS tbl2;

 column1 | column1 | below
---------+---------+-------
           1 |       2 | t
           1 |       3 | f
           1 |       4 | f
(3 rows)

Voir aussi

<<, >>, |>>


Name

= — Renvoie TRUE si les coordonnées et l'ordre des coordonnées de la géométrie/géographie A sont les mêmes que les coordonnées et l'ordre des coordonnées de la géométrie/géographie B.

Synopsis

boolean =( geometry A , geometry B );

boolean =( geography A , geography B );

Description

L'opérateur = renvoie TRUE si les coordonnées et l'ordre des coordonnées de la géométrie/géographie A sont les mêmes que les coordonnées et l'ordre des coordonnées de la géométrie/géographie B. PostgreSQL utilise les opérateurs =, <, et > définis pour les géométries pour effectuer des classements internes et des comparaisons de géométries (c'est-à-dire dans une clause GROUP BY ou ORDER BY).

[Note]

Seules les géométries/géographies qui sont exactement égales à tous égards, avec les mêmes coordonnées, dans le même ordre, sont considérées comme égales par cet opérateur. Pour une "égalité spatiale", qui ignore des choses comme l'ordre des coordonnées, et peut détecter des caractéristiques qui couvrent la même zone spatiale avec des représentations différentes, utilisez ST_OrderingEquals ou ST_Equals

[Caution]

Cet opérande n'utilisera PAS les index qui peuvent être disponibles sur les géométries. Pour un test d'égalité exact assisté par index, combinez = avec &&.

Modifié : 2.4.0, dans les versions précédentes, il s'agissait d'une égalité de boîte de délimitation et non d'une égalité géométrique. Si vous avez besoin d'une égalité de boîte de délimitation, utilisez ~= à la place.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

SELECT 'LINESTRING(0 0, 0 1, 1 0)'::geometry = 'LINESTRING(1 1, 0 0)'::geometry;
 ?column?
----------
 f
(1 row)

SELECT ST_AsText(column1)
FROM ( VALUES
        ('LINESTRING(0 0, 1 1)'::geometry),
        ('LINESTRING(1 1, 0 0)'::geometry)) AS foo;
          st_astext
---------------------
 LINESTRING(0 0,1 1)
 LINESTRING(1 1,0 0)
(2 rows)

-- Note: the GROUP BY uses the "=" to compare for geometry equivalency.
SELECT ST_AsText(column1)
FROM ( VALUES
        ('LINESTRING(0 0, 1 1)'::geometry),
        ('LINESTRING(1 1, 0 0)'::geometry)) AS foo
GROUP BY column1;
      st_astext
---------------------
 LINESTRING(0 0,1 1)
 LINESTRING(1 1,0 0)
(2 rows)

-- In versions prior to 2.0, this used to return true --
 SELECT ST_GeomFromText('POINT(1707296.37 4820536.77)') =
        ST_GeomFromText('POINT(1707296.27 4820536.87)') As pt_intersect;

--pt_intersect --
f


Name

>> — Renvoie TRUE si la boîte de délimitation de A est strictement à droite de celle de B.

Synopsis

boolean >>( geometry A , geometry B );

Description

L'opérateur >> renvoie TRUE si la boîte de délimitation de la géométrie A est strictement à droite de la boîte de délimitation de la géométrie B.

[Note]

Cette opérande utilisera tous les index qui peuvent être disponibles sur les géométries.

Exemples

SELECT tbl1.column1, tbl2.column1, tbl1.column2 
>
> tbl2.column2 AS right
FROM
  ( VALUES
        (1, 'LINESTRING (2 3, 5 6)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING (1 4, 1 7)'::geometry),
        (3, 'LINESTRING (6 1, 6 5)'::geometry),
        (4, 'LINESTRING (0 0, 4 3)'::geometry)) AS tbl2;

 column1 | column1 | right
---------+---------+-------
           1 |       2 | t
           1 |       3 | f
           1 |       4 | f
(3 rows)

Voir aussi

<<, |>>, <<|


Name

@ — Renvoie TRUE si la boîte de délimitation de A est contenue par celle de B.

Synopsis

boolean @( geometry A , geometry B );

Description

L'opérateur @ renvoie TRUE si la boîte de délimitation de la géométrie A est complètement contenue par la boîte de délimitation de la géométrie B.

[Note]

Cette opérande utilisera tous les index qui peuvent être disponibles sur les géométries.

Exemples

SELECT tbl1.column1, tbl2.column1, tbl1.column2 @ tbl2.column2 AS contained
FROM
  ( VALUES
        (1, 'LINESTRING (1 1, 3 3)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING (0 0, 4 4)'::geometry),
        (3, 'LINESTRING (2 2, 4 4)'::geometry),
        (4, 'LINESTRING (1 1, 3 3)'::geometry)) AS tbl2;

 column1 | column1 | contained
---------+---------+-----------
           1 |       2 | t
           1 |       3 | f
           1 |       4 | t
(3 rows)

Voir aussi

~, &&


Name

@(geometry,box2df) — Renvoie TRUE si la boîte de délimitation 2D d'une géométrie est contenue dans une boîte de délimitation 2D à précision flottante (BOX2DF).

Synopsis

boolean @( geometry A , box2df B );

Description

L'opérateur @ renvoie TRUE si la boîte de délimitation 2D de la géométrie A est contenue dans la boîte de délimitation 2D B, en utilisant la précision float. Cela signifie que si B est un box2d (double précision), il sera converti en interne en une boîte de délimitation 2D de précision flottante (BOX2DF)

[Note]

Cet opérande est destiné à être utilisé en interne par les index BRIN, plus que par les utilisateurs.

Disponibilité : 2.3.0 le support des Block Range INdexes (BRIN) a été introduit. Nécessite PostgreSQL 9.5+.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

SELECT ST_Buffer(ST_GeomFromText('POINT(2 2)'), 1) @ ST_MakeBox2D(ST_Point(0,0), ST_Point(5,5)) AS is_contained;

 is_contained
--------------
 t
(1 row)

Name

@(box2df,geometry) — Renvoie TRUE si une boîte de délimitation de précision flottante 2D (BOX2DF) est contenue dans la boîte de délimitation 2D d'une géométrie.

Synopsis

boolean @( box2df A , geometry B );

Description

L'opérateur @ renvoie TRUE si la boîte de délimitation 2D A est contenue dans la boîte de délimitation 2D de la géométrie B, en utilisant la précision float. Cela signifie que si B est un box2d (double précision), il sera converti en interne en une boîte de délimitation 2D de précision flottante (BOX2DF)

[Note]

Cet opérande est destiné à être utilisé en interne par les index BRIN, plus que par les utilisateurs.

Disponibilité : 2.3.0 le support des Block Range INdexes (BRIN) a été introduit. Nécessite PostgreSQL 9.5+.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

SELECT ST_MakeBox2D(ST_Point(2,2), ST_Point(3,3)) @ ST_Buffer(ST_GeomFromText('POINT(1 1)'), 10) AS is_contained;

 is_contained
--------------
 t
(1 row)

Name

@(box2df,box2df) — Renvoie TRUE si une boîte de délimitation de précision flottante 2D (BOX2DF) est contenue dans une autre boîte de délimitation de précision flottante 2D.

Synopsis

boolean @( box2df A , box2df B );

Description

L'opérateur @ renvoie TRUE si la boîte de délimitation 2D A est contenue dans la boîte de délimitation 2D B, en utilisant la précision float. Cela signifie que si A (ou B) est un box2d (double précision), il sera converti en interne en une boîte de délimitation 2D à précision flottante (BOX2DF)

[Note]

Cet opérande est destiné à être utilisé en interne par les index BRIN, plus que par les utilisateurs.

Disponibilité : 2.3.0 le support des Block Range INdexes (BRIN) a été introduit. Nécessite PostgreSQL 9.5+.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

SELECT ST_MakeBox2D(ST_Point(2,2), ST_Point(3,3)) @ ST_MakeBox2D(ST_Point(0,0), ST_Point(5,5)) AS is_contained;

 is_contained
--------------
 t
(1 row)

Name

|&> — Renvoie TRUE si la boîte de délimitation de A chevauche ou est au-dessus de celle de B.

Synopsis

boolean |&>( geometry A , geometry B );

Description

L'opérateur |&> renvoie TRUE si la boîte de délimitation de la géométrie A chevauche ou est au-dessus de la boîte de délimitation de la géométrie B, ou plus exactement, chevauche ou n'est PAS au-dessous de la boîte de délimitation de la géométrie B.

[Note]

Cette opérande utilisera tous les index qui peuvent être disponibles sur les géométries.

Exemples

SELECT tbl1.column1, tbl2.column1, tbl1.column2 |&
> tbl2.column2 AS overabove
FROM
  ( VALUES
        (1, 'LINESTRING(6 0, 6 4)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING(0 0, 3 3)'::geometry),
        (3, 'LINESTRING(0 1, 0 5)'::geometry),
        (4, 'LINESTRING(1 2, 4 6)'::geometry)) AS tbl2;

 column1 | column1 | overabove
---------+---------+-----------
           1 |       2 | t
           1 |       3 | f
           1 |       4 | f
(3 rows)

Voir aussi

&&, &>, &<|, &<


Name

|>> — Renvoie TRUE si la boîte de délimitation de A est strictement au-dessus de celle de B.

Synopsis

boolean |>>( geometry A , geometry B );

Description

L'opérateur |>> renvoie TRUE si la boîte de délimitation de la géométrie A est strictement au-dessus de la boîte de délimitation de la géométrie B.

[Note]

Cette opérande utilisera tous les index qui peuvent être disponibles sur les géométries.

Exemples

SELECT tbl1.column1, tbl2.column1, tbl1.column2 |>> tbl2.column2 AS above
FROM
  ( VALUES
        (1, 'LINESTRING (1 4, 1 7)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING (0 0, 4 2)'::geometry),
        (3, 'LINESTRING (6 1, 6 5)'::geometry),
        (4, 'LINESTRING (2 3, 5 6)'::geometry)) AS tbl2;

 column1 | column1 | above
---------+---------+-------
           1 |       2 | t
           1 |       3 | f
           1 |       4 | f
(3 rows)

Voir aussi

<<, >>, <<|


Name

~ — Renvoie TRUE si la boîte de délimitation de A contient celle de B.

Synopsis

boolean ~( geometry A , geometry B );

Description

L'opérateur ~ renvoie TRUE si la boîte de délimitation de la géométrie A contient complètement la boîte de délimitation de la géométrie B.

[Note]

Cette opérande utilisera tous les index qui peuvent être disponibles sur les géométries.

Exemples

SELECT tbl1.column1, tbl2.column1, tbl1.column2 ~ tbl2.column2 AS contains
FROM
  ( VALUES
        (1, 'LINESTRING (0 0, 3 3)'::geometry)) AS tbl1,
  ( VALUES
        (2, 'LINESTRING (0 0, 4 4)'::geometry),
        (3, 'LINESTRING (1 1, 2 2)'::geometry),
        (4, 'LINESTRING (0 0, 3 3)'::geometry)) AS tbl2;

 column1 | column1 | contains
---------+---------+----------
           1 |       2 | f
           1 |       3 | t
           1 |       4 | t
(3 rows)

Voir aussi

@, &&


Name

~(geometry,box2df) — Renvoie TRUE si la boîte de délimitation 2D d'une géométrie contient une boîte de délimitation de précision flottante 2D (GIDX).

Synopsis

boolean ~( geometry A , box2df B );

Description

L'opérateur ~ renvoie TRUE si la boîte de délimitation 2D d'une géométrie A contient la boîte de délimitation 2D B, en utilisant la précision float. Cela signifie que si B est un box2d (double précision), il sera converti en interne en une boîte de délimitation 2D de précision flottante (BOX2DF)

[Note]

Cet opérande est destiné à être utilisé en interne par les index BRIN, plus que par les utilisateurs.

Disponibilité : 2.3.0 le support des Block Range INdexes (BRIN) a été introduit. Nécessite PostgreSQL 9.5+.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

SELECT ST_Buffer(ST_GeomFromText('POINT(1 1)'), 10) ~ ST_MakeBox2D(ST_Point(0,0), ST_Point(2,2)) AS contains;

 contains
----------
 t
(1 row)

Name

~(box2df,geometry) — Renvoie TRUE si une boîte de délimitation de précision flottante 2D (BOX2DF) contient la boîte de délimitation 2D d'une géométrie.

Synopsis

boolean ~( box2df A , geometry B );

Description

L'opérateur ~ renvoie TRUE si la boîte de délimitation 2D A contient la boîte de délimitation de la géométrie B, en utilisant la précision float. Cela signifie que si A est un box2d (double précision), il sera converti en interne en une boîte de délimitation 2D de précision flottante (BOX2DF)

[Note]

Cet opérande est destiné à être utilisé en interne par les index BRIN, plus que par les utilisateurs.

Disponibilité : 2.3.0 le support des Block Range INdexes (BRIN) a été introduit. Nécessite PostgreSQL 9.5+.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

SELECT ST_MakeBox2D(ST_Point(0,0), ST_Point(5,5)) ~ ST_Buffer(ST_GeomFromText('POINT(2 2)'), 1) AS contains;

 contains
----------
 t
(1 row)

Name

~(box2df,box2df) — Renvoie TRUE si une boîte de délimitation de précision flottante 2D (BOX2DF) contient une autre boîte de délimitation de précision flottante 2D (BOX2DF).

Synopsis

boolean ~( box2df A , box2df B );

Description

L'opérateur ~ renvoie TRUE si la boîte de délimitation 2D A contient la boîte de délimitation 2D B, en utilisant la précision float. Cela signifie que si A est un box2d (double précision), il sera converti en interne en une boîte de délimitation 2D de précision flottante (BOX2DF)

[Note]

Cet opérande est destiné à être utilisé en interne par les index BRIN, plus que par les utilisateurs.

Disponibilité : 2.3.0 le support des Block Range INdexes (BRIN) a été introduit. Nécessite PostgreSQL 9.5+.

Cette méthode prend en charge les types Circular String et Curve.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

SELECT ST_MakeBox2D(ST_Point(0,0), ST_Point(5,5)) ~ ST_MakeBox2D(ST_Point(2,2), ST_Point(3,3)) AS contains;

 contains
----------
 t
(1 row)

Name

~= — Renvoie TRUE si la boîte de délimitation de A est la même que celle de B.

Synopsis

boolean ~=( geometry A , geometry B );

Description

L'opérateur ~= renvoie TRUE si la boîte de délimitation de la géométrie/géographie A est la même que la boîte de délimitation de la géométrie/géographie B.

[Note]

Cette opérande utilisera tous les index qui peuvent être disponibles sur les géométries.

Disponibilité : 1.5.0 comportement changé

Cette fonction prend en charge les surfaces Polyhedral.

[Warning]

Cet opérateur a changé de comportement dans PostGIS 1.5, passant de la vérification de l'égalité géométrique réelle à la vérification de l'égalité du rectangle de délimitation. Pour compliquer les choses, le comportement de votre base de données dépend également du type de mise à niveau (hard ou soft) que vous avez effectué. Pour savoir quel est le comportement de votre base de données, vous pouvez exécuter la requête ci-dessous. Pour vérifier l'égalité réelle, utilisez ST_OrderingEquals ou ST_Equals.

Exemples

select 'LINESTRING(0 0, 1 1)'::geometry ~= 'LINESTRING(0 1, 1 0)'::geometry as equality;
 equality   |
-----------------+
          t    |
                        

7.10.2. Opérateurs de distance

  • <-> — Renvoie la distance en 2D entre A et B.
  • |=| — Renvoie la distance entre les trajectoires A et B à leur point d'approche le plus proche.
  • <#> — Renvoie la distance 2D entre les boîtes de délimitation A et B.
  • <<->> — Renvoie la distance n-D entre les géométries A et B ou les boîtes englobantes

Name

<-> — Renvoie la distance en 2D entre A et B.

Synopsis

double precision <->( geometry A , geometry B );

double precision <->( geography A , geography B );

Description

L'opérateur <-> renvoie la distance 2D entre deux géométries. Utilisé dans la clause "ORDER BY" fournit des ensembles de résultats de plus proches voisins assistés par index. Pour PostgreSQL inférieur à 9.5, donne uniquement la distance centroïde des boîtes englobantes et pour PostgreSQL 9.5+, fait une vraie recherche de distance KNN donnant la vraie distance entre les géométries, et la sphère de distance pour les géographies.

[Note]

Cet opérande utilise les index 2D GiST qui peuvent être disponibles sur les géométries. Il est différent des autres opérateurs qui utilisent des index spatiaux en ce sens que l'index spatial n'est utilisé que lorsque l'opérateur est dans la clause ORDER BY.

[Note]

L'index n'intervient que si l'une des géométries est une constante (pas dans une sous-requête/cte). Par exemple, 'SRID=3005;POINT(1011102 450541)'::geometry au lieu de a.geom

Reportez-vous à l'atelier PostGIS : La recherche du plus proche voisin pour un exemple détaillé.

Amélioré : 2.2.0 -- Comportement KNN ("K nearest neighbor") réel pour la géométrie et la géographie pour PostgreSQL 9.5+. Note : pour la géographie, KNN est basé sur la sphère plutôt que sur le sphéroïde. Pour PostgreSQL 9.4 et moins, le support de la géographie est nouveau mais ne supporte que le centroïde de la boîte de délimitation.

Modifié : 2.2.0 -- Pour les utilisateurs de PostgreSQL 9.5, l'ancienne syntaxe Hybrid peut être plus lente, donc vous voudrez vous débarrasser de ce hack si vous exécutez votre code uniquement sur PostGIS 2.2+ 9.5+. Voir les exemples ci-dessous.

Disponibilité : 2.0.0 -- Le KNN fournit des voisins les plus proches basés sur les distances entre les centroïdes géométriques au lieu des distances réelles. Résultats exacts pour les points, inexacts pour tous les autres types. Disponible pour PostgreSQL 9.1+

Exemples

SELECT ST_Distance(geom, 'SRID=3005;POINT(1011102 450541)'::geometry) as d,edabbr, vaabbr
FROM va2005
ORDER BY d limit 10;

        d         | edabbr | vaabbr
------------------+--------+--------
                0 | ALQ    | 128
 5541.57712511724 | ALQ    | 129A
 5579.67450712005 | ALQ    | 001
  6083.4207708641 | ALQ    | 131
  7691.2205404848 | ALQ    | 003
 7900.75451037313 | ALQ    | 122
 8694.20710669982 | ALQ    | 129B
 9564.24289057111 | ALQ    | 130
  12089.665931705 | ALQ    | 127
 18472.5531479404 | ALQ    | 002
(10 rows)

Puis la réponse brute KNN :

SELECT st_distance(geom, 'SRID=3005;POINT(1011102 450541)'::geometry) as d,edabbr, vaabbr
FROM va2005
ORDER BY geom <-> 'SRID=3005;POINT(1011102 450541)'::geometry limit 10;

        d         | edabbr | vaabbr
------------------+--------+--------
                0 | ALQ    | 128
 5541.57712511724 | ALQ    | 129A
 5579.67450712005 | ALQ    | 001
  6083.4207708641 | ALQ    | 131
  7691.2205404848 | ALQ    | 003
 7900.75451037313 | ALQ    | 122
 8694.20710669982 | ALQ    | 129B
 9564.24289057111 | ALQ    | 130
  12089.665931705 | ALQ    | 127
 18472.5531479404 | ALQ    | 002
(10 rows)

Si vous exécutez "EXPLAIN ANALYZE" sur les deux requêtes, vous constaterez une amélioration des performances pour la seconde.

Pour les utilisateurs utilisant PostgreSQL < 9.5, utilisez une requête hybride pour trouver les vrais plus proches voisins. D'abord une requête CTE utilisant le KNN assisté par index, puis une requête exacte pour obtenir l'ordre correct :

WITH index_query AS (
  SELECT ST_Distance(geom, 'SRID=3005;POINT(1011102 450541)'::geometry) as d,edabbr, vaabbr
        FROM va2005
  ORDER BY geom <-> 'SRID=3005;POINT(1011102 450541)'::geometry LIMIT 100)
  SELECT *
        FROM index_query
  ORDER BY d limit 10;

        d         | edabbr | vaabbr
------------------+--------+--------
                0 | ALQ    | 128
 5541.57712511724 | ALQ    | 129A
 5579.67450712005 | ALQ    | 001
  6083.4207708641 | ALQ    | 131
  7691.2205404848 | ALQ    | 003
 7900.75451037313 | ALQ    | 122
 8694.20710669982 | ALQ    | 129B
 9564.24289057111 | ALQ    | 130
  12089.665931705 | ALQ    | 127
 18472.5531479404 | ALQ    | 002
(10 rows)



Name

|=| — Renvoie la distance entre les trajectoires A et B à leur point d'approche le plus proche.

Synopsis

double precision |=|( geometry A , geometry B );

Description

L'opérateur |=| renvoie la distance 3D entre deux trajectoires (Voir ST_IsValidTrajectory). C'est la même chose que ST_DistanceCPA mais en tant qu'opérateur, il peut être utilisé pour effectuer des recherches du plus proche voisin en utilisant un index à N dimensions (nécessite PostgreSQL 9.5.0 ou plus).

[Note]

Cet opérande utilisera les index ND GiST qui peuvent être disponibles sur les géométries. Il est différent des autres opérateurs qui utilisent des index spatiaux en ce sens que l'index spatial n'est utilisé que lorsque l'opérateur est dans la clause ORDER BY.

[Note]

L'index n'intervient que si l'une des géométries est une constante (pas dans une sous-requête/cte). Par exemple, 'SRID=3005;LINESTRINGM(0 0 0,0 0 1)'::geometry au lieu de a.geom

Disponibilité : 2.2.0. La prise en charge des index est disponible uniquement pour PostgreSQL 9.5+

Exemples

-- Save a literal query trajectory in a psql variable...
\set qt 'ST_AddMeasure(ST_MakeLine(ST_MakePointM(-350,300,0),ST_MakePointM(-410,490,0)),10,20)'
-- Run the query !
SELECT track_id, dist FROM (
  SELECT track_id, ST_DistanceCPA(tr,:qt) dist
  FROM trajectories
  ORDER BY tr |=| :qt
  LIMIT 5
) foo;
 track_id        dist
----------+-------------------
      395 | 0.576496831518066
      380 |  5.06797130410151
      390 |  7.72262293958322
      385 |   9.8004461358071
      405 |  10.9534397988433
(5 rows)

Name

<#> — Renvoie la distance 2D entre les boîtes de délimitation A et B.

Synopsis

double precision <#>( geometry A , geometry B );

Description

L'opérateur <#> renvoie la distance entre deux boîtes de délimitation en virgule flottante, en les lisant éventuellement à partir d'un index spatial (PostgreSQL 9.1+ requis). Utile pour effectuer un ordonnancement par distance du plus proche voisin approximate.

[Note]

Cet opérande utilisera tous les index qui peuvent être disponibles sur les géométries. Il est différent des autres opérateurs qui utilisent des index spatiaux en ce sens que l'index spatial n'est utilisé que lorsque l'opérateur est dans la clause ORDER BY.

[Note]

L'index n'intervient que si l'une des géométries est une constante, par exemple ORDER BY (ST_GeomFromText('POINT(1 2)') <#> geom) au lieu de g1.geom <#>.

Disponibilité : 2.0.0 -- KNN disponible uniquement pour PostgreSQL 9.1+

Exemples

SELECT *
FROM (
SELECT b.tlid, b.mtfcc,
        b.geom <#
> ST_GeomFromText('LINESTRING(746149 2948672,745954 2948576,
                745787 2948499,745740 2948468,745712 2948438,
                745690 2948384,745677 2948319)',2249) As b_dist,
                ST_Distance(b.geom, ST_GeomFromText('LINESTRING(746149 2948672,745954 2948576,
                745787 2948499,745740 2948468,745712 2948438,
                745690 2948384,745677 2948319)',2249)) As act_dist
    FROM bos_roads As b
    ORDER BY b_dist, b.tlid
    LIMIT 100) As foo
    ORDER BY act_dist, tlid LIMIT 10;

   tlid    | mtfcc |      b_dist      |     act_dist
-----------+-------+------------------+------------------
  85732027 | S1400 |                0 |                0
  85732029 | S1400 |                0 |                0
  85732031 | S1400 |                0 |                0
  85734335 | S1400 |                0 |                0
  85736037 | S1400 |                0 |                0
 624683742 | S1400 |                0 | 128.528874268666
  85719343 | S1400 | 260.839270432962 | 260.839270432962
  85741826 | S1400 | 164.759294123275 | 260.839270432962
  85732032 | S1400 |           277.75 | 311.830282365264
  85735592 | S1400 |           222.25 | 311.830282365264
(10 rows)


Name

<<->> — Renvoie la distance n-D entre les géométries A et B ou les boîtes englobantes

Synopsis

double precision <<->>( geometry A , geometry B );

Description

L'opérateur <<->> renvoie la distance n-D (euclidienne) entre les centroïdes des boîtes englobantes de deux géométries. Utile pour effectuer le classement par distance du plus proche voisin approximate.

[Note]

Cet opérande utilise les index GiST n-D qui peuvent être disponibles sur les géométries. Il est différent des autres opérateurs qui utilisent des index spatiaux en ce sens que l'index spatial n'est utilisé que lorsque l'opérateur est dans la clause ORDER BY.

[Note]

L'index n'intervient que si l'une des géométries est une constante (pas dans une sous-requête/cte). Par exemple, 'SRID=3005;POINT(1011102 450541)'::geometry au lieu de a.geom

Disponibilité : 2.2.0 -- KNN disponible uniquement pour PostgreSQL 9.1+

Voir aussi

<->

7.11. Relations spatiales

Abstract

Ces fonctions déterminent les relations spatiales entre les géométries.

7.11.1. Relations topologiques

  • ST_3DIntersects — Teste si deux géométries se croisent dans l'espace en 3D - uniquement pour les points, les lignes, les polygones, les surfaces polyédriques (aire)
  • ST_Contains — Tests si chaque point de B est situé dans A, et que leurs intérieurs ont un point commun
  • ST_ContainsProperly — Tests si chaque point de B se trouve à l'intérieur de A
  • ST_CoveredBy — Tests si chaque point de A se trouve dans B
  • ST_Covers — Tests si chaque point de B est situé dans A
  • ST_Crosses — Teste si deux géométries ont en commun certains points intérieurs, mais pas tous
  • ST_Disjoint — Teste si deux géométries n'ont pas de points communs
  • ST_Equals — Teste si deux géométries comprennent le même ensemble de points
  • ST_Intersects — Teste si deux géométries se croisent (elles ont au moins un point en commun)
  • ST_LineCrossingDirection — Renvoie un nombre indiquant le comportement de croisement de deux LineStrings
  • ST_OrderingEquals — Teste si deux géométries représentent la même géométrie et ont des points dans le même ordre directionnel
  • ST_Overlaps — Teste si deux géométries ont la même dimension et se croisent, mais si chacune a au moins un point qui n'est pas dans l'autre
  • ST_Relate — Teste si deux géométries ont une relation topologique correspondant à un modèle de matrice d'intersection, ou calcule leur matrice d'intersection
  • ST_RelateMatch — Teste si une matrice d'intersection DE-9IM correspond à un modèle de matrice d'intersection
  • ST_Touches — Teste si deux géométries ont au moins un point en commun, mais que leurs intérieurs ne se croisent pas
  • ST_Within — Tests si chaque point de A se trouve dans B, et que leurs intérieurs ont un point commun

Name

ST_3DIntersects — Teste si deux géométries se croisent dans l'espace en 3D - uniquement pour les points, les lignes, les polygones, les surfaces polyédriques (aire)

Synopsis

boolean ST_3DIntersects( geometry geomA , geometry geomB );

Description

Overlaps, Touches, Within impliquent tous une intersection spatiale. Si l'un des éléments susmentionnés renvoie un résultat positif, les géométries se recoupent également dans l'espace. Disjoint implique faux pour l'intersection spatiale.

[Note]

Cette fonction inclut une comparaison de la boîte englobante qui utilise tous les index disponibles sur les géométries.

[Note]

En raison des défaillances de la robustesse flottante, les géométries ne se croisent pas toujours comme on s'y attendrait après le traitement géométrique. Par exemple, le point le plus proche d'une géométrie sur une ligne peut ne pas se trouver sur la ligne. Pour ce type de problèmes, lorsqu'une distance d'un centimètre est considérée comme une intersection, utilisez ST_3DDWithin.

Modifié : 3.0.0 SFCGAL backend supprimé, GEOS backend supporte les TINs.

Disponibilité : 2.0.0