레이블 버퍼를 사용하는 대신 입면 레이블 아래 등고선을 차단하는 방법은 무엇입니까?


32

입면도 레이블 아래에서 등고선을 차단하는 방법이 있습니까?

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


ArcGIS? QGIS? 관습?
Ragi Yaser Burhum

1
컨투어 라벨링에 qgis를 사용합니다
MAP

PostGIS가 필요한 답변을 수락 하시겠습니까?
Scro

3
불행히도 : 아니오 :) 그러나 PostGIS의 문제를 해결할 수있는 방법이 있습니까?
지도

답변:


22

예, 가능합니다. 일반적으로 부분적으로 투명한 버퍼를 제안하지만이를지도로 작성하려는 이유를 알 수 있습니다.

속도가 느릴 수 있으며 레이블을 이동할 위치를 수동으로 결정해야합니다. 그러나지도 제작 방식으로는 나쁘지 않습니다!

스크린 샷이 있습니다 ...

보시다시피 버퍼가 없습니다. 아래의 래스터는 영향을받지 않습니다. 더 얇은 중간 등고선을 포함 시켰으며 ELEV % 50 <> 0 인 경우에만 표시되도록 스타일을 지정했습니다.

중단 된 등고선의 예

QGIS 2.12에서이 작업을 수행했습니다. 마일리지는 이전 버전과 다를 수 있습니다.

여기 각 윤곽선에 "ELEV"필드가 있다고 가정합니다.

등고선을 세분화

  1. 처리 및 GRASS 알고리즘 v.split.length 를 사용하여 등고선을 동일한 길이의 세그먼트로 분할하십시오. 미터를 사용한다고 가정 할 때지도 단위에서 레이블 크기에 가까운 길이를 선택해야합니다. 여기서는 200m를 사용했습니다.

    파일을 훨씬 더 크게 만들 수 있으므로이 점에주의하십시오 (스크린 샷의 기능 개수에 유의하십시오).

    이 문제를 해결하려면 모든 중간 등고선 처리를 피하기 위해 스타일을 지정할 등고선 (예 : 50 또는 100 미터마다) 만 생성 할 수 있습니다.

  2. 이 레이어에 showLabel 이라는 1 자리 정수 필드를 추가하십시오 . 기본값은 0 또는 NULL입니다.

  3. 이 필드가 1로 설정된 세그먼트에만 표시되도록 레이블을 변경하십시오. 레이블 텍스트 표현식에 사용하십시오.

    if ( "showlabel" is not null, "ELEV", "")
    

    나는 if (expression, true-value, false-value) 가 상당히 새로운 것이라고 생각 합니다 . 이전 버전을 사용하는 경우 CASE-ELSE를 사용할 수 있습니다

  4. 레이블이 표시되는 세그먼트를 제외하고 고정 길이 세그먼트가 모두 그려 지도록 선 스타일을 변경하십시오 . 따라서 두 가지 규칙을 사용하여 규칙 기반 렌더링을 사용하십시오.

    Rule 1: "showLabel" is null
    Black, 0% transparent
    
    Rule 2: "showLabel" is not null
    Any colour, 100% transparent
    

    이제 모든 윤곽선이 기본적으로 표시되지만 레이블은 표시되지 않습니다.

    라벨을 표시하려는 세그먼트를 수동으로 수정

    편집 모드 로 이동 하여 형상 값을 표시 할 선분을 수동으로 선택 showLabel하고 선택한 피처에 대해 값 을 1로 설정합니다 . 당신은 사용할 수 있습니다 Ctrl(우분투 / 승리에 + 선택 Cmd+ Ctrl+는 Mac에서 / 클릭?) 다중 선택 세그먼트에 속도 일까지.

    이제 레이블을 표시 할 윤곽선을 '클립'해야하며 레이블이 간격에 표시됩니다.

이 경우 라벨 설정은 다음과 같습니다.

CRS: EPSG 27700 (Local UTM for UK, in meters)
Text size: 50 map units
Placement: Parallel, On Line

희망이 도움이됩니다!


5
이것이 내가 상상할 수있는 유일한 솔루션입니다. 레이블이 많으면 매우 고통 스럽지만 모든 지하수 헤드 맵 (연간 수천)을 이런 식으로 수행한다고 상상할 수 없습니다. 미래에 스타일을 통해 달성 할 수 있다면 좋을 것입니다. 사용자 정의 선 패턴과 레이블 반복 + 오프셋이 가장 좋을 것입니다.
Miro

2
작업을 쉽게하기위한 몇 가지 아이디어 : 레이블을 그릴 여러 세그먼트를 선택하려면 다각형으로 선택 또는 자유형으로 선택이 편리 할 수 ​​있습니다. 또한, 또 다른 방법은 윤곽선을 가로채는 선을 그릴 스크래치 선 레이어를 만든 다음 위치 별 선택을 수행하는 것입니다.
Alexandre Neto

7

"라벨 설정"탭에서 "버퍼"옵션을 사용합니다. (레이어 속성 대화 상자에서 이전 레이블 옵션이 아닌 레이블 단추를 사용합니다.) 이렇게하면 윤곽선이 지워지지 않지만 레이블을 읽을 수있게 만듭니다.


4
전에는 생각해 본 적이 없지만 버퍼에 색상을 할당하는 대신 선택한 레이어에 '녹아웃'으로 적용 할 수 있다면 편리합니다.
Scro

