ความสัมพันธ์แบบหนึ่งต่อหลายคนใน QGIS กับ PostGIS


9

ไม่มีใครรู้เกี่ยวกับเครื่องมือใด ๆ ที่สามารถสร้างความสัมพันธ์แบบหนึ่งต่อหลายคนใน QGIS

ฉันมีข้อมูลของฉันในฐานข้อมูล PostGIS ฉันต้องการสอบถามเลเยอร์อวกาศที่เกี่ยวข้องกับตารางอวกาศหรือไม่ใช่อวกาศและในทางกลับกัน ฉันเชื่อว่ามีวิธีหนึ่งใน ArcGIS 9.x ที่อนุญาตให้ทำสิ่งที่คล้ายกัน

คำตอบ:


12

ใช้ตารางอวกาศที่เรียกว่าและโต๊ะที่ไม่ใช่เชิงพื้นที่อื่นlocation เพื่อให้พื้นที่มุมมองที่ถูกนำมาใช้เรียกว่าsample location_sampleสคีมาด้านล่างใช้ไวยากรณ์ PostGIS 2.0 typmod:

CREATE TABLE location(
  gid serial NOT NULL,
  geom geometry(Point,4326),
  name character varying(50) NOT NULL,
  CONSTRAINT location_pkey PRIMARY KEY (gid),
  CONSTRAINT name_unique UNIQUE (name)
);
CREATE INDEX location_geom_idx ON location USING gist (geom);

CREATE TABLE sample(
  sid serial NOT NULL,
  name character varying(50) NOT NULL,
  location_name character varying(50),
  CONSTRAINT sample_pkey PRIMARY KEY (sid),
  CONSTRAINT location_name_fkey FOREIGN KEY (location_name)
      REFERENCES location (name) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE INDEX fki_location_name_fkey ON sample USING btree (location_name);

CREATE VIEW location_sample AS
  SELECT sample.sid, location.geom, sample.location_name, sample.name
  FROM location
  LEFT JOIN sample ON sample.location_name = location.name;

คุณควรโหลดlocation_sampleใน QGIS หรือ GIS อะไรก็ได้ที่คุณใช้ กำหนดแต่ละตัวsampleด้วยlocation_nameและจะปรากฏที่ตำแหน่งนั้น หากคุณกำลังใช้ QGIS 1.8 มีขั้นตอนพิเศษที่จะต้องพิจารณา "คีย์หลัก" สำหรับมุมมองนี้คือsid(คิดว่า "ตัวอย่าง ID")

วิธีที่ฉันตั้งค่าforeign keyระหว่างlocationและsampleคือ:

  • หากคุณพิมพ์ a location_nameในตัวอย่างที่ไม่มีอยู่หรือพิมพ์ไม่ถูกต้อง (ช่องว่าง, ขีดกลาง, ตัวพิมพ์เล็กและอื่น ๆ ) มันจะไม่อนุญาตให้คุณใช้งาน (เช่นMATCH SIMPLE)
  • หากคุณเปลี่ยนชื่อ a location(ในnameช่อง) ตัวอย่างทั้งหมดที่เชื่อมต่อกับมันจะอัปเดตlocation_nameฟิลด์ของพวกเขา(เช่นON UPDATE CASCADE)
  • หากคุณลบlocationแถวตัวอย่างทั้งหมดที่เชื่อมต่อกับแถวนั้นจะถูกลบ (เช่นON DELETE CASCADE)

อ่านข้อ จำกัด ต่างประเทศของคีย์เพื่อรับพฤติกรรมที่แตกต่างกันซึ่งอาจตรงกับสถานการณ์ของคุณมากขึ้น

นอกจากนี้คุณยังสามารถสรุปsampleค่าใช้ฟังก์ชันการรวมเช่นcount, min, avgฯลฯ และทำให้เรื่องนี้เป็นมุมมองเชิงพื้นที่ที่คล้ายกัน วิธีนี้เหมาะสมที่สุดหากคุณเพิ่มคอลัมน์ที่เป็นตัวเลขลงในตารางที่ไม่ใช่เชิงพื้นที่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.