SQL Academy · บทเรียน

การสร้างดัชนีเชิงภูมิสารสนเทศด้วย PostGIS

เพิ่มส่วนขยาย PostGIS จัดเก็บข้อมูล geometry/geography และค้นหาความสัมพันธ์เชิงพื้นที่ด้วยดัชนี GiST

บทเรียน 3 จาก 414 ขั้นตอน

การสร้างดัชนีเชิงภูมิสารสนเทศด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การค้นหาไตรแกรม (pg_trgm) เพื่อการจับคู่แบบคลุมเครือ
  2. การค้นหาข้อความเต็มด้วย tsvector และ GIN
  3. การสร้างดัชนีเชิงภูมิสารสนเทศด้วย PostGIS
  4. การค้นหาเวกเตอร์ด้วย pgvector
← กลับไปที่ SQL Academy