태그 보관물: one-to-many

one-to-many

PostGIS와 QGIS의 일대 다 관계 공간 테이블과 관련된 공간 레이어를 쿼리

QGIS에서 일대 다 관계를 수행 할 수있는 도구를 아는 사람이 있습니까?

PostGIS 데이터베이스에 데이터가 있습니다. 공간 또는 비 공간 테이블과 관련된 공간 레이어를 쿼리 할 수 ​​있기를 원합니다. ArcGIS 9.x에는 비슷한 것을 할 수있는 방법이 있다고 생각합니다.



답변

이라는 공간 테이블 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_sampleQGIS 또는 사용중인 GIS에 로드 할 수 있어야합니다 . 로 각각 sample을 할당 location_name하면 해당 위치에 나타납니다. QGIS 1.8을 사용하는 경우 고려해야 할 추가 단계가 있습니다. 이보기의 “기본 키”는 sid( “샘플 ID”를 생각하십시오)입니다.

과 사이에 외래 키를 설정하는 방법 은 다음 locationsample같습니다.

  • 당신이 입력하는 경우 location_name존재하지 않는, 또는 (등 공백, 대시, 경우) 잘못 입력되는 샘플을, 당신이 그것을 사용하는 것을 허용하지 않습니다 (즉, MATCH SIMPLE)
  • 당신이 이름을 바꾸면 location합니다 (의 name필드), 다음에 연결된 모든 샘플 업데이트됩니다 자신의 location_name분야 (예 ON UPDATE CASCADE)
  • 당신이 삭제 한 경우 location행을, 다음에 연결된 모든 샘플이 삭제됩니다 (예 ON DELETE CASCADE)

외래 키 제약 조건을 읽고 다른 행동을 취하십시오. 상황에 더 잘 맞을 수 있습니다.

또한 요약 할 수 sample와 같은 집계 함수를 사용하여 값을 count, min, avg, 등이 비슷한 공간도합니다. 비 공간 테이블에 숫자 열을 추가하는 경우 가장 적합합니다.


답변