한 다각형 레이어에서 다른 다각형 레이어로 속성을 복사 하시겠습니까?


11

머리를 get 수없는 문제가 있습니다. 두 개의 다각형 레이어가 있습니다.

  • 다각형 A-동일한 필드를 가진 다각형 B의 하위 집합이며 다각형 B와 동일한 다각형을 갖습니다.
  • 다각형 B-다각형 A에 있고 싶은 속성 데이터가 있습니다.

어떻게 할 수 있습니까? QGIS 도구 "위치 별 속성에 가입"을 시도했지만 일부 다각형이 다른 다각형 내에 있으므로 찾은 첫 번째 교차점 (외부 다각형)에 연결되는 경향이 있습니다.


다각형 A의 중심 (점)을 작성하고 속성을 B에 결합하고 새 파일로 내
보내서

3
@Mapperz이 방법은 일반적으로 예상되는 답변을 생성하더라도 오류를 생성 할 수 있으므로 위험한 접근 방식입니다. 다각형이 서로 겹치는 경우 모든 베팅이 해제됩니다. 겹치는 부분이 없더라도 다각형의 중심이 다른 (겹치지 않는) 다각형 내에있을 수 있습니다. A의 모든 다각형이 겹치지 않고 볼록한 경우에만 일반적으로 정확성을 보장 할 수 있습니다.
whuber

+1 @ Diego-당신의 질문은 상당히 흥미로운 토론 / 토론으로 이어집니다; 그것에 흥미로운 것!
Dano

답변:


9

@Dano는 전체 답변으로 가장 잘 해결되는 몇 가지 문제를 올바르게 제기합니다.

@Celenius가 이미 언급 한 한 가지 어려움 은 B와 A 사이의 조인 (어느 방향이든)이 모든 필드를 복제한다는 것입니다. 이 문제를 해결하는 것은 번거로울 수 있습니다. 의견으로는 분명한 쉬운 방법 (스프레드 시트로 내보내기)이 데이터 무결성 문제를 제기한다고 제안했습니다. Celenius의 제안으로 이미 해결 된 또 다른 어려움 은 데이터베이스 조인이 불가능하기 때문에 속성 조합이 A와 B 모두의 키 역할을 할 수없는 경우이 문제를 해결하는 것과 관련이 있습니다. 공간 조인은 그 문제를 해결합니다.

그렇다면 좋은 해결책은 무엇입니까? 한 가지 접근법은 A를 사용하여 원하는 데이터를 포함하는 B의 해당 레코드를 식별합니다. 다각형의 구성에 대한 가정에 따라 (겹치는 지 여부, 일부는 다른 것을 포함 할 수 있는지 여부 등) 한 가지 레이어를 사용하여 다른 개체를 선택하거나 결합을 통해 다양한 방법으로 수행 할 수 있습니다. 여기서 중요한 것은 우리가이 단계에서하고 싶은 것은 A에 해당하는 B의 부분 집합을 선택한다는 것입니다.

선택을 완료 하면 선택을 내보내고 A. Done을 대체하십시오 .

이 솔루션은 B의 모든 필드가 A의 해당 필드를 대체하기위한 것으로 가정합니다 . 그렇지 않은 경우 실제로 B (소스)를 A (대상)에 1-1 조인해야합니다. 식별자를 기반으로 한 조인이 가장 좋지만 ID를 사용할 수 없고 A와 B의 해당 다각형 모양이 약간 다를 가능성 이없는 경우 다각형 ID (Celenius)에 조인하는 것이 좋습니다 . (이것은 미묘한 점이며, 교묘 한 오류의 잠재적 원인입니다. B에 A에 해당하지 않는 다각형을 편집하면 GIS가 "스냅 핑"또는 "유지 토폴로지"인 경우 여전히 B의 다른 다각형을 보이지 않게 수정할 수 있기 때문입니다. 그렇지 않으면 로컬 편집 중에 자동으로 전역 변경을 수행합니다.)

이 시점에서 모든 필드에는 두 개의 사본이 있습니다. [Foo]가 A와 B에 대한 공통 필드 인 경우 조인에는 A. [Foo]와 B. [Foo]가 포함됩니다. 필드 계산을 사용하여 B. [Foo]를 A. [Foo]에 복사하십시오. 필요한 모든 필드에 대해 반복하십시오. 이 작업이 끝나면 조인을 제거하십시오.

이 절차는 많은 분야가 관련 될 때 약간 번거로울 수 있지만 장점은 다음과 같습니다.

  • 스크립트는 간단하고 빠릅니다.
  • 이를 스크립팅 하면 데이터에서 수행되는 처리를 문서화 하는 감사 추적남습니다 . 이는 데이터 무결성을 보호하는 데 중요합니다.
  • 조인 후 잘못된 필드를 유지하거나 (따라서 해당 필드의 새 데이터 대신 기존 데이터를 유지) 중요한 필드를 삭제하는 등의 일부 도매 오류를 방지합니다.
  • 데이터 유형 시행 및 비즈니스 규칙 시행과 같은 데이터베이스 관리 시스템이 제공하는 기본 제공 방어 기능을 활용하여 오류를 방지하고 식별하고 데이터베이스의 모든 테이블과 계층간에 일관성을 유지합니다.

