QGIS에서 점 / 선 / 다각형 편집시 PostgreSQL 문제


15

postgresql 및 QGIS에 문제가 있습니다.

  • 점 / 선 / 다각형 및 채우기 필드를 추가 할 수 있습니다

그러나 나는 할 수 없다 :

  • 점 / 선 / 다각형 삭제
  • 점 / 선 / 다각형 수정 (필드 이동 또는 수정)

예 : dbname = 'Europe'host = localhost port = 5432 user = 'postgres'sslmode = disable key = 'tid'추정 된 metadata = true srid = 900913 type = Point table = "public". "planet_osm_point"(way) sql =

QGIS는 데이터베이스에 관리자 수준으로 연결되어 있습니다. pdAdmin III을 사용하면 모든 작업 (생성, 삭제, 수정 등)을 수행 할 수 있습니다.

postgresql 데이터베이스는 osm2pgsql 과 함께 OSM에서 가져 옵니다 .

.shp와 같은 다른 계층에서는이 문제가 없습니다.

어떤 아이디어?

구성 : Ubuntu 14.04 / Posgresql 9.4 / QGIS 2.10


Mathieu 안녕하세요. "할 수 없습니다"라는 정확한 의미를 명확하게 설명해 주시겠습니까? 도구가 비활성화 되었습니까? 레이어 저장시 실패합니까? 그리고 가장 중요한 : 오류 메시지가 있습니까? postgis 탭의 메시지 로그 패널도 살펴보십시오.
Matthias Kuhn

offcourse 관련 레이어 (노란색 펜)의 편집 모드에 있습니다. 엔터티 아이콘 추가를 제외한 편집 도구는 모두 회색입니다. 내가받는 메시지 : Le service prestataire ne supporte pas l' effacement : Le prestataire de données ne supporte pas l' effacement des objets
Mathieu

1
영어 오류 메시지 : 공급자가 삭제를 지원하지 않습니다 : 데이터 공급자가 기능 삭제를 지원하지 않습니다
Mathieu

1
상단 아이콘 수정 : 전체 회색 제외 기능 추가
Mathieu

1
2015-08-08T12 : 10 : 22 1 기본 키가 ctid입니다-기존 기능 변경이 비활성화 됨 (방법 : "공개". "planet_osm_point") 2015-08-08T12 : 10 : 23 1 기본 키가 ctid입니다-기존 기능 변경 disabled (way; "public". "planet_osm_line") 2015-08-08T12 : 10 : 23 1 "public"의 방법에 대한 기능 유형 또는 srid. "planet_osm_polygon"을 결정할 수 없거나 요청되지 않았습니다.
Mathieu

답변:


13

결정된. 문제는 기본 키가 아니 었습니다.

pgAdmin에서이 요청을 수행하십시오.

ALTER TABLE tableName 기본 키 추가 (id);

planet_osm_line 테이블 및 기본 키로 osm_id 열 설정의 예 :

ALTER TABLE planet_osm_line 기본 키 추가 (osm_id);

osm_id가 고유 할 때까지


그렇게하는 방법입니다!
DPSSpatial

당신은 옳다고 생각합니까?
Mathieu

나도 그렇게 생각해! 직장에서 테스트하고 다시보고 할 수 있지만 이제는 데이터를 가져온 방법을 알고 있습니다. 한 가지 문제-왜 OSM 편집기에서 직접 데이터를 편집하고 다시 기여하는 대신 QGIS에서이 데이터를 로컬로 편집합니까?
DPSSpatial

1
OSM 소개 : 우리는 디자인 / 그래픽 사양으로 출력 맵을 생성하고 공급자의 다른 유료 데이터를 추가해야하기 때문에 공개 할 수 없습니다. QGIS는이를위한 완벽한 도구입니다. 기여는 또 다른 일이며, 우리는 제 시간에 그것을 할 것입니다.
Mathieu

10

해결책은 이미 언급 한 것처럼 기본 키를 작성하는 것입니다.

