0Pricing
SQL Academy · Lekcja

Indeksowanie geoprzestrzenne za pomocą PostGIS

Dodawać rozszerzenie PostGIS, przechowywać dane typu geometry/geography i wyszukiwać relacje przestrzenne za pomocą indeksów GiST

Indeksowanie geoprzestrzenne za pomocą PostGIS to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Czym jest PostGIS?

To najpotężniejsze rozszerzenie geoprzestrzenne w dowolnej bazie danych open source. Dodaje typy geometry/geography, setki funkcji przestrzennych oraz indeksy GiST/SP-GiST do szybkiego wykonywania zapytań przestrzennych.

Włączanie PostGIS

To rozszerzenie contrib:

CREATE EXTENSION postgis;

SELECT PostGIS_Version();

GEOMETRY a GEOGRAPHY

  • GEOMETRY — płaski układ współrzędnych, szybkie operacje, jednostki układu współrzędnych (często metry/stopnie)
  • GEOGRAPHY — kulista Ziemia, wolniejsze operacje, jednostki zawsze w metrach

Proszę wybrać GEOGRAPHY dla „odległości na Ziemi” w przypadku danych z różnych regionów, a GEOMETRY dla rzutowanych układów współrzędnych (regionalne systemy GIS, szybkie operacje).

Przechowywanie punktów

Typowy wzorzec: przechowywanie szerokości i długości geograficznej jako punktu GEOGRAPHY:

CREATE TABLE places (
  id BIGSERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  location GEOGRAPHY(POINT, 4326)
);

INSERT INTO places (name, location)
VALUES ('Berlin', ST_GeogFromText('SRID=4326;POINT(13.405 52.520)'));

SRID

„Spatial Reference ID” definiuje układ współrzędnych. WGS84 (identyfikator 4326) to standard dla szerokości i długości geograficznej GPS.

Przestrzenny indeks GiST

Utwórz indeks GiST dla kolumny geometrii:

CREATE INDEX places_location_idx ON places USING GIST (location);
-- Now spatial filters are fast.

Najbliższy sąsiad: <->

Operator KNN <-> wraz z indeksem zwraca najbliższe wyniki w ciągu milisekund:

SELECT name, ST_Distance(location, ST_GeogFromText('SRID=4326;POINT(13.4 52.5)')) AS m
FROM places
ORDER BY location <-> ST_GeogFromText('SRID=4326;POINT(13.4 52.5)')
LIMIT 10;

W zadanej odległości

Znajdź miejsca w promieniu 2 km od punktu:

SELECT name FROM places
WHERE ST_DWithin(
  location,
  ST_GeogFromText('SRID=4326;POINT(13.4 52.5)'),
  2000  -- meters
);

Poligony i obszary

Przechowuj poligony i wykonuj na nich zapytania (granice miast, strefy dostaw):

CREATE TABLE zones (
  id BIGSERIAL PRIMARY KEY,
  name TEXT,
  area GEOGRAPHY(POLYGON, 4326)
);

-- Find places inside a zone:
SELECT p.name FROM places p
JOIN zones z ON ST_Within(p.location::GEOMETRY, z.area::GEOMETRY)
WHERE z.name = 'Mitte';

Przecinanie, zawieranie i położenie wewnątrz

Bogaty zestaw predykatów przestrzennych: ST_Intersects, ST_Contains, ST_Within, ST_Touches, ST_Disjoint, ST_Equals.

Wczytywanie GeoJSON

Importuj GeoJSON bezpośrednio do PostGIS:

INSERT INTO zones (name, area)
SELECT 'Mitte', ST_GeogFromGeoJSON('{"type":"Polygon","coordinates":[...]}');

Generowanie kafelków wektorowych

PostGIS 3.0+ może bezpośrednio generować kafelki wektorowe Mapbox za pomocą ST_AsMVT — dzięki temu interfejsy map można zasilać bezpośrednio z bazy danych.

Podsumowanie

PostGIS zmienia Postgresa w pełnoprawny silnik GIS.

  • GEOMETRY do rzutowanych układów współrzędnych, GEOGRAPHY do odległości na Ziemi
  • Indeks GiST do filtrów przestrzennych i KNN
  • ST_DWithin, ST_Distance, ST_Within
  • SRID 4326 = WGS84, czyli szerokość i długość geograficzna

Szybki test

Lokalizacje użytkowników są przechowywane jako GEOGRAPHY(POINT). Jaki typ indeksu przyspiesza zapytania „znajdź w promieniu 5 km”?

Często zadawane pytania

Czy lekcja „Indeksowanie geoprzestrzenne za pomocą PostGIS” jest bezpłatna?

Tak — pełny tekst „Indeksowanie geoprzestrzenne za pomocą PostGIS” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Indeksowanie geoprzestrzenne za pomocą PostGIS”?

Dodawać rozszerzenie PostGIS, przechowywać dane typu geometry/geography i wyszukiwać relacje przestrzenne za pomocą indeksów GiST Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Indeksowanie geoprzestrzenne za pomocą PostGIS”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wyszukiwanie trigramowe (pg_trgm) na potrzeby dopasowania przybliżonego
  2. Wyszukiwanie pełnotekstowe za pomocą tsvector i GIN
  3. Indeksowanie geoprzestrzenne za pomocą PostGIS
  4. Wyszukiwanie wektorowe za pomocą pgvector
← Powrót do SQL Academy