이 제안과 관련된 몇 가지 지침 원칙 은 다음과 같습니다.

  1. 이 작업에 적합하지 않은 소프트웨어를 사용하는 대신 데이터베이스 관리 시스템을 사용하여 데이터를 처리하십시오.
  2. 작업에 반드시 필요하지 않은 경우 데이터베이스 구조 변경 (예 : 필드 삭제 또는 추가)을 피하십시오.
  3. 자동화를위한 소프트웨어 기능을 사용하여 작업을 단순화하고 문서화하며 작업을 재현 할 수있게하십시오.

많은 경우에 동일한 결과에 도달하는 더 빠르고 쉬운 방법이 있다고 반대 있습니다. 그렇습니다. 효과적 일 수 있으며 대개주의 해서 수행 할 때 효과가 있습니다 . 그러나 데이터를 위험에 빠뜨릴 수있는 솔루션은 범용 답변으로 권장하고 방어하기가 어렵습니다. 데이터의 손상이 빠르게 명백 해지고 그러한 실수의 결과가 중요하지 않은 작은 데이터 세트가있는 일회성 상황에 가장 적합합니다.


+1 @ whuber-여기서 모든 변수를 계량하려고 시도한 것이 분명합니다. 잘 생각 된 답변. 주석 상자에 공간이 부족하므로 원래 답변에 추가 된 내용을 참조하십시오.
Dano

1
지금 @djq로 알고, 그 / 그녀의 대답은 : "Celenius"에게 무슨 일이 일어 났는지 궁금 사람들이 스레드의 다양한 장소를 언급 여기 . 명예 기계를 뒤로하기 : web.archive.org/web/20120127210858/http://gis.stackexchange.com/...
매트 윌키

5

Arcmap에서 다각형 B를 다각형 A에 공간적으로 결합 할 수 있습니다. 이것은 속성과 관련이 있습니다. 필드 이름이 동일하면 이름의 새로운 조합이 만들어집니다.


이것이 내가 넣을 것입니다. 내 눈에는이 짧은 대답이 옳습니다.
Simon

4

셰이프 파일 "B"에 대한 테이블을 Excel로 내보내고 중복 된 열과 필요없는 정보가 포함 된 열을 삭제하십시오. 공유 식별자 열을 유지 한 다음 적절한 폴더에 저장하십시오. ArcMap으로 이동하여 테이블을 추가 한 다음 Shapefile "A"를 마우스 오른쪽 버튼으로 클릭하고 테이블 조인을 수행하십시오 . 링크는이 작업을 수행하는 방법에 대한 비디오로 연결되어야합니다.


@ whuber-전체 접근 방식은 건전하며 데이터의 무결성을 보장합니다. 이 답변을 반박 할 수있는 유일한 것은 특정 상황 / 프로젝트가 우리에게 접근 할 때이 체계적인 시간이나 예산을 줄 수 없다는 것입니다.

실제와 같은 예 :

Junior Mining Company는 자원을 "증명"할 수있는 능력으로 휴식을 취하면서 수백 만 달러의 현금을 투입 한 주요 광석에 앉아 있습니다. 출판물 및 지질지도 / 데이터에 대한 데스크탑 검토는 매우 목표가 있고 비용이 많이 드는 드릴 프로그램으로 이어집니다. 분석이 첫 번째 실행에서 돌아 오면이 값은 테이블 조인을 통해 해당 지점 위치에 태그가 지정되고 데이터가 DataMine으로 가져 오기 위해 열심히 준비된 Excel 형식으로 펌핑됩니다 (3D orebody 보간).

내 경험에 의하면 , 프로젝트 지질 학자들은 필요 는 EVERY이 편지에 규칙 / 규칙을 포맷 (공백, 특수 문자 등)와 DataMine 가져 오기 파일은 .CSV 형식으로 전달 된 것을 따랐다,이 데이터가 Excel에서 수험 공부를하는 것이 (그때 어쨌든). 이로 인해 목표 시추에 더 많은 투자가 이루어질 것이며, 우리는 그 과정 (일부 경우)을 여러 번 다시 방문 할 것입니다. 이 모든 것은 일반적으로 매우 타이트하고 중요한 타임 라인에서 발생했습니다.

우리 각자는 우리 자신의 이야기와 우리가 일을 수행하는 방법에 대한 우리의 접근 방식에 포함시킨 다양한 경험을 가지고 있습니다. 내 경험에 따르면 Excel은 절대적으로 필요하며 워크 플로에서 중요한 도구로 여겨졌습니다. 내가 아는 것입니다. 이 데이터를 준비 할 때 모든 QA / QC 예방 조치를 취했습니다. Excel에서 부끄러워하는 곳에서는 사용할 수밖에 없었습니다.


(-1) Excel을 사용하여 조인을 수행하는 것은 GIS 또는 RDBMS로 수행하는 것보다 더 어려울뿐만 아니라 심각한 오류를 유발합니다.
whuber

8
Excel은 간단하고 작동하며 그로 인해 아마도 지금까지 생산 된 소프트웨어보다 더 많은 발견되지 않은 도매 오류에 대한 책임이 있습니다. Excel에서 너무 커밋하기 쉬운 오류를 방지하기 위해 개발 된 DBMS의 기본 원칙 (1) 일부 열은 정렬하지만 다른 열은 정렬하지 않음)을 위반합니다. (2) 데이터 유형을 변경하는 인쇄상의 오류; (3) 데이터를 지우는 키 스트로크; (4) 행 또는 열의 의도하지 않은 삭제; (5) 텍스트를 날짜로 변환하는 등의 숨겨진 데이터 변환; (6) 숨겨진 데이터 잘림; (7) 숫자 값의 숨겨진 반올림; 그리고 더 많은.
whuber

2
이 답변과 그에 따른 해설은 "나쁜"답변이 어떻게 좋은 결과를 불러 일으킬 수 있는지에 대한 훌륭한 예입니다. "타격"을 피하기 위해 삭제하지 않아야합니다.
matt wilkie 22시 01 분

3
... 적중을 보충하기 위해 훌륭한 질문 은 Excel을 사용하여 데이터를 처리하는 이유가 무엇인지 묻는 것입니다. 그리고 안전하게 사용하는 방법.
matt wilkie


1

1990 년대 후반에 우리는 55 개의 NTS 맵 시트와 수천 가지의 특징을 포함하여 모든 수역과 수로에 대한 대규모 업데이트를 받았습니다. 기존 수 문학 (호수 이름, 표면 높이 등)의 부가 가치 속성을 유지하고 형상을 대체해야했습니다. 구식과 신식의 지오메트리는 각 폴리곤의 중심이 새로운 폴리곤 경계에 의해 여전히 구속 될 수 있음을 보장 할만큼 충분히 가까웠습니다. 이것은 기본적인 확실성이 없으면 중요한 접근 방식이지만 아래의 접근 방식은 좋지 않습니다.

이 특별한 경우 의 해결책 은 속성을 지오메트리로 가져 오는 대신 지오메트리를 속성으로 가져 오는 것입니다. 따라서 개념적으로 :

  1. * Layer_with_attributes *에서 다각형을 삭제하지만 테이블 레코드는 유지합니다.
  2. * Layer_with_polys *에서 지오메트리를 * Layer_with_attributes *에 복사하여 붙여 넣기 *
  3. 병합하고 저장하십시오.

대한 자세한 설명과 레시피는 여기 를 참조 하십시오 . 현대 Arcgis 또는 Qgis에서도 속성 레코드의 속성 레코드를 동시에 삭제하지 않고 형상을 삭제할 수 있는지 확실하지 않지만, 경우에 따라 여기 아이디어가 있습니다.


1

확실하지는 않지만 일부 DBMS는 SQL (?)의 Shape 필드에서 동등 작업을 수행합니다. 두 기하학이 동일하면 SQL =연산자는 true ( WHERE A.Shape = B.Shape)를 반환해야합니다 .

이것이 사용중인 데이터베이스에 해당되는 경우 비 공간 조인과 동일한 구문을 사용하여 공간 조인을 수행 할 수 있어야합니다.


외모 ST_Equals의 이 사용할 수있는 방법 (AN OGC 표준).


0

평소와 같이 whuber가 옳습니다. 프로세스에 대해 철저히 생각해야합니다. 특히 이들이 대규모 데이터 세트이고이 작업이 여러 번 수행되거나 데이터가 미션 크리티컬 한 경우.

데이터와 책임을 고려하십시오.

무슨 짓을 한거야?

뭐하는거야?

무엇을하려고합니까?

그리고 항상 묻습니다. 왜?


이제 질문에 직접적으로 초점을 맞춘 간단한 대답이 있습니다. 항상 5 가지 방법으로 작업을 수행 할 수 있지만 일반적으로 가장 좋은 방법은 1 가지입니다.

전체 집합에 하위 집합에 포함하려는 모든 속성이 있고 하위 집합에 오래된 정보를 제외하고 전체 집합에 아직없는 것이 있다고 가정합니다.

서브셋 토폴로지가 풀셋과 일치하는지 추측합니다 (원점 / 투영 및 XY 공차 포함).

1) "내부"체크 상자를 체크 한 상태에서 피처 투 포인트를 사용하고 서브 세트에서 포인트 피처 클래스 또는 쉐이프 파일을 생성합니다.

2) 공간 결합 별 선택을 사용하여 새로 작성된 점 피쳐 클래스 또는 쉐이프 파일을 기반으로 하위 세트에 해당하는 전체 세트의 모든 다각형을 찾습니다.

3) 전체 세트에서 선택을 내 보내면 새 하위 집합이 될 수 있습니다.


0

분명히 다각형 A가 다각형 B의 하위 집합 인 경우 가장 쉬운 방법은 다각형 A를 반복하는 것입니다. 다각형 A에있는 ID (A가 하위 집합이거나 B 인 경우 B)를 사용하여 행 데이터를 검색합니다 다각형 B를 누른 다음 다각형 A에서 행을 업데이트하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.