PostGIS에서 공간 뷰를 만들고 QGIS에서 레이어로 추가 하시겠습니까?


49

PostGIS 2.0에서는 QGIS에서 볼 수있는 공간적으로 활성화 된 뷰를 만드는 효율적인 방법을 찾고 있습니다.

@Mike Toews Part 2의 컨텍스트를 postgis DB의 기존 테이블에서 테이블을 만드는 방법 (새 스키마 적용)에 대한 컨텍스트를 따랐습니까? 뷰가 "PostGIS 레이어 추가"대화창에 포인트 레이어로 표시됩니다 (필자의 경우). 그러나 뷰를 생성하고 공간적으로 활성화 한 후 뷰를 QGIS에 추가하려고 할 때 다음 오류가 발생했습니다.

레이어를 추가하려면 테이블을 선택해야합니다

공간 뷰가 QGIS에로드되지 않는 이유와 QGIS에서 레이어로로드 할 수 있도록하기 위해 어떻게해야하는지 설명 할 수 있습니까?

현재 OSGEO 설치 프로그램에서 QGIS v1.8을 사용하고 있습니다.

뷰는 지오 네임 데이터베이스에서 빌드되어 PostGIS에로드됩니다. 지오 네임 테이블 / 공간 데이터는 QGIS에서 잘 선택 / 표시 할 수 있습니다.

" mt_view " 를 선택하려고하면 QGIS가 대화 상자에서보기를 볼 수 있지만 선택할 수는 없습니다. 영역 주위에 점선 상자가 표시되지만보기를 강조 표시하고 선택하지는 않습니다.

QGIS는 mt_view를 레이어로 선택할 수 없습니다


방금 첫 번째 쿼리를 실행할 때 다음과 같이 나타났습니다.

CREATE OR REPLACE VIEW data.test AS
SELECT * FROM data.geoname
WHERE admin1='MT'

뷰가 QGIS 레이어 추가 대화 상자에 표시되지만 선택할 수는 없습니다. 그런 다음 내가 달릴 때 :

SELECT Populate_Geometry_Columns('data.test'::regclass);

"0"의 결과를 얻었습니다. documentation 에 따르면 "1"을 반환해야한다고 생각합니다.


1
문제를 확인했습니다. QGIS 1.8, PostGIS 2.0 및 기본 키가있는 테이블에서 생성 된 뷰를 사용하면 해당 뷰가 사용 가능한 레이어에 나열되지만 "레이어를 추가하려면 테이블을 선택해야합니다"라는 오류 메시지가 나타납니다.
giohappy

2
뷰를 사용할 때 Postgis Add Layer 창에서 기본 키를 자동으로 설정하는 다른 방법이 있습니까? 일반 GIS 사용자가 있고보기에 정수 필드가 많은 경우이 화면에서 레이어 / 뷰에 대해 기본 키 필드를 선택하는 것은 매우 어렵습니다.

@ Pgimenez, 위에서 언급 한 내용으로 새로운 질문을 시작 하고이 질문을 직접 참조하십시오. 그것은 훨씬 더 넓은 가시성을 줄 것입니다.
RyanDalton

qgis 1.8 lisboa에서 볼록 껍질을 시각화하는 방법이 없습니까? Postgis 1.5에서 다음과 같은 viev를 시도했습니다. id 열을 사용하여 Qgis에 게시하라는 메시지가 표시되었습니다. id 열을 사용하지 않으면 오류로 인해 u는 열을로드 할 수 없습니다. 1. 선택 '0', ST_ConvexHull (ST_Collect (geom)) FROM baeume으로보기 con_hull_baeume3 (bid)를 작성하거나 교체하십시오. 2. 입찰로보기 입찰, ST_ConvexHull (ST_Collect (geom))에서 con_hull_baeume4 (bid)보기를 작성하거나 교체하십시오. 그러나 이것은 각각의 기하 점에서 볼록 껍질을 만듭니다. 나는 'select ST_ConvexHull (ST_Collect (geom)) FROM baeume;'을 사용한다는 의미입니다. 작품
울란

1
어서 오십시오! 원래 질문에 대한 답변이 아닌 것이므로이 질문을 새 질문으로 게시하십시오. 마지막 질문은 성공했는지 아닌지 확실하지 않기 때문에 적어도 질문이라면.
lynxlynxlynx

답변:


54

나열된보기를 간단히 선택할 수 없음을 확인할 수 있습니다.