그러나 디자인 상, osm2pgsqlosm_id독특함을 보증하지 않습니다 . osm_id가 동일한 여러 행을 생성 할 수 있습니다 .

planet_osm_*QGIS에서 테이블 을 편집하려면 다른 id 열을 추가하는 것이 좋습니다 (예 :) gid.

고유 한 gid열 을 추가하려면

ALTER TABLE planet_osm_point ADD gid serial PRIMARY KEY;
ALTER TABLE planet_osm_line ADD gid serial PRIMARY KEY;
ALTER TABLE planet_osm_polygon ADD gid serial PRIMARY KEY;
ALTER TABLE planet_osm_roads ADD gid serial PRIMARY KEY;

기하학 열이 GEOMETRY 인 경우 QGIS에 문제가 있습니다. 일부 쿼리가 실패 할 수 있습니다. planet_osm_polygon형상을 다음 MultiPolygon과 같이 변경하는 것이 유용하다는 것을 알았습니다 .

ALTER TABLE planet_osm_polygon
    ALTER COLUMN way TYPE geometry(MultiPolygon,3857) USING ST_Multi(way);

3

이것이 가장 중요한 문제라고 생각합니다. 테이블에는 하나가 있어야하며 PGAdmin을 통해 테이블을 볼 때 인식됩니다.

나는 같은 문제가 있었지만 ID (임의)라는 기본 키 필드로 레이어를 다시로드했으며 모든 편집 도구가 툴바에서 활성화되었습니다.

SQL을 사용하면 'serial'데이터 유형의 OID 열을 추가하고 다음 명령문을 사용하여 기본 키를 작성할 수 있습니다.

ALTER TABLE schema."Tablename"

ADD ID serial NOT NULL

ALTER TABLE schema."Tablename" ADD PRIMARY KEY (id);

GUI를 사용하면 데이터베이스 및 PostGIS 및 QGIS에서 인식 할 기본 키로 레이어를 다시로드 할 수 있습니다.

  • DB 관리자를 엽니 다
  • 데이터베이스에 연결
  • '레이어 / 파일 가져 오기'를 선택하십시오
  • '기본 키'확인란을 선택하고 수정이 가능한 고유 ID를 저장할 '기본 키'열의 이름을 입력하십시오.

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

여기에서 PGAdmin으로 돌아가서 데이터베이스에 연결하고 방금 다시 만든 테이블을 클릭하십시오. 이제 OID 열이 인식되는지 확인할 수 있습니다.

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


PGAdmin에서 기본 키가 없습니다. 레이어를 어떻게 다시로드합니까?
Mathieu

@Mathieu QGIS에서 DBManager 플러그인을 사용하고 'primary key'옵션을 클릭하고 필드 이름을 OBJECTID 또는 이와 유사한 것으로 지정하십시오. 이를 통해 편집 가능한 기능을 사용할 수 있습니다. 기본 키로 사용하려는 기존 고유 ID 필드가있는 경우 나중에 다시 설정할 수 있습니다.
DPSSpatial

나는 확실히 바보이지만 DBmanager에서 기본 키를 설정할 위치를 찾지 못했습니다. 실제로 "planetOSM 다각형"(및 기타)에는 기본 키가 없다는 경고가 있습니다.
Mathieu

알았어-방금 내 대답을 업데이트했지만 그게 GUI 방법입니다 ... 그것이 당신에게 효과가 있는지 알려주십시오 ...
DPSSpatial

절차에 대해 감사드립니다. 이제는 왜 내가 그것을 할 수 없는지 이해합니다 : 데이터베이스는 osm2pgsql을 사용하여 osm.pbf 파일에서 postgis로 직접 가져옵니다. 당신에게 절차는로드 해야하는 외부 파일입니다. 제 경우에는 데이터베이스가 이미 postgis에 있고 화면 캡처에 표시된 것과 같은 기본 키가 없다고 말합니다. 따라서 데이터베이스를 이미 가져 왔을 때 pgsql 하에서 기본 키를 생성하는 방법이 있습니다.
Mathieu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.