Ruimtelijke gegevenstypen
Punten, lijnen en polygonen in SQL
Ruimtelijke gegevenstypen is een gratis SQL Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject SQL Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus SQL Academy bevat in totaal 4 lessen.
Wat zijn ruimtelijke gegevens?
Ruimtelijke gegevens beschrijven locaties, vormen en gebieden in de echte wereld. In tegenstelling tot een gewoon getal of een gewone tekenreeks bevat een ruimtelijke waarde geometrische betekenis — bijvoorbeeld een punt op een kaart, een wegsegment of de grens van een land.
PostGIS is een PostgreSQL-extensie die krachtige ruimtelijke gegevenstypen en functies toevoegt en je database omvormt tot een volwaardig geografisch informatiesysteem (GIS).
-- Enable the PostGIS extension
CREATE EXTENSION IF NOT EXISTS postgis;Het type GEOMETRY
Het belangrijkste ruimtelijke type in PostGIS is geometry. Het slaat vormen op in een vlakke (Euclidische) coördinatenruimte. Bij het maken van een kolom kun je een subtype zoals POINT, LINESTRING of POLYGON als beperking opgeven.
Als je de SRID (ID van het ruimtelijke referentiesysteem) naast het subtype opgeeft, weet PostGIS welk coördinatensysteem je gegevens gebruiken.
CREATE TABLE locations (
id SERIAL PRIMARY KEY,
name TEXT,
geom geometry(POINT, 4326)
);Een POINT invoegen
Een POINT vertegenwoordigt één locatie met X-coördinaten (lengtegraad) en Y-coördinaten (breedtegraad). De functie ST_GeomFromText zet een tekenreeks in WKT-formaat om in een geometriewaarde.
SRID 4326 is het WGS 84-coördinatensysteem dat wereldwijd door GPS-apparaten wordt gebruikt.
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;Het type LINESTRING
Een LINESTRING is een geordende reeks van twee of meer punten die met rechte segmenten zijn verbonden. Het type is ideaal voor het weergeven van wegen, rivieren en andere lineaire elementen.
Elk getallenpaar in de WKT is één hoekpunt (lengtegraad, breedtegraad). PostGIS slaat het volledige pad op als één geometriewaarde.
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;Het type POLYGON
Een POLYGON definieert een omsloten gebied. De buitenrand is een ring — een gesloten LINESTRING waarvan het eerste en laatste punt identiek zijn. Een polygoon kan ook binnenringen (gaten) hebben om gebieden zoals een meer in een park weer te geven.
Alle ringen moeten gesloten zijn: herhaal de begincoördinaat aan het einde.
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 versus GEOMETRY
PostGIS biedt twee families van ruimtelijke typen: geometry gebruikt een vlak, cartesisch coördinatensysteem, terwijl geography de aarde modelleert als een gekromde sferoïde.
Gebruik geography wanneer je nauwkeurige afstanden in meters over grote gebieden nodig hebt. Gebruik geometry wanneer je in een lokaal geprojecteerd coördinatensysteem werkt of maximale prestaties nodig hebt.
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';Well-Known Text (WKT) en WKB
Ruimtelijke gegevens kunnen in twee standaardindelingen worden geserialiseerd. Well-Known Text (WKT) is mensleesbaar: POINT(2.29 48.86). Well-Known Binary (WKB) is een compacte binaire representatie die intern en voor gegevensoverdracht wordt gebruikt.
PostGIS biedt ST_AsText en ST_AsBinary om te converteren tussen interne opslag en deze indelingen.
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 ondersteunt ook typen voor meerdere geometrieën, waarin verschillende vormen van hetzelfde soort in één waarde worden gegroepeerd. Dat is handig wanneer één element uit de echte wereld uit los van elkaar liggende delen bestaat — bijvoorbeeld een archipel die als MULTIPOLYGON is gemodelleerd.
Alle standaardfuncties voor ruimtelijke gegevens werken op dezelfde manier met meerdere geometrieën.
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
Een GEOMETRYCOLLECTION is het meest algemene ruimtelijke type — het kan een combinatie van punten, lijnen en polygonen in één waarde bevatten. Deze flexibiliteit is handig wanneer een gegevensverzameling verschillende geometr typen kan bevatten die in dezelfde kolom zijn opgeslagen.
Je kunt afzonderlijke onderdelen ophalen met 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;Ruimtelijke indexen met GIST
Ruimtelijke query's die controleren of iets ergens binnen valt of hoe dichtbij iets is, moeten de geometrie van elke rij vergelijken — mogelijk worden daarbij miljoenen vormen doorzocht. Een GIST-index versnelt dit aanzienlijk door de begrenzingsrechthoeken van geometrieën te indexeren, zodat PostgreSQL rijen kan overslaan die onmogelijk aan de voorwaarde kunnen voldoen.
Maak altijd een GIST-index op geometry- of geography-kolommen die je vaak bevraagt.
-- 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
);Geometrie-eigenschappen uitlezen
PostGIS biedt toegangsfuncties om eigenschappen uit elke geometrie te halen. ST_X en ST_Y geven de coördinaten van een punt terug, ST_SRID geeft de ID van het ruimtelijke referentiesysteem terug en ST_GeometryType geeft de naam van het subtype terug.
Deze functies zijn essentieel voor het bekijken en valideren van ruimtelijke gegevens.
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;Korte controle
Toets je kennis van de ruimtelijke gegevenstypen van PostGIS.
Samenvatting van de les
In deze les heb je de belangrijkste ruimtelijke gegevenstypen van PostGIS verkend. Je hebt geleerd dat POINT, LINESTRING en POLYGON de drie fundamentele geometriesubtypen zijn en dat varianten voor meerdere geometrieën (MULTIPOINT, MULTILINESTRING, MULTIPOLYGON) en het algemene type GEOMETRYCOLLECTION complexere vormen afdekken.
Je hebt het verschil gezien tussen het vlakke type geometry en het sferoïdale type geography en geleerd hoe je tussen beide kiest. Met Well-Known Text (WKT) kun je ruimtelijke waarden lezen en schrijven als mensleesbare tekenreeksen, terwijl GIST-indexen ruimtelijke query's op grote schaal snel houden. Met toegangsfuncties zoals ST_X, ST_SRID en ST_GeometryType kun je elke geometriewaarde rechtstreeks in SQL bekijken.
Leer SQL met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 46
- Lessen
- 183
Veelgestelde vragen
Is de les “Ruimtelijke gegevenstypen” gratis?
Ja — de volledige tekst van “Ruimtelijke gegevenstypen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus SQL Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus SQL Academy bevat in totaal 4 lessen.
Wat leer ik in “Ruimtelijke gegevenstypen”?
Punten, lijnen en polygonen in SQL Je oefent met SQL Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met SQL Academy te beginnen?
Ervaring vooraf is niet nodig. SQL Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “Ruimtelijke gegevenstypen”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over SQL Academy?
Ja. Elke les over SQL Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Ruimtelijke gegevenstypen
- Afstand en nearest neighbors
- Ruimtelijke joins en containment
- Ruimtelijke indexen (GiST)