여기에 대략적인 (그러나 희망적으로 효과적인) 방법이 있습니다.
먼저 수학. 지형지 물에 포함 할 수있는 특정 글꼴 크기의 문자 수를 파악해야합니다. 알아야 할 사항 / 가정 :
- 미터법 단위를 가정 할 때 (아래에 약간의 변경 사항이 추가되어이 문제가 해결 될 수 있습니다.)
- 글꼴 크기는 글꼴 높이를 측정 한 것입니다. 대부분의 글꼴은 높이의 절반 정도입니다.
- 글꼴 높이에 pt를 사용하면 1pt는 대략 0.035CM입니다.
- 소포가 대략 직사각형 / 규칙적이라고 가정
항목이 화면 / 인쇄되는 시간을 찾으려면 가장 긴 치수 (길이 또는 높이 또는 레이블이 가로 인 경우 길이) / 스케일 * 100 (M에서 CM으로 이동)을 사용할 수 있습니다.
그런 다음 라벨이 맞는지 확인할 수 있습니다.
식 엔진에서 모든 작업을 수행 할 수 있지만 사용자 지정 파이썬식이 더 효율적입니다. 다음 은 튜토리얼을 만드는 방법에 대한 튜토리얼입니다.
내 맞춤 표현 :
from qgis.core import *
from qgis.gui import *
@qgsfunction(args='auto', group='Custom')
def labelFits(labelStr, fontPt, scaleM, feature, parent):
# returns true if a label will fit in the feature at a given
# font size and scale
bbox = feature.geometry().boundingBox()
# for CRS in us foot
# fontWidth = fontPt * 0.0875
# for CRS in metric
# 1pt = 0.035CM
fontWidth = fontPt * 0.035 * 0.5
# length of maximum dimension on-screen/print in CM
labelRoom = max(bbox.width(),bbox.height()) / scaleM * 100
# approx length of our label in CM based on font height * 0.5
labelLen = len(labelStr) * fontWidth
if labelRoom > labelLen:
return True
else:
return False
그런 다음 레이블에서 해당 표현식을 사용하십시오.
if(labelFits( "yourAttribute" , 8 , @map_scale ), "yourAttribute",$id)
물론 실제로 사용하는 속성을 연결하고 글꼴 크기를 8에서 사용중인 것으로 변경해야합니다. 또한, 폰트는 상당히 다양하기 때문에 제대로 보일 때까지 조금씩 조정해야 할 수도 있습니다.
해당 표현식을 사용하여 레이블이 맞는지 여부에 따라 색상을 변경하는 등의 작업을 수행 할 수도 있습니다.
이 표현을지도 캔버스 외부에서 (즉, 작곡가 레이블 또는 속성 테이블에서) 사용하려면 프로그래밍 방식으로 지정된지도 항목의 배율을 가져 오는 방법이 필요합니다. 여기 에 또 다른 대답으로 달성 할 수있는 코드를 게시했습니다.
이 메소드는 getScale ( 'composername', 'mapname') 식을 제공하여 식에 통합합니다.
if(
labelFits( "yourAttribute" , 8 , getScale('composername','mapname')),
"yourAttribute",$id)