Spatiaaliset tietotyypit
Pisteet, viivat ja polygonit SQL:ssä.
Spatiaaliset tietotyypit on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu SQL Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL Academy-kurssilla on yhteensä 4 oppituntia.
Mitä paikkatieto on
Paikkatiedolla kuvataan todellisen maailman sijainteja, muotoja ja alueita. Toisin kuin tavallinen numero tai merkkijono, paikkatieto sisältää geometrisen merkityksen — esimerkiksi kartalla olevan pisteen, tieosuuden tai valtion rajan.
PostGIS on PostgreSQL-laajennus, joka lisää tehokkaat paikkatietotyypit ja -funktiot sekä muuttaa tietokannan täydelliseksi paikkatietojärjestelmäksi (GIS).
-- Enable the PostGIS extension
CREATE EXTENSION IF NOT EXISTS postgis;GEOMETRY-tyyppi
PostGISin keskeinen paikkatietotyyppi on geometry. Se tallentaa muodot tasaiseen (euklidiseen) koordinaattiavaruuteen. Saraketta luotaessa voitte määrittää rajoitteeksi alatyypin, kuten POINT-, LINESTRING- tai POLYGON-tyypin.
SRID-tunnuksen (Spatial Reference ID) määrittäminen alatyypin yhteydessä kertoo PostGISille, mitä koordinaattijärjestelmää tietonne käyttää.
CREATE TABLE locations (
id SERIAL PRIMARY KEY,
name TEXT,
geom geometry(POINT, 4326)
);POINT-arvon lisääminen
POINT edustaa yksittäistä sijaintia X- (pituusaste) ja Y- (leveysaste) -koordinaateilla. ST_GeomFromText-funktio muuntaa Well-Known Text (WKT) -merkkijonon geometry-arvoksi.
SRID 4326 on WGS 84 -koordinaattijärjestelmä, jota GPS-laitteet käyttävät kaikkialla maailmassa.
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;LINESTRING-tyyppi
LINESTRING on vähintään kahden pisteen järjestetty jono, jossa pisteet yhdistyvät suorilla osuuksilla. Se sopii erinomaisesti teiden, jokien ja muiden lineaaristen kohteiden esittämiseen.
Jokainen WKT:n lukupari on yksi kärkipiste (pituusaste, leveysaste). PostGIS tallentaa koko reitin yhtenä geometry-arvona.
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;POLYGON-tyyppi
POLYGON määrittää suljetun alueen. Sen ulkoraja on rengas — suljettu LINESTRING, jossa ensimmäinen ja viimeinen piste ovat identtiset. Polygonilla voi olla myös sisärenkaita eli aukkoja, joilla voidaan kuvata esimerkiksi puistossa olevaa järveä.
Kaikkien renkaiden on oltava suljettuja: toistakaa aloituskoordinaatti lopussa.
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 vai GEOMETRY
PostGIS tarjoaa kaksi paikkatietotyyppien perhettä: geometry käyttää tasaista karteesista tasoa, kun taas geography mallintaa maapallon kaarevana ellipsoidina.
Käyttäkää geography-tyyppiä, kun tarvitsette tarkkoja todellisia etäisyyksiä metreinä laajoilla alueilla. Käyttäkää geometry-tyyppiä, kun työskentelette paikallisessa projisoidussa koordinaattijärjestelmässä tai tarvitsette parasta mahdollista suorituskykyä.
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) ja WKB
Paikkatietoja voidaan sarjallistaa kahdessa standardimuodossa. Well-Known Text (WKT) on ihmisen luettavaa: POINT(2.29 48.86). Well-Known Binary (WKB) on tiivis binaariesitys, jota käytetään sisäisesti ja tiedonsiirrossa.
PostGIS tarjoaa ST_AsText- ja ST_AsBinary-funktiot sisäisen tallennusmuodon ja näiden formaattien väliseen muuntamiseen.
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 tukee myös monigeometria-tyyppejä, jotka ryhmittelevät useita samanlaisia muotoja yhdeksi arvoksi. Tämä on hyödyllistä, kun yksi todellisen maailman kohde koostuu erillisistä osista — esimerkiksi saaristo, joka mallinnetaan MULTIPOLYGON-arvona.
Kaikki standardit paikkatietofunktiot toimivat monigeometrioilla samalla tavalla.
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
GEOMETRYCOLLECTION on yleiskäyttöisin paikkatietotyyppi — se voi sisältää pisteitä, viivoja ja polygoneja samassa arvossa. Tämä joustavuus on hyödyllistä, kun aineisto voi sisältää erityyppisiä geometrioita samassa sarakkeessa.
Yksittäiset jäsenet voi poimia ST_GeometryN-funktiolla.
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;Paikkatietoindeksit GISTillä
Sisältymistä tai läheisyyttä tarkistavissa paikkatietokyselyissä on verrattava jokaisen rivin geometriaa — tämä voi tarkoittaa miljoonien muotojen läpikäyntiä. GIST-indeksi nopeuttaa toimintaa huomattavasti indeksoimalla geometrioiden rajauslaatikot, jolloin PostgreSQL voi ohittaa rivit, jotka eivät mitenkään voi täsmätä.
Luokaa aina GIST-indeksi usein kyselemillenne geometry- tai geography-sarakkeille.
-- 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
);Geometrian ominaisuuksien lukeminen
PostGIS tarjoaa aksessorifunktioita, joilla mistä tahansa geometriasta voi poimia ominaisuuksia. ST_X ja ST_Y palauttavat pisteen koordinaatit, ST_SRID palauttaa paikkatiedon viitetunnuksen ja ST_GeometryType palauttaa alatyypin nimen.
Nämä funktiot ovat välttämättömiä paikkatietojen tarkastamiseen ja kelvollisuuden varmistamiseen.
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;Pikakoe
Testatkaa, miten hyvin ymmärrätte PostGISin paikkatietotyypit.
Oppitunnin kertaus
Tässä oppitunnissa tutustuitte PostGISin tarjoamiin keskeisiin paikkatietotyyppeihin. Opitte, että POINT, LINESTRING ja POLYGON ovat kolme keskeistä geometrian alatyyppiä ja että monigeometriavaihtoehdot (MULTIPOINT, MULTILINESTRING, MULTIPOLYGON) sekä kaikkiin tilanteisiin sopiva GEOMETRYCOLLECTION kattavat monimutkaisemmat muodot.
Näitte tasaisen geometry-tyypin ja ellipsoidisen geography-tyypin eron sekä opitte, miten niiden välillä valitaan. Well-Known Text (WKT) mahdollistaa paikkatietoarvojen lukemisen ja kirjoittamisen ihmisen luettavina merkkijonoina, kun taas GIST-indeksit pitävät paikkatietokyselyt nopeina suurillakin tietomäärillä. Aksessorifunktioilla, kuten ST_X, ST_SRID ja ST_GeometryType, voitte tarkastella mitä tahansa geometry-arvoa suoraan SQL:ssä.
Opi SQL tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 46
- Oppitunnit
- 183
Usein kysytyt kysymykset
Onko oppitunti ”Spatiaaliset tietotyypit” ilmainen?
Kyllä – oppitunnin ”Spatiaaliset tietotyypit” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko SQL Academy-kurssin, päivitä CoddyKit PROhon. SQL Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Spatiaaliset tietotyypit”?
Pisteet, viivat ja polygonit SQL:ssä. Harjoittelet SQL Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni SQL Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin SQL Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Spatiaaliset tietotyypit”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä SQL Academy-oppitunnilla?
Kyllä. Jokainen SQL Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Spatiaaliset tietotyypit
- Etäisyys ja lähimmät naapurit
- Spatiaaliset liitokset ja sisältäminen
- Spatiaaliset indeksit (GiST)