0Pricing
SQL Academy · Lektion

Räumliche Datentypen

Punkte, Linien und Polygone in SQL

Räumliche Datentypen ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was sind Geodaten?

Geodaten beschreiben reale Orte, Formen und Flächen. Im Gegensatz zu einer einfachen Zahl oder Zeichenkette enthält ein räumlicher Wert eine geometrische Bedeutung – etwa einen Punkt auf einer Karte, einen Straßenabschnitt oder die Grenze eines Landes.

PostGIS ist eine PostgreSQL-Erweiterung, die leistungsfähige räumliche Datentypen und Funktionen hinzufügt und Ihre Datenbank so in ein vollständiges Geoinformationssystem (GIS) verwandelt.

-- Enable the PostGIS extension
CREATE EXTENSION IF NOT EXISTS postgis;

Der GEOMETRY-Typ

Der zentrale räumliche Datentyp in PostGIS ist geometry. Er speichert Formen in einem flachen (euklidischen) Koordinatenraum. Beim Anlegen einer Spalte können Sie einen Subtyp wie POINT, LINESTRING oder POLYGON als Einschränkung festlegen.

Die Angabe der SRID (Spatial Reference ID) zusammen mit dem Subtyp teilt PostGIS mit, welches Koordinatensystem Ihre Daten verwenden.

CREATE TABLE locations (
  id      SERIAL PRIMARY KEY,
  name    TEXT,
  geom    geometry(POINT, 4326)
);

Einen POINT einfügen

Ein POINT steht für einen einzelnen Ort mit X- (Längengrad) und Y-Koordinaten (Breitengrad). Die Funktion ST_GeomFromText konvertiert eine Well-Known-Text-(WKT-)Zeichenkette in einen Geometriewert.

Die SRID 4326 bezeichnet das von GPS-Geräten weltweit verwendete Koordinatensystem WGS 84.

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;

Der LINESTRING-Typ

Ein LINESTRING ist eine geordnete Folge aus mindestens zwei Punkten, die durch gerade Segmente verbunden sind. Er eignet sich ideal zur Darstellung von Straßen, Flüssen oder anderen linearen Elementen.

Jedes Zahlenpaar im WKT ist ein Vertex (Längengrad, Breitengrad). PostGIS speichert den gesamten Pfad als einen einzelnen Geometriewert.

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;

Der POLYGON-Typ

Ein POLYGON definiert eine eingeschlossene Fläche. Seine äußere Begrenzung ist ein Ring – ein geschlossener LINESTRING, bei dem der erste und der letzte Punkt identisch sind. Ein Polygon kann außerdem innere Ringe (Löcher) enthalten, um beispielsweise einen See innerhalb eines Parks darzustellen.

Alle Ringe müssen geschlossen sein: Wiederholen Sie die Startkoordinate am Ende.

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 vs GEOMETRY

PostGIS stellt zwei Familien räumlicher Datentypen bereit: geometry verwendet eine flache kartesische Ebene, während geography die Erde als gekrümmtes Sphäroid modelliert.

Verwenden Sie geography, wenn Sie genaue Entfernungen in der realen Welt in Metern über große Gebiete hinweg benötigen. Verwenden Sie geometry, wenn Sie mit einem lokalen projizierten Koordinatensystem arbeiten oder maximale Leistung benötigen.

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) und WKB

Räumliche Daten können in zwei standardisierten Formaten serialisiert werden. Well-Known Text (WKT) ist für Menschen lesbar: POINT(2.29 48.86). Well-Known Binary (WKB) ist eine kompakte binäre Darstellung, die intern und zur Datenübertragung verwendet wird.

PostGIS stellt ST_AsText und ST_AsBinary bereit, um zwischen der internen Speicherung und diesen Formaten zu konvertieren.

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 unterstützt außerdem Multi-Geometrie-Typen, die mehrere Formen derselben Art in einem Wert zusammenfassen. Das ist nützlich, wenn ein einzelnes reales Objekt aus voneinander getrennten Teilen besteht – beispielsweise ein Archipel, das als MULTIPOLYGON modelliert wird.

Alle standardmäßigen räumlichen Funktionen arbeiten bei Multi-Geometrien auf dieselbe Weise.

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

Eine GEOMETRYCOLLECTION ist der allgemeinste räumliche Datentyp. Sie kann eine Mischung aus Punkten, Linien und Polygonen in einem einzigen Wert enthalten. Diese Flexibilität ist nützlich, wenn ein Datensatz heterogene Geometrietypen enthalten kann, die in derselben Spalte gespeichert werden.

Mit ST_GeometryN können Sie einzelne Elemente extrahieren.

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;

Räumliche Indizes mit GIST

Räumliche Abfragen, die Zugehörigkeit oder Nähe prüfen, müssen die Geometrie jeder Zeile vergleichen und möglicherweise Millionen von Formen durchsuchen. Ein GIST-Index beschleunigt dies erheblich, indem er die Bounding-Boxen der Geometrien indexiert. Dadurch kann PostgreSQL Zeilen überspringen, die unmöglich passen können.

Erstellen Sie immer einen GIST-Index für geometry- oder geography-Spalten, die Sie häufig abfragen.

-- 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
);

Geometrieeigenschaften auslesen

PostGIS stellt Zugriffsfunktionen bereit, mit denen Sie Eigenschaften jeder Geometrie extrahieren können. ST_X und ST_Y geben die Koordinaten eines Punkts zurück, ST_SRID gibt die Spatial Reference ID zurück und ST_GeometryType gibt den Namen des Subtyps zurück.

Diese Funktionen sind für die Untersuchung und Validierung räumlicher Daten unverzichtbar.

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;

Kurztest

Testen Sie Ihr Verständnis der räumlichen Datentypen von PostGIS.

Zusammenfassung der Lektion

In dieser Lektion haben Sie die zentralen räumlichen Datentypen von PostGIS kennengelernt. Sie haben gelernt, dass POINT, LINESTRING und POLYGON die drei grundlegenden Geometrie-Subtypen sind und dass Varianten für Multi-Geometrien (MULTIPOINT, MULTILINESTRING, MULTIPOLYGON) sowie der allgemeine Typ GEOMETRYCOLLECTION auch komplexere Formen abdecken.

Sie haben den Unterschied zwischen dem flachen Typ geometry und dem sphäroidischen Typ geography kennengelernt und erfahren, wie Sie zwischen ihnen wählen. Mit Well-Known Text (WKT) können Sie räumliche Werte als für Menschen lesbare Zeichenketten lesen und schreiben, während GIST-Indizes räumliche Abfragen auch bei großen Datenmengen schnell halten. Zugriffsfunktionen wie ST_X, ST_SRID und ST_GeometryType ermöglichen es Ihnen, jeden Geometriewert direkt in SQL zu untersuchen.

Häufig gestellte Fragen

Ist die Lektion „Räumliche Datentypen“ kostenlos?

Ja — der vollständige Text von „Räumliche Datentypen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Räumliche Datentypen“?

Punkte, Linien und Polygone in SQL Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Räumliche Datentypen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Räumliche Datentypen
  2. Entfernung und nächste Nachbarn
  3. Räumliche Joins und Enthaltensein
  4. Räumliche Indizes (GiST)
← Zurück zu SQL Academy