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
- Wyszukiwanie trigramowe (pg_trgm) na potrzeby dopasowania przybliżonego
- Wyszukiwanie pełnotekstowe za pomocą tsvector i GIN
- Indeksowanie geoprzestrzenne za pomocą PostGIS
- Wyszukiwanie wektorowe za pomocą pgvector