Jenis Data Ruangan
Titik, garis dan poligon dalam SQL
Jenis Data Ruangan ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran SQL Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.
Apakah Data Ruang?
Data ruang menerangkan lokasi, bentuk dan kawasan dunia sebenar. Tidak seperti nombor atau rentetan biasa, nilai ruang membawa makna geometri — titik pada peta, segmen jalan atau sempadan sesebuah negara.
PostGIS ialah sambungan PostgreSQL yang menambahkan jenis dan fungsi data ruang yang berkuasa, sekali gus menukar pangkalan data Anda menjadi sistem maklumat geografi lengkap (GIS).
-- Enable the PostGIS extension
CREATE EXTENSION IF NOT EXISTS postgis;Jenis GEOMETRY
Jenis data ruang teras dalam PostGIS ialah geometri. Jenis ini menyimpan bentuk dalam ruang koordinat rata (Euclid). Anda boleh menentukan subjenis seperti POINT, LINESTRING atau POLYGON sebagai kekangan semasa mencipta lajur.
Menentukan SRID (ID Rujukan Ruang) bersama subjenis memberitahu PostGIS sistem koordinat yang digunakan oleh data Anda.
CREATE TABLE locations (
id SERIAL PRIMARY KEY,
name TEXT,
geom geometry(POINT, 4326)
);Memasukkan POINT
POINT mewakili satu lokasi dengan koordinat X (longitud) dan Y (latitud). Fungsi ST_GeomFromText menukarkan rentetan Teks Dikenali Umum (WKT) kepada nilai geometri.
SRID 4326 ialah sistem koordinat WGS 84 yang digunakan oleh peranti GPS di seluruh dunia.
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;Jenis LINESTRING
LINESTRING ialah susunan bertertib yang terdiri daripada dua atau lebih titik yang disambungkan oleh segmen lurus. Jenis ini sesuai untuk mewakili jalan, sungai atau apa-apa ciri linear.
Setiap pasangan nombor dalam WKT ialah satu bucu (longitud latitud). PostGIS menyimpan keseluruhan laluan sebagai satu nilai geometri.
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;Jenis POLYGON
POLYGON mentakrifkan kawasan tertutup. Sempadan luarnya ialah cincin — LINESTRING tertutup yang titik pertama dan terakhirnya sama. Poligon juga boleh mempunyai cincin dalaman (lubang) untuk mewakili kawasan seperti tasik di dalam taman.
Semua cincin mesti tertutup: ulang koordinat permulaan pada penghujung.
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 berbanding GEOMETRY
PostGIS menyediakan dua keluarga jenis data ruang: geometri menggunakan satah Cartesan rata, manakala geografi memodelkan Bumi sebagai sferoid melengkung.
Gunakan geografi apabila Anda memerlukan jarak dunia sebenar yang tepat dalam meter merentasi kawasan yang luas. Gunakan geometri apabila Anda bekerja dalam sistem koordinat terunjur setempat atau memerlukan prestasi maksimum.
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';Teks Dikenali Umum (WKT) dan Binari Dikenali Umum (WKB)
Data ruang boleh diwakilkan dalam dua format standard. Teks Dikenali Umum (WKT) boleh dibaca manusia: POINT(2.29 48.86). Binari Dikenali Umum (WKB) ialah perwakilan binari padat yang digunakan secara dalaman dan untuk pemindahan data.
PostGIS menyediakan ST_AsText dan ST_AsBinary untuk menukarkan storan dalaman dengan format ini.
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 juga menyokong jenis geometri berbilang yang mengumpulkan beberapa bentuk daripada jenis yang sama ke dalam satu nilai. Ini berguna apabila satu ciri dunia sebenar terdiri daripada bahagian yang tidak bersambung — contohnya, kepulauan yang dimodelkan sebagai MULTIPOLYGON.
Semua fungsi ruang standard berfungsi dengan cara yang sama pada geometri berbilang.
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 ialah jenis data ruang yang paling umum — jenis ini boleh mengandungi gabungan titik, garis dan poligon dalam satu nilai. Fleksibiliti ini berguna apabila set data mungkin mengandungi pelbagai jenis geometri yang disimpan dalam lajur yang sama.
Anda boleh mengekstrak ahli individu dengan 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;Indeks Ruang dengan GIST
Pertanyaan ruang yang menyemak pengandungan atau kedekatan perlu membandingkan geometri setiap baris — dan mungkin mengimbas jutaan bentuk. Indeks GIST mempercepatkan proses ini dengan ketara melalui pengindeksan kotak sempadan geometri, sekali gus membolehkan PostgreSQL melangkau baris yang mustahil sepadan.
Sentiasa cipta indeks GIST pada lajur geometri atau geografi yang kerap Anda tanyakan.
-- 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
);Membaca Sifat Geometri
PostGIS menyediakan fungsi pengakses untuk mengekstrak sifat daripada mana-mana geometri. ST_X dan ST_Y mengembalikan koordinat titik, ST_SRID mengembalikan ID rujukan ruang, dan ST_GeometryType mengembalikan nama subjenis.
Fungsi ini penting untuk memeriksa dan mengesahkan data ruang.
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;Semakan Pantas
Uji pemahaman Anda tentang jenis data ruang PostGIS.
Imbas Kembali Pelajaran
Dalam pelajaran ini, Anda meneroka jenis data ruang utama yang disediakan oleh PostGIS. Anda mempelajari bahawa POINT, LINESTRING dan POLYGON ialah tiga subjenis geometri asas, manakala varian geometri berbilang (MULTIPOINT, MULTILINESTRING, MULTIPOLYGON) dan jenis serba guna GEOMETRYCOLLECTION meliputi bentuk yang lebih kompleks.
Anda melihat perbezaan antara jenis geometri rata dengan jenis geografi berbentuk sferoid, serta cara memilih antaranya. Teks Dikenali Umum (WKT) membolehkan Anda membaca dan menulis nilai ruang sebagai rentetan yang boleh dibaca manusia, manakala indeks GIST memastikan pertanyaan ruang kekal pantas pada skala besar. Fungsi pengakses seperti ST_X, ST_SRID dan ST_GeometryType membolehkan Anda memeriksa mana-mana nilai geometri secara terus dalam SQL.
Pelajari SQL dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 46
- Pelajaran
- 183
Soalan Lazim
Adakah pelajaran “Jenis Data Ruangan” percuma?
Ya — teks penuh “Jenis Data Ruangan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus SQL Academy, tingkat taraf kepada CoddyKit PRO. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Jenis Data Ruangan”?
Titik, garis dan poligon dalam SQL Anda berlatih SQL Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan SQL Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran SQL Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Jenis Data Ruangan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.