한 레이어에서 둘 이상의 스케일에 대한 데이터 정의 레이블 위치


10

내 프로젝트에 더 나은 라벨링 솔루션을 찾고 있습니다. 어려워 보이지만 아마 장님일까요?

내 프로젝트 : 인쇄 된 자전거 하이킹 서적을 제작합니다. 기본 스케일은 1 : 75k이며 도시 스케일은 10k이고 개요 스케일은 200k입니다. "Cartographic"품질의 레이블 배치를 원하기 때문에 모든 단일 레이블을 터치하여 최상의 위치로 옮깁니다. 모든 단일 스케일에 대해이 작업을 수행해야 하므로 3 개의 스케일에 대한 레이블 열은 다음과 같습니다 ( 'scale 1'은 10k 'scale 2'는 75k, 'scale 3'은 200k).

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

그러나 자세히 설명하기 전에이 간단한 Example-Project를 작성하여 3 가지 척도에 대한 (오래된) 레이블링 솔루션을보고 테스트 할 수 있습니다 : http://www.map-site.de/tmp/LabelingExample.zip

글쎄, 그것은 작동하지만 :

  • 모든 스케일에 라벨링 열이 필요합니다
  • 모든 스케일에 레이어가 필요합니다

중복 레이어와 수많은 열이없는 훨씬 더 나은 솔루션을 찾고 있습니다. 나는 당신의 창조적 인 마음에 의지합니다!

편집 :이 두 개의 매우 조밀 한지도를 예제로 추가했습니다.

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

"St. Paulus Dom"에 대해 가능한 위치는 단 하나 뿐이며 사분면은 아닙니다. 여기에 이미지 설명을 입력하십시오

모든 라벨은 수동으로 이동해야합니다. 일부 레이블이 사분면에 없습니다.


레이블이 특정 기준을 충족해야합니까? "최상의 입장"이란 무슨 뜻인지 이해가되지 않습니다
mgri

1
"최상의 위치"라는 용어는지도 작성 주장에 따른 위치를 의미합니다. 더 주관적입니다.
MAP

2
나는 당신의 예제가 내가 가지고 있지 않은 글꼴 인 'Noto Sans'를 사용한다는 것을 알았으며 다른 사람들도 그럴 것이라고 생각합니다. google.com/get/noto 에서 글꼴을 다운로드 할 수 있습니다 . 글꼴을 설치 한 후 QGIS를 다시 시작해야합니다.
TJ Rockefeller

해당 링크를 추가해 주셔서 감사합니다. 이것은 Mint 설치의 표준 글꼴입니다.
지도

답변:


7

나는 당신이 요구하는 것이 조금 복잡하다는 것을 말해야합니다. 왜냐하면 라벨이 작은 규모뿐만 아니라 큰 규모 (최적)로 명확하게 보이기를 원하기 때문입니다. 여기에서 아이디어는 다른 스케일로 볼 수있는 포인트를 배치하는 방법입니다.

여러 번 테스트 한 결과 각 스케일 범위에 대해 여러 개의 열을 만들고 고정 점에 x 및 y에 대한 좌표를 넣는 대신 아래에서 볼 수 있듯이 최상의 위치에 대해 각 지점의 우선 순위 위치에 대해 하나의 열만 만들 수 있음을 발견했습니다 (I 파일의 위치를 ​​따라) :

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

그런 다음 Layer propoerties -> Labels -> Placement -> Offset from point또는 로 이동하여 Around point모두 OK이지만 선택했습니다 Offset from point.

  1. 에서 Quadrant선택 Data defined override -> Edit하고 다음 수식을 입력 :

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

    CASE 
    WHEN  $scale >= 200000 THEN  "priority"  
    WHEN  $scale < 200000 and $scale >= 75000 THEN  "priority"   
    WHEN  $scale < 75000 and $scale >=10000 THEN  5
    WHEN  $scale < 10000 THEN 2 
    END
    

    "Priority"필드 이름에 정의 된 지점의 위치는 다음과 같습니다.Priority

  2. 더 나은 가시성을 위해 점을 이동하려면 오프셋을 사용해야하며 다음 공식을 사용했습니다.

    CASE
    WHEN  $scale >= 200000 THEN '0.001,0'
    WHEN  $scale < 200000 and $scale >= 75000 THEN '0.001,0'
    WHEN  $scale < 75000 and $scale >=10000 THEN '0.0005,0'
    WHEN  $scale < 10000 THEN '0.0001,0'
    END
    

다른 스케일의 출력은 다음과 같습니다.

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

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

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

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

어떤 위치에서 각 숫자 [0-8]이 무엇을 나타내는 지 보려면 다음 이미지를보십시오.

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

각 위치에 해당하는 값을 추가하여 레이블의 위치를 ​​제어 할 수 있습니다. 그러나 불행히도 'click-and-move'방식으로는 그렇게 할 수 없습니다. 속성 테이블에서이를 수행해야합니다.

최신 정보:

9 사분면 위치가 충분하지 않다는 요구 사항에 따라 아래 이미지에서와 같이 Cartography대신을 Offset from point선택하고 우선 순위를 선택하면 9 대신 12 개의 우선 순위 위치가 있음을 알았습니다. Text유형 필드를 만든 다음 최고의 위치 'TL', 'TSL', 'T'등 원하는 약어 만 입력하십시오. 또한 레이블이 점을 덮지 않도록 거리를 입력 할 수 있습니다.

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


그것은 지금까지 시도하지 않은 접근법입니다. '클릭 앤 이동'을 통해 사분면에 레이블을 배치하는 방법이 있습니까?
MAP

불행히도 '클릭 앤 이동'방식으로는 불가능합니다. 속성 테이블에서이를 수행해야합니다. 그러나 x, y 스케일 수준마다 1 열을 추가하는 것이 6 열보다 낫습니다. 답변을 업데이트했습니다.
ahmadhanb

1
마지막 날에는 해결책을 제시하려고했지만 더 일반적인 해결책을 제시하기에는 문제가 너무 주관적이라고 생각했기 때문에 포기했습니다. 대신 @ahmadhanb의 솔루션은 그것을 수행하기에 충분히 독창적 인 것 같습니다 (그러나 테스트하지는 않았습니다). 나를 위해 +1.
mgri

동의합니다. 여기서 주관성이 높습니다. 레이블의 위치가 적합한 지 판단 할 수있는 방법에 대한 개인적인 의견입니다.
ahmadhanb 2012

1
우선 순위 위치를 편집하기 위해 식별 도구를 사용하지 마십시오. 선택 도구를 사용하는 것이 좋습니다. 속성 테이블을 열고 선택한 점만 표시하도록 선택하십시오. 편집 세션을 시작하고 위치를 업데이트하고 편집 내용을 저장하십시오. 데이터 정의 재정의에 식을 이미 추가 한 경우 우선 순위 위치가 직접 업데이트됩니다.
ahmadhanb

3

표현식을 사용하여 여러 레이어를 제거 할 수 있습니다.

예제에서 볼 수 있듯이 레이어 간의 주요 차이점 Data defined Coordinate X Y은 다른 스케일 x, y 값을 가리키는 정의입니다.

X 및 Y 옆에있는 드롭 다운을 선택하고 편집 ...을 선택하여 단일 문자열로이를 수행 할 수 있습니다. 그러면 표현식 문자열 빌더가 나타납니다.

X의 경우 다음과 같은 것을 사용할 수 있습니다

if(@map_scale <=10000, "scale1-x", if(@map_scale <=75000, "scale2-x", "scale3-x"))

그리고 Y의 경우 다음과 같은 것을 사용할 수 있습니다

if(@map_scale <=10000,  "scale1-y" , if(@map_scale <=75000, "scale2-y", "scale3-y"))

맵 스케일이 1 : 10,000보다 작거나 같으면 scale1 x, y 값을, 맵 스케일이 1 : 75,000보다 작거나 같으면 스케일 2 x, y를 사용해야합니다. .

각 스케일에 대해 수동으로 배치 해야하는 경우 정의한 각 레벨에 대해 scale # -x 및 scale # -y 열에서 어떻게 벗어날 수 있는지 알 수 없습니다.


무게가 다른 레이블의 운명이 높습니다. 자동화가 '실제'지도 제작 방식으로 할 수 없기 때문에 수동으로 배치해야합니다. 그리고지도는 매년 인쇄 및 업데이트되므로 라벨링은 다소 정체되어야합니다. en.wikipedia.org/wiki/Cartographic_labeling#Placement
MAP

@MAP OK, 항목을 수동으로 배치해야한다는 것을 알기 때문에 레이어와 열이 더 적습니다.
TJ Rockefeller

1
이는 하나의 레이어로 3 개의 스케일 레이블을 표시하는 데 도움이됩니다. 그러나 QGIS는 표현식을 통해 좌표를 "쓰기"할 수 없습니다. 당신이 언급 한대로 scale-expression을 사용하면 더 이상 레이블을 이동할 수 없습니다.
지도
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.