Types de données spatiales
Points, lignes et polygones en SQL.
Types de données spatiales est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce qu'une donnée spatiale ?
Les données spatiales décrivent des emplacements, des formes et des surfaces du monde réel. Contrairement à un simple nombre ou à une chaîne de caractères, une valeur spatiale possède une signification géométrique : un point sur une carte, un tronçon de route ou la frontière d'un pays.
PostGIS est une extension de PostgreSQL qui ajoute de puissants types et fonctions de données spatiales, transformant votre base de données en véritable système d'information géographique (GIS).
-- Enable the PostGIS extension
CREATE EXTENSION IF NOT EXISTS postgis;Le type GEOMETRY
Le type spatial fondamental de PostGIS est la géométrie. Il stocke des formes dans un espace de coordonnées plan (euclidien). Lors de la création d'une colonne, vous pouvez spécifier un sous-type tel que POINT, LINESTRING ou POLYGON comme contrainte.
Indiquer le SRID (identifiant de référence spatiale) avec le sous-type permet à PostGIS de savoir quel système de coordonnées vos données utilisent.
CREATE TABLE locations (
id SERIAL PRIMARY KEY,
name TEXT,
geom geometry(POINT, 4326)
);Insérer un POINT
Un POINT représente un emplacement unique avec des coordonnées X (longitude) et Y (latitude). La fonction ST_GeomFromText convertit une chaîne de texte bien connu (WKT) en valeur géométrique.
Le SRID 4326 correspond au système de coordonnées WGS 84 utilisé par les appareils GPS du monde entier.
INSERT INTO locations (name, geom)
VALUES
('Eiffel Tower', ST_GeomFromText('POINT(2.2945 48.8584)', 4326)),
('Big Ben', ST_GeomFromText('POINT(-0.1246 51.5007)', 4326)),
('Colosseum', ST_GeomFromText('POINT(12.4922 41.8902)', 4326));
SELECT name, ST_AsText(geom) AS wkt FROM locations;Le type LINESTRING
Un LINESTRING est une séquence ordonnée d'au moins deux points reliés par des segments droits. Il est idéal pour représenter des routes, des rivières ou toute autre entité linéaire.
Chaque paire de nombres dans le WKT représente un sommet (longitude latitude). PostGIS stocke l'ensemble du trajet comme une seule valeur géométrique.
CREATE TABLE roads (
id SERIAL PRIMARY KEY,
name TEXT,
path geometry(LINESTRING, 4326)
);
INSERT INTO roads (name, path)
VALUES (
'High Street',
ST_GeomFromText(
'LINESTRING(-0.125 51.500, -0.120 51.502, -0.115 51.505)',
4326
)
);
SELECT name, ST_Length(path) AS length_degrees FROM roads;Le type POLYGON
Un POLYGON définit une surface fermée. Sa limite extérieure est un anneau — un LINESTRING fermé dont le premier et le dernier point sont identiques. Un polygone peut également contenir des anneaux intérieurs (des trous) pour représenter, par exemple, un lac au sein d'un parc.
Tous les anneaux doivent être fermés : répétez la coordonnée de départ à la fin.
CREATE TABLE zones (
id SERIAL PRIMARY KEY,
name TEXT,
area geometry(POLYGON, 4326)
);
INSERT INTO zones (name, area)
VALUES (
'Central Park Approx',
ST_GeomFromText(
'POLYGON((-73.9817 40.7681, -73.9580 40.7681,
-73.9580 40.7964, -73.9817 40.7964,
-73.9817 40.7681))',
4326
)
);
SELECT name, ST_Area(area) AS area_sq_deg FROM zones;GEOGRAPHY ou GEOMETRY
PostGIS fournit deux familles de types spatiaux : la géométrie utilise un plan cartésien, tandis que la géographie modélise la Terre comme un sphéroïde courbe.
Utilisez la géographie lorsque vous avez besoin de distances réelles précises en mètres sur de grandes surfaces. Utilisez la géométrie si vous travaillez dans un système de coordonnées projetées local ou si vous avez besoin de performances maximales.
CREATE TABLE cities (
id SERIAL PRIMARY KEY,
name TEXT,
geog geography(POINT, 4326)
);
INSERT INTO cities (name, geog) VALUES
('New York', ST_GeogFromText('POINT(-74.0060 40.7128)')),
('London', ST_GeogFromText('POINT(-0.1278 51.5074)'));
-- Distance in metres using geography
SELECT
a.name AS from_city,
b.name AS to_city,
ROUND(ST_Distance(a.geog, b.geog)::NUMERIC) AS distance_m
FROM cities a, cities b
WHERE a.name = 'New York' AND b.name = 'London';Texte bien connu (WKT) et WKB
Les données spatiales peuvent être sérialisées dans deux formats standard. Le texte bien connu (WKT) est lisible par l'être humain : POINT(2.29 48.86). Le binaire bien connu (WKB) est une représentation binaire compacte utilisée en interne et pour le transfert de données.
PostGIS fournit ST_AsText et ST_AsBinary pour convertir le stockage interne vers ces formats et inversement.
SELECT
name,
ST_AsText(geom) AS wkt,
ST_AsEWKT(geom) AS ewkt,
encode(ST_AsBinary(geom), 'hex') AS wkb_hex
FROM locations
LIMIT 2;MULTIPOINT, MULTILINESTRING, MULTIPOLYGON
PostGIS prend également en charge les types de multi-géométries, qui regroupent plusieurs formes de même nature en une seule valeur. Cela est utile lorsqu'une entité réelle est constituée de parties disjointes — par exemple, un archipel modélisé comme un MULTIPOLYGON.
Toutes les fonctions spatiales standard fonctionnent de la même manière sur les multi-géométries.
SELECT ST_AsText(
ST_GeomFromText(
'MULTIPOLYGON(
((0 0, 4 0, 4 4, 0 4, 0 0)),
((10 10, 14 10, 14 14, 10 14, 10 10))
)'
)
) AS multi_poly;
SELECT ST_NumGeometries(
ST_GeomFromText(
'MULTIPOLYGON(
((0 0, 4 0, 4 4, 0 4, 0 0)),
((10 10, 14 10, 14 14, 10 14, 10 10))
)'
)
) AS part_count;GEOMETRYCOLLECTION
Une GEOMETRYCOLLECTION est le type spatial le plus général : elle peut contenir un mélange de points, de lignes et de polygones dans une seule valeur. Cette souplesse est utile lorsqu'un jeu de données peut contenir des types de géométrie hétérogènes stockés dans la même colonne.
Vous pouvez extraire les membres individuels avec ST_GeometryN.
SELECT ST_AsText(
ST_GeomFromText(
'GEOMETRYCOLLECTION(
POINT(1 1),
LINESTRING(0 0, 1 1, 2 2),
POLYGON((0 0, 3 0, 3 3, 0 3, 0 0))
)'
)
) AS collection;
SELECT ST_AsText(
ST_GeometryN(
ST_GeomFromText(
'GEOMETRYCOLLECTION(POINT(1 1), LINESTRING(0 0, 1 1))'
),
1
)
) AS first_member;Index spatiaux avec GIST
Les requêtes spatiales qui vérifient l'inclusion ou la proximité doivent comparer la géométrie de chaque ligne, ce qui peut entraîner le parcours de millions de formes. Un index GIST accélère considérablement cette opération en indexant les boîtes englobantes des géométries, ce qui permet à PostgreSQL d'ignorer les lignes qui ne peuvent en aucun cas correspondre.
Créez toujours un index GIST sur les colonnes de géométrie ou de géographie que vous interrogez fréquemment.
-- Create a GIST index on a geometry column
CREATE INDEX idx_locations_geom
ON locations
USING GIST (geom);
-- PostgreSQL will now use the index for spatial operators
EXPLAIN ANALYZE
SELECT name
FROM locations
WHERE ST_DWithin(
geom,
ST_GeomFromText('POINT(2.3 48.9)', 4326),
1.0
);Lire les propriétés d'une géométrie
PostGIS fournit des fonctions d'accès permettant d'extraire les propriétés de toute géométrie. ST_X et ST_Y renvoient les coordonnées d'un point, ST_SRID renvoie l'identifiant de référence spatiale et ST_GeometryType renvoie le nom du sous-type.
Ces fonctions sont essentielles pour examiner et valider les données spatiales.
SELECT
name,
ST_X(geom) AS longitude,
ST_Y(geom) AS latitude,
ST_SRID(geom) AS srid,
ST_GeometryType(geom) AS geom_type,
ST_IsValid(geom) AS is_valid
FROM locations;Vérification rapide
Vérifiez votre compréhension des types de données spatiales de PostGIS.
Récapitulatif de la leçon
Dans cette leçon, vous avez exploré les principaux types de données spatiales fournis par PostGIS. Vous avez appris que POINT, LINESTRING et POLYGON sont les trois sous-types fondamentaux de géométrie, et que les variantes multi-géométriques (MULTIPOINT, MULTILINESTRING, MULTIPOLYGON) ainsi que le type généraliste GEOMETRYCOLLECTION couvrent les formes plus complexes.
Vous avez vu la différence entre le type plan géométrie et le type sphéroïdal géographie, ainsi que la manière de choisir entre les deux. Le texte bien connu (WKT) vous permet de lire et d'écrire des valeurs spatiales sous forme de chaînes lisibles par l'être humain, tandis que les index GIST maintiennent de bonnes performances pour les requêtes spatiales à grande échelle. Des fonctions d'accès telles que ST_X, ST_SRID et ST_GeometryType vous permettent d'examiner directement toute valeur géométrique dans une requête.
Questions Fréquemment Posées
La leçon « Types de données spatiales » est-elle gratuite ?
Oui — le texte complet de « Types de données spatiales » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Types de données spatiales » ?
Points, lignes et polygones en SQL. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Types de données spatiales » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Types de données spatiales
- Distance et plus proches voisins
- Jointures spatiales et inclusion
- Index spatiaux (GiST)