먼저 "기본 키 열"을 선택해야합니다. 그런 다음 테이블을 선택할 수 있습니다.

여기에 이미지 설명을 입력하십시오


1
와우, 나는 그것을 보지 못했을 것입니다. 정말 고마워! PostGIS보기가 아닌 QGIS 관련 문제를 반영하여 제목을 편집했습니다.
RyanDalton

이것은 QGIS 1.8 (아직 사용하지 않은)의 문제인 것 같습니다. 이 단계는 1.7에는 필요하지 않습니다.
Mike T

1.7은 기본 키를 추측하려고 시도했습니다. 그러나 잘 작동하지 않았습니다.
underdark

참고로 @underdark는 QGIS가 다른 유형의 PK를 허용합니까?
George Silva

1
QGIS3에서 열은 "기본 키 열"이 아닌 "기능 ID"로 표시되며 (적어도 나에게는) 기본 창의 가장자리에서 벗어납니다 (즉 보이지 않음). 열이 더 있다는 표시는 없습니다! 선택 후 (필요한 경우) 이러한 세부 정보를 요구하는 기능 요청을 기록 할 것이라고 생각합니다. 개발자는 사람들이 첫 번째 열에 고유 키가 있는지 확인한다고 가정합니다.
Russell Fulton

5

(내 답변을 약간 업데이트)

OBJECTID (row_number) 필드가보기의 열 정의에서 첫 번째 인 한 QGIS는 '벡터 레이어 추가'메뉴에서 추가를 요구하지 않고 필드 를 선택합니다.

CREATE OR REPLACE VIEW dqmt.addressverify AS 
 SELECT row_number() OVER (ORDER BY newaddresses.addressid) AS objectid,
    newaddresses.addressid
  , geom
   FROM dqmt.newaddresses;

원래 질문에 따라 깨진 일부 오래된 뷰를 수정했지만 OBJECTID 필드를 뷰의 시작 부분으로 이동하면 문제가 해결되었습니다!


많은 뷰에서도 "row_number () over ()"구문을 사용했습니다. 나는 주로 기본 키 필드에 "gid"를 사용했습니다. 다른 모든 뷰가 "objectid"를 기본 키로 사용합니까?
RyanDalton

일반적으로 위의 예에서 작동했던 objectid-gid를 시도 할 것입니다 ... QGIS가 다른 'id'필드보다 먼저 인식하는 것입니까?
DPSSpatial

GID는 이에 영향을 미치지 않습니다 ...
DPSSpatial

가능성을 꿈꾸고 있습니다. 확인 주셔서 감사합니다
RyanDalton

짐작할 때 테이블에 PRIMARY KEY정의 된 것이 있으면 QGIS는이를 정기적으로 선택합니다. PK가있는 테이블에서 PK를 '픽'할 수 없습니다. PK. 거의 모든 PK는 VARCHAR. VIEWPostgreSQL VIEW은을 가질 수 없기 때문에 발생할 수 없습니다 CONSTRAINT. 그렇기 때문에 VIEW'PostGIS Layer 추가'버튼을 통해 QGIS로 가져올 때 PK를 직접 선택 해야하므로 Python 스크립트를 사용하여 PK를 가져옵니다.
GT.

4

뷰가 geometry_columns테이블에 나타 납니까? 매뉴얼 에 따르면 뷰는 자동으로 2.0으로 표시되지만 시도하지는 않았습니다.

다음을 실행하여 확인하십시오.

SELECT f_geometry_column As col_name, type, srid, coord_dimension As ndims 
FROM geometry_columns
WHERE f_table_name = 'my_spatial_table' AND f_table_schema = 'my_schema';

그래, 내보기에 대해이 검사를 실행하여 반환 않습니다 the_geom를, 포인트, 4269,2
RyanDalton

3

뷰가 "gid"또는 PK와 같은 고유 한 정수 필드를 사용하여 뷰의 테이블 중 하나와 동등합니까?

QGIS의 이전 버전에서는 고유 한 정수 필드가 없을 때 맵에 뷰를 추가하는 데 문제가 있음을 알고 있습니다. 그러나 나는 그 문제를 지적하는 다른 오류 메시지를 받았지만 모든 기지를 막는 것이 좋습니다.


예, geonames 테이블에는 고유 ID 인 "geonameid"가 있으며 해당 필드에 PRIMARY KEY 제약 조건이 설정되어 있습니다.
RyanDalton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.