การสร้างดัชนีเชิงภูมิสารสนเทศด้วย PostGIS
เพิ่มส่วนขยาย PostGIS จัดเก็บข้อมูล geometry/geography และค้นหาความสัมพันธ์เชิงพื้นที่ด้วยดัชนี GiST
การสร้างดัชนีเชิงภูมิสารสนเทศด้วย PostGIS เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
PostGIS คืออะไร
ส่วนขยายเชิงพื้นที่ที่ทรงพลังที่สุดในฐานข้อมูลโอเพนซอร์ส เพิ่มชนิดข้อมูล geometry/geography ฟังก์ชันเชิงพื้นที่หลายร้อยรายการ และดัชนี GiST/SP-GiST สำหรับคิวรีเชิงพื้นที่ที่รวดเร็ว
เปิดใช้งาน PostGIS
ส่วนขยายนี้เป็นส่วนหนึ่งของ contrib:
CREATE EXTENSION postgis;
SELECT PostGIS_Version();GEOMETRY กับ GEOGRAPHY
- GEOMETRY — ระนาบ ทำงานเร็ว หน่วยเป็นหน่วยของระบบพิกัด (มักเป็นเมตร / องศา)
- GEOGRAPHY — โลกทรงกลม ทำงานช้ากว่า หน่วยเป็นเมตรเสมอ
เลือก GEOGRAPHY สำหรับ “ระยะทางบนโลก” เมื่อข้อมูลครอบคลุมหลายภูมิภาค และเลือก GEOMETRY สำหรับระบบพิกัดที่ฉายแล้ว (GIS ระดับภูมิภาคและการดำเนินการที่รวดเร็ว)
การจัดเก็บจุด
รูปแบบที่ใช้กันทั่วไปคือจัดเก็บละติจูด/ลองจิจูดเป็นจุด 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
“รหัสอ้างอิงเชิงพื้นที่” ใช้กำหนดระบบพิกัด WGS84 (id 4326) เป็นมาตรฐานสำหรับละติจูด/ลองจิจูดจาก GPS
ดัชนีเชิงพื้นที่ GiST
สร้างดัชนีคอลัมน์ geometry ด้วย GiST:
CREATE INDEX places_location_idx ON places USING GIST (location);
-- Now spatial filters are fast.เพื่อนบ้านที่ใกล้ที่สุด: <->
ตัวดำเนินการ KNN <-> พร้อมดัชนีจะส่งคืนผลลัพธ์ที่ใกล้ที่สุดภายในเวลาไม่กี่มิลลิวินาที:
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;ภายในระยะทาง
ค้นหาสถานที่ที่อยู่ภายในระยะ 2 กม. จากจุดหนึ่ง:
SELECT name FROM places
WHERE ST_DWithin(
location,
ST_GeogFromText('SRID=4326;POINT(13.4 52.5)'),
2000 -- meters
);รูปหลายเหลี่ยมและพื้นที่
จัดเก็บและคิวรีรูปหลายเหลี่ยม (ขอบเขตเมืองและโซนจัดส่ง):
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';ตัดกัน ครอบคลุม อยู่ภายใน
ชุดตัวบ่งเงื่อนไขเชิงพื้นที่ที่หลากหลาย: ST_Intersects, ST_Contains, ST_Within, ST_Touches, ST_Disjoint, ST_Equals
การโหลด GeoJSON
นำเข้า GeoJSON ไปยัง PostGIS ได้โดยตรง:
INSERT INTO zones (name, area)
SELECT 'Mitte', ST_GeogFromGeoJSON('{"type":"Polygon","coordinates":[...]}');การสร้างไทล์เวกเตอร์
PostGIS 3.0+ สามารถสร้างไทล์เวกเตอร์ของ Mapbox ได้โดยตรงด้วย ST_AsMVT ทำให้สร้างส่วนติดต่อผู้ใช้แผนที่จากฐานข้อมูลได้ทันที
สรุปทบทวน
PostGIS เปลี่ยน Postgres ให้เป็นเครื่องมือ GIS ที่จริงจัง
- GEOMETRY สำหรับพิกัดที่ฉายแล้ว และ GEOGRAPHY สำหรับระยะทางบนโลก
- ดัชนี GiST สำหรับตัวกรองเชิงพื้นที่และ KNN
- ST_DWithin, ST_Distance, ST_Within
- SRID 4326 = ละติจูด/ลองจิจูดของ WGS84
ตรวจสอบอย่างรวดเร็ว
คุณจัดเก็บตำแหน่งผู้ใช้เป็น GEOGRAPHY(POINT) ควรใช้ดัชนีชนิดใดเพื่อเร่งคิวรี “ค้นหาภายใน 5 กม.”
เรียนรู้ SQL ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 46
- บทเรียน
- 183
คำถามที่พบบ่อย
บทเรียน “การสร้างดัชนีเชิงภูมิสารสนเทศด้วย PostGIS” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การสร้างดัชนีเชิงภูมิสารสนเทศด้วย PostGIS” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การสร้างดัชนีเชิงภูมิสารสนเทศด้วย PostGIS”
เพิ่มส่วนขยาย PostGIS จัดเก็บข้อมูล geometry/geography และค้นหาความสัมพันธ์เชิงพื้นที่ด้วยดัชนี GiST คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การสร้างดัชนีเชิงภูมิสารสนเทศด้วย PostGIS” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การค้นหาไตรแกรม (pg_trgm) เพื่อการจับคู่แบบคลุมเครือ
- การค้นหาข้อความเต็มด้วย tsvector และ GIN
- การสร้างดัชนีเชิงภูมิสารสนเทศด้วย PostGIS
- การค้นหาเวกเตอร์ด้วย pgvector