4
최신 버전의 QGIS에는 투명한 버퍼가 있으므로 맵의 다른 부분에 대한 영향을 줄일 수 있습니다.
Nathan W

1
@MAP 녹아웃은 그 아래의 픽셀을 지 웁니다. 이것이 옵션 인 경우이 경우 등고선 레이어를 녹아웃하도록 선택합니다.
Scro

1
녹아웃-esri 용어는 "마스킹" resources.arcgis.com/en/help/main/10.1/index.html#//…
mike

1
@MAP-개발자를 후원하거나 기능 요청을 제출하고 다른 사람들의 자선을 기다립니다. :)
Scro

5

현재 QGIS 기능으로 얻을 수있는 가장 가까운 것은 기본 그리드에 사용 된 것과 같은 표고 값과 색 구성표를 기반으로 테이블에서 가져온 색상으로 후광 (또는 배경) 효과 를 사용 하는 것입니다. 물론 이것은 언덕의 그늘과 후광 아래의 모든 것을 고려하지 않았습니다 . 임의의 색상 예 : 라벨의 후광 효과를위한 임의의 색상 약간의 코드로 그리드 색상을 반영하는 함수로 다시 작성할 수 있습니다.

이론적으로 사용자 정의 선 패턴과 레이블 반복 + 오프셋을 사용할 수 있어야합니다 . 불행히도 라벨 오프셋 설정이 없습니다.

  • 일부 테스트 후 QGIS가 레이블을 정확한 간격으로 다른 곳에 두지 않아도됩니다 (+ 어쨌든 시작 오프셋 누락).
  • 공간이 20 줄-10 줄-70 줄-0 줄과 같이 시작 오프셋을 갖도록 0mm의 사용자 정의 선 패턴을 만들 수 없으므로 레이블은 처음에 30mm 오프셋으로 100mm마다 배치됩니다. 즉, 레이블은 모든 10mm 구멍의 중간.

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


2

최근에 같은 문제에 부딪힌 후 QGIS Python 스크립트를 작성하여 무거운 작업을 수행했습니다. 사용 된 일부 (영국) 테스트 데이터, 추가 정보 (가이드) 및 스타일 시트가 포함 된 스크립트는 https://github.com/pjgeng/Contour-Labels 에서 찾을 수 있습니다.

간단히 말해서 스크립트는 주석이있는 등고선 레이어와 "가이드"레이어라는 두 개의 벡터 레이어를 입력으로 사용합니다. 후자는 원하는 레이블 위치에서 윤곽선을 교차하는 폴리 라인으로 구성됩니다.

그런 다음 스크립트는 윤곽선과 적용 할 레이블이있는 색인 윤곽선 간격 사이의 거리에 따라 작동하고 레이블 값에 회전 값을 추가 한 다음 원래 윤곽선 레이어를 잘라 간격을 만듭니다.

최종 결과의 근접 촬영.

이 방법은 사용자가 동일한 영역에서 서로 다른 간격으로 등고선 맵을 생성해야하는 경우 특히 효과적입니다 (즉, 안내선은 변경되지 않음). 단점은 스크립트가 완료되면 레이블 위치를 변경할 수 없다는 것입니다. 이를 위해 사용자는 안내선을 조정하고 원래 입력에 대해 스크립트를 다시 실행해야합니다. 이전에는 레이블 주위의 버퍼를 사용하여 중단 효과를 만들었지 만 벡터 데이터 기반 맵에서는 미적으로 불쾌한 것으로 나타났습니다.

불행히도 현재 프로세스를 자세히 문서화하거나 설명하기 위해 더 이상 그림을 추가 할 수 없습니다.

추신 : 리포지토리에 제공된 스타일 레이어를 사용하는 경우 라벨링 메뉴에서 "회전", "라벨 표시"및 "항상 표시"에 대한 사용자 정의 필드를 "활성화"해야 할 수도 있습니다. 일부 QGIS 설치에서 이들은 스타일 시트에서 자동으로 적용됩니다-아직이 원인을 알지 못했습니다.


1

스레드 마틴 을 기억하십니까 ? 문제에 대한 해결책에 가까워 질 수있는 유일한 방법은 윤곽 레이어를 잘린 윤곽 레이어로 오버레이하고 레이블을 지정하는 데 사용하고 레이블 아래의 윤곽을 가리는 선 색을 중립으로 변경하는 것입니다. 너무 방해받지 않고 희망한다. 엔.

나중에 추가 : 이 스레드 도 두 번째 대답 으로 볼 가치가 있습니다 . 아마도 등고선을 끊는 것이 대답 일 수 있습니다. 아마도 등고선을 자르는 데 사용되는 버퍼 층을 사용합니까?


0

ESRI 블로그 항목 : http://blogs.esri.com/esri/arcgis/2011/11/28/variable-depth-masking-contour-label-example/

등고선 레이블의 가변 심도 마스킹에는 다음 세 단계가 포함됩니다.

1 레이블에서 주석 만들기, 2 Feature Outline Masks 도구를 사용하여 마스크 만들기 및 3 고급 그리기 옵션> 마스킹 설정을 사용하여 마스크에서 마스크를 제거 할 레이어 지정


이것은 구현 방법을 보여 주지만 실제로 질문에 대답하지는 않습니다.
underdark
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.