QGIS의 다른 레이어와 겹치는 경우 라벨링 기능을 피합니까?


16

QGIS 2.12.2에서 다른 레이어의 피처가 이미 존재하는 곳에 레이블을 배치하지 않도록 레이어 레이블을 설정하려면 어떻게해야합니까?

예를 들어, 호수 "centerlines"를 포함 하는 하천 / 강 폴리 라인 레이어가 있고 그 위에 "lake" 폴리곤 레이어를 그리기 순서로 배치하면, 리버 레이어가 레이블을 호수 안에 배치하지 않기를 원합니다 . 대신, 나는 호수 바깥 에 (필요에 따라) 레이블이 붙은 강을 선호 합니다. 이렇게하면 호수 레이어에서 레이블을 배치 할 수 있으며 레이블 충돌이 발생하지 않습니다.

다음은 호수 의도 내부에 강 중앙선 레이블이 표시되지 않은 경우 (시각적으로 의도적으로 선을 시각적으로 표시 한 예)입니다. 선은 다각형 안에 표시됩니다


4
데이터는 어떻게 저장되고 제공됩니까? PostGIS와 함께 일하면서, 강을 교차하는 강의 일부가 완전히 잘리는 전망을 가지고 강을 정의하고 싶습니다. 좋은 자동 라벨링은 어려운 문제이며 지오메트리는 적습니다.
alphabetasoup

이들은 shapefile이지만 PostGIS로 이동하고 데이터 문제를 즉시 관리한다는 아이디어는 정말 좋습니다. 나는 이것이 좋은 해결책이라는 꽤 유효한 주장을 할 수 있기 때문에 귀하의 의견을 답변으로 옮길 것을 제안합니다.
RyanKDalton

답변:


9

자동 레이블링 은 실제로 어려운 문제이지만 피처 지오메트리는 그리 나쁘지 않습니다.

대부분의 시간에 일할 수있는 배치를 할 수 있다고해도 예외가있을 수 있습니다. 이 중 일부는 귀하가 알아 차리고 해결 될 수 있습니다. 큰지도 나 타일셋을 만들 때 눈에 띄지 않는 다른지도는 다양한 크기로지도의 모든 인치에 부어 넣을 수 없기 때문입니다. 거의 항상지도 제작 관점에서 자동으로 배치 된 일부 레이블을 수동으로 이동해야합니다.

내 의견에서 제안했듯이 라벨 엔진에 문제가 더 쉬워졌습니다. 이 경우, 호수 경계를 존중하기 위해 강 지오메트리를 클리핑하여 강을 테이블보기 *로 정의하면됩니다. 그렇게하면 호수 안에 라벨을 붙일 강 특징이없고 라벨 충돌도 없습니다.

* 편의상 신뢰할 수있는 데이터 소스 만 업데이트하고 사용자 개입없이보기 자체를 수행 할 수 있도록 PostgreSQL / PostGIS와 같은 RDBMS를 여기에서 사용한다고 가정합니다. 그러나 정적 파일로 일부 작업을 수행하여 지형지 물을 잘라내거나 삭제할 수도 있지만지도를 다시 방문하려는 경우에는 권장하지 않습니다.

예:

강과 호수의 두 가지 모양 파일 (데이터베이스 테이블 일 수 있음)로 시작하여 강이 호수를 교차하고 완전히 그리고 자신있게 해결하기 어려운 레이블 문제가 발생합니다.

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

shp2pgsql로 필요한 경우 Postgres에 가져 오십시오 .

shp2pgsql -s 4326 /data/lake public.lakes | psql -d mydb

shp2pgsql -s 4326 /data/river public.rivers | psql -d mydb

그런 다음 ST_Difference 로 뷰를 정의 하십시오 .

CREATE OR REPLACE VIEW rivers_clipped AS
SELECT r.id, ST_Difference(r.geom, l.geom) AS geom, r.name
FROM public.rivers AS r, public.lakes AS l;

레이아웃에보기를 추가하십시오.

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

필자의 예제에서 문제는 의도적으로 제작되었지만 두 강 레이어의 스타일 (원본과보기)은 동일하며 그림 순서대로 호수 위에 배치됩니다. 호수 또는 강 지오메트리를 업데이트 할 때 렌더링을 새로 고치는 것 이상을 수행 할 필요가 없습니다.

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


2
DB 레이어를 직접 사용하지는 않았지만이 솔루션은 초기 데이터 소스의 지오메트리를 편집 할 필요가 없으므로 (DB에로드하는 것 외에) 나에게 가장 적합했습니다. 이것은 shapefile과 응용 프로그램 제한의 틀 밖에서 생각하고 응용 프로그램과 DB 논리를 결합하여 문제에 대한 창의적인 솔루션을 찾는 훌륭한 예입니다.
RyanKDalton

13

QGIS> = 2.12에서는 "lake"폴리곤 레이어를 레이블 장애물로 설정할 수 있습니다. 이는 '레이블'섹션 아래의 "호수"레이어의 레이어 속성을 통해 수행됩니다. 맨 위에있는 콤보 상자를 " 레이블 없음 "에서 " 다른 레이어에이 레이어의 피처가 포함 되지 않도록하십시오"로 변경하십시오 .


1
감사. 나는 그런 것을 찾고 있었고 그 전에 드롭 다운 옵션을 보지 못했습니다. 그러나 나는 이것이 적당히 성공했다고 말할 것입니다. 1) River 레이어에서 "정렬 한 종류의"낙담 한 레이블 만 (호수 내에 표시되지만 덜 표시됨) 2) 이제 호수 이름 레이블이 없습니다. 강 레이블 설정> 장애물 "피처를 덮지 못하도록 레이블 사용 금지"(성공 없음) 및 가중치 낮음 및 높음 (성공 없음) 설정 및 게재 위치> 우선 순위 = 낮음 및 높음 (성공 없음) 설정을
시도했습니다

아, 아마 오해했을 것입니다. 호수 레이어에 레이블이있는 경우 렌더링 탭 아래의 "레이블에서 표지 기능 사용 안 함"확인란이 선택되어 있는지 확인하십시오. 원하는 결과를 얻기 위해이 그룹의 "weight"슬라이더와 다른 옵션을 가지고 놀아야 할 수도 있습니다.
ndawson

1
아니, 당신은 확실히 올바른 길을 가고 있었다. 나는 가중치 (호수 폴리곤에 높은 가중치 + "피처 내부에 레이블을 배치하는 것을 최소화하고 강에 가중치를 낮춤)를 가지고 놀았지만 더 가까워졌지만 실제로는 강 레이블이 호수에 없었던 지점에 도달하지 못했습니다. 다각형의 내부와 외부에있는 선과 관련이있는 것 같습니다
RyanKDalton

4
레이블을 지정할 때 해당 줄을 제거하거나 분할하지 않는 이유는 무엇입니까? 어쨌든지도에는 유용하지 않습니다.
radouxju

4

적어도 내지도 제작자의 감각을 만족시키는 레이블을 생성하기에는 레이블이 일반적으로 매우 어렵다는 것을 알았습니다. 자동 라벨링 기능은 80 %의 시간 동안 잘 작동하지만 강 / 호수 라벨링 문제와 같이 멋진 라벨링을 생성하지 않는 경우가 있습니다. 자동 레이블링은 종종 피쳐의 형상과 관련이 있습니다. 예를 들어 처음에는 모든 파트에 레이블이 지정되도록 라인에 몇 개의 파트가 있는지입니다. 물론 QGIS는 반복되는 라벨링을 방지하는 수단을 가지고 있으며, 이는 현재지도보기의 규모에 따라 다릅니다.

어쨌든 내 팁은 빠른 해결책이 아닙니다. 라벨링을 위해 특수화 된 레이어를 만들어 내 라벨을보다 쉽게 ​​제어 할 수 있습니다. 또한지도 제작을위한 지형 지오메트리가 레이블링에 적합한 지오메트리와 충돌 할 수 있습니다. 따라서 스트림이 호수를 건너지 않는 새 레이어를 만들어서 문제를 완전히 피할 수 있도록 제안합니다. 라벨링 레이어를 추가하면 라벨링 방향이 지오메트리 생성 방식과 관련되어 있기 때문에 라벨링 방향이 의도 한 방향에 있지 않은 문제를 방지 할 수 있습니다.

글쎄, 나는 내 팁이 당신이 기대 한 것이 아니라는 것을 두려워하지만, 내 대안이 어떻게 든 당신을 도울 수 있기를 바랍니다.


새 데이터 세트를 만들 수 있다는 유효한 지적을합니다 (이 경우에는 쉽게 수행 할 수 있습니다 ... 다각형에서 선 기능을 지우십시오). @Richard Law와 같은 데이터베이스 기반 방법이 언급되었습니다.
RyanKDalton

나는 당신의 요점을보고 비슷한 데이터 세트를 두 번 만드는 주저를 이해합니다. 내 경험상 레이블 레이어는 종종 원래 데이터 레이어와 더 다릅니다. 예를 들어, 강 예를 고수하기 위해 강의 지오메트리를 변경하여 지형지 물 부분을 결합하거나 분할하여 더 꾸준하게 반복되는 멋진 레이블을 만들 수 있습니다. 예를 들어 OSM 도로를 다룰 때 때때로 이것은 종종 임의로 구성됩니다.
Frank

3

다각형을 기반으로 레이블을 필터링하는 데 사용할 수있는 " 마스크 " 라는 플러그인 이 있습니다.

그러나 이전 의견에서 언급했듯이 호수와 교차로 선을 분할 할 수 있다면 훨씬 쉽습니다 ( 여기의 다른 방법 참조 ). 그런 다음 호수 내에있는 세그먼트에 대해 크기가 0 인 레이블을 정의 할 수 있습니다 ( "레이어"> "라벨링"> "데이터 정의 설정"> "크기", 레이블 크기를 저장하는 열 선택). 분할은 하천 네트워크의 대부분의 속성을 유지하고 디졸브로 되돌릴 수 있으므로 단일 레이어로 계속 작업 할 수 있습니다 (필요한 경우 전체 길이를 특정 속성 테이블에 저장).


고맙게도 플러그인이 유망한 것처럼 들리므로 시도해 볼 것입니다.
RyanKDalton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.