Mối quan hệ một đến nhiều trong QGIS với PostGIS


9

Có ai biết bất kỳ công cụ nào có thể thực hiện mối quan hệ Một-nhiều trong QGIS không?

Tôi có dữ liệu của mình trong cơ sở dữ liệu PostGIS. Tôi muốn có thể truy vấn các lớp không gian có liên quan đến các bảng không gian hoặc không không gian và ngược lại. Tôi tin rằng có một cách trong ArcGIS 9.x cho phép làm điều gì đó tương tự.

Câu trả lời:


12

Sử dụng một bảng không gian, được gọi locationvà một bảng không không gian khác , sample. Để làm cho nó không gian, một khung nhìn được sử dụng gọi là location_sample. Lược đồ dưới đây đang sử dụng cú pháp typmod PostGIS 2.0:

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;

Bạn sẽ có thể tải lên location_sampletrong QGIS hoặc bất kỳ hệ thống GIS nào bạn đang sử dụng. Chỉ định mỗi samplevới một location_name, và nó sẽ xuất hiện tại vị trí đó. Nếu bạn đang sử dụng QGIS 1.8, có thêm một bước để xem xét . "Khóa chính" cho chế độ xem này là sid(nghĩ "ID mẫu").

Cách tôi thiết lập khóa ngoại giữa locationsamplelà:

  • nếu bạn nhập một location_namemẫu không tồn tại hoặc gõ sai (dấu cách, dấu gạch ngang, trường hợp, v.v.), nó sẽ không cho phép bạn sử dụng nó (tức là MATCH SIMPLE)
  • nếu bạn đổi tên một location(trong nametrường), thì tất cả các mẫu được kết nối với nó sẽ cập nhật các location_nametrường của chúng (tức là ON UPDATE CASCADE)
  • nếu bạn xóa một locationhàng, thì tất cả các mẫu được kết nối với nó sẽ bị xóa (nghĩa là ON DELETE CASCADE)

Đọc các ràng buộc khóa ngoại để có các hành vi khác nhau, có thể phù hợp hơn với tình huống của bạn.

Bạn cũng có thể tóm tắt samplecác giá trị sử dụng chức năng tổng hợp, giống như count, min, avg, vv, và làm cho một cái nhìn không gian tương tự. Điều này có ý nghĩa nhất nếu bạn thêm các cột số vào bảng không phải không gian của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.