간단한 레이블링

간단한 레이블링

간단한 레이블링은 피처를 어떻게 레이블해야 하는지를 지정합니다.

지원되는 옵션은 다음과 같습니다.

속성 설명
LabelAttribute 레이블의 소스로 사용할 속성 이름을 지정합니다.
LabelExpression 레이블 텍스트를 사용자 정의하고 형식을 지정하는 방법을 제공합니다. LabelAttribute를 재정의합니다.
FontFamily 텍스트를 렌더링하는 데 사용할 글꼴 패밀리를 지정합니다. 기본값은 시스템에 따라 다릅니다.
FontStyle

텍스트에 적용할 스타일입니다.

- FontStyle.Regular - 일반 텍스트.

- FontStyle.Bold - 굵은 텍스트.

- FontStyle.Italic - 기울임꼴 텍스트.

- FontStyle.Underine - 밑줄이 그어진 텍스트.

- FontStyle.StrikeOut - 가운데에 줄이 있는 텍스트입니다.

FontSize 텍스트 크기를 지정합니다.
FontColor 텍스트의 색상을 결정합니다.
HaloSize 텍스트 주위의 후광(또는 윤곽선) 크기를 결정합니다.
HaloColor 텍스트 주변의 후광 색상을 결정합니다.
GeometryExpression 레이블링 엔진에 전달하기 전에 지오메트리를 변환하는 데 사용할 지오메트리 표현식입니다.
MultipartMode

다중 파트 지오메트리에 대한 렌더링 동작을 지정합니다.

- MultipartMode.All - 지오메트리의 모든 부분 근처에 레이블을 배치합니다.

- MultipartMode.Any - 지오메트리의 임의의 부분 근처에 하나의 레이블을 배치합니다.

- MultipartMode.Largest - 지오메트리에서 가장 큰 부분 근처에 레이블을 배치합니다.

Placement

지오메트에 상대적으로 레이블이 배치되는 방법을 지정합니다.

- PointLabelPlacement - 지오메트리 중앙 근처에 레이블을 배치합니다.

- LineLabelPlacement - 지오메트리 또는 둘레를 따라 레이블을 배치합니다.

Priority 다른 레이블과 겹치는 경우 레이블의 우선 순위를 지정합니다.
우선 순위가 낮은 레이블은 렌더링되지 않습니다. 기본값은 1000입니다.

예제

점 레이블링 예제

기본적으로 SimpleLabeling은 점 위에 텍스트를 그립니다.

todo:image_alt_text
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET
using (var map = new Map(500, 200))
{
var symbol = new SimpleMarker
{
FillColor = Color.LightGray,
StrokeStyle = StrokeStyle.None
};
var labeling = new SimpleLabeling(labelAttribute: "name");
map.Add(VectorLayer.Open(dataDir + "points.geojson", Drivers.GeoJson), symbol, labeling);
map.Padding = 50;
map.Render(dataDir + "points_labeling_out.svg", Renderers.Svg);
}

글꼴 스타일을 지정하는 방법은 다음과 같습니다.

todo:image_alt_text
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET
using (var map = new Map(500, 200))
{
var symbol = new SimpleMarker
{
FillColor = Color.LightGray,
StrokeStyle = StrokeStyle.None
};
var labeling = new SimpleLabeling(labelAttribute: "name")
{
HaloSize = 2,
HaloColor = Color.LightGray,
FontSize = 15,
FontStyle = FontStyle.Italic,
};
map.Add(VectorLayer.Open(dataDir + "points.geojson", Drivers.GeoJson), symbol, labeling);
map.Padding = 50;
map.Render(dataDir + "points_labeling_styled_out.svg", Renderers.Svg);
}

점 피처에 상대적인 텍스트 위치를 제어하려면 placement 속성을 설정해야 합니다.

todo:image_alt_text
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET
using (var map = new Map(500, 200))
{
var symbol = new SimpleMarker
{
FillColor = Color.LightGray,
StrokeStyle = StrokeStyle.None
};
var labeling = new SimpleLabeling(labelAttribute: "name")
{
HaloSize = 1,
Placement = new PointLabelPlacement
{
VerticalAnchorPoint = VerticalAnchor.Bottom,
HorizontalAnchorPoint = HorizontalAnchor.Left,
HorizontalOffset = 2,
VerticalOffset = 2,
Rotation = 10,
}
};
map.Add(VectorLayer.Open(dataDir + "points.geojson", Drivers.GeoJson), symbol, labeling);
map.Padding = 50;
map.Render(dataDir + "points_labeling_placed_out.svg", Renderers.Svg);
}

더 고급 시나리오의 경우 피처에 대해 다른 레이블링을 선택할 수 있습니다. 방법은 다음과 같습니다.

todo:image_alt_text
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET
using (var map = new Map(500, 200))
{
var symbolizer = new SimpleMarker {FillColor = Color.LightGray, StrokeStyle = StrokeStyle.None};
var labeling = new RuleBasedLabeling();
// Set labeling to be used for small cities.
labeling.Add(f => f.GetValue<int>("population") <= 2500, new SimpleLabeling("name")
{
FontStyle = FontStyle.Italic,
HaloSize = 1,
FontSize = 10,
FontColor = Color.Green,
Priority = 1,
Placement = new PointLabelPlacement
{
VerticalAnchorPoint = VerticalAnchor.Bottom,
HorizontalAnchorPoint = HorizontalAnchor.Center,
}
});
// Set labeling to be used for all other cities.
labeling.AddElseRule(new SimpleLabeling("name")
{
HaloSize = 1,
FontSize = 15,
FontColor = Color.Red,
Priority = 2,
Placement = new PointLabelPlacement
{
VerticalAnchorPoint = VerticalAnchor.Bottom,
HorizontalAnchorPoint = HorizontalAnchor.Center,
}
});
map.Add(VectorLayer.Open(dataDir + "points.geojson", Drivers.GeoJson), symbolizer, labeling);
map.Padding = 40;
map.Render(dataDir + "rule_based_labeling_out.svg", Renderers.Svg);
}

선 레이블링 예제

기본적으로 SimpleLabeling은 선 중앙 근처에 레이블을 그립니다.

todo:image_alt_text
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET
using (var map = new Map(1000, 634))
{
var symbolizer = new SimpleLine { Width = 1.5, Color = Color.FromArgb(0xAE, 0xD9, 0xFD) };
var labeling = new SimpleLabeling(labelAttribute: "name");
map.Add(VectorLayer.Open(dataDir + "lines.geojson", Drivers.GeoJson), symbolizer, labeling);
map.Padding = 50;
map.Render(dataDir + "lines_labeling_out.svg", Renderers.Svg);
}

레이블을 선과 평행하게 회전하려면 LineLabelAlignment.Parallel이 있는 LineLabelPlacement를 사용할 수 있습니다.

todo:image_alt_text
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET
using (var map = new Map(1000, 634))
{
var symbolizer = new SimpleLine { Width = 1.5, Color = Color.FromArgb(0xAE, 0xD9, 0xFD) };
var labeling = new SimpleLabeling(labelAttribute: "name")
{
HaloSize = 1,
Placement = new LineLabelPlacement
{
Alignment = LineLabelAlignment.Parallel,
}
};
map.Add(VectorLayer.Open(dataDir + "lines.geojson", Drivers.GeoJson), symbolizer, labeling);
map.Padding = 50;
map.Render(dataDir + "lines_labeling_parallel_out.svg", Renderers.Svg);
}

텍스트가 선을 정확하게 따라야 하는 경우 LineLabelAlignment.Curved가 있는 LineLabelPlacement를 사용할 수 있습니다.

todo:image_alt_text
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET
using (var map = new Map(1000, 634))
{
var symbolizer = new SimpleLine { Width = 1.5, Color = Color.FromArgb(0xAE, 0xD9, 0xFD) };
var labeling = new SimpleLabeling(labelAttribute: "name")
{
HaloSize = 1,
Placement = new LineLabelPlacement
{
Alignment = LineLabelAlignment.Curved,
}
};
map.Add(VectorLayer.Open(dataDir + "lines.geojson", Drivers.GeoJson), symbolizer, labeling);
map.Padding = 50;
map.Render(dataDir + "lines_labeling_curved_out.svg", Renderers.Svg);
}

텍스트가 선과 겹치지 않도록 하려면 LineLabelPlacement.Offset을 사용하십시오.

todo:image_alt_text
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET
using (var map = new Map(1000, 634))
{
var symbolizer = new SimpleLine { Width = 1.5, Color = Color.FromArgb(0xAE, 0xD9, 0xFD) };
var labeling = new SimpleLabeling(labelAttribute: "name")
{
HaloSize = 1,
Placement = new LineLabelPlacement
{
Alignment = LineLabelAlignment.Curved,
Offset = 5,
}
};
map.Add(VectorLayer.Open(dataDir + "lines.geojson", Drivers.GeoJson), symbolizer, labeling);
map.Padding = 50;
map.Render(dataDir + "lines_labeling_curved_offset_out.svg", Renderers.Svg);
}

더 고급 시나리오의 경우 피처 속성 값에 따라 레이블 스타일을 동적으로 조정할 수 있습니다. 방법은 다음과 같습니다.

todo:image_alt_text
// For complete examples and data files, please go to https://github.com/aspose-gis/Aspose.GIS-for-.NET
using (var map = new Map(1000, 634))
{
var lineSymbolizer = new SimpleLine { Width = 1.5, Color = Color.FromArgb(0xae, 0xd9, 0xfd) };
lineSymbolizer.FeatureBasedConfiguration = (feature, symbolizer) =>
{
if (feature.GetValue<string>("NAM") == "UNK")
{
symbolizer.Width = 1;
symbolizer.Style = StrokeStyle.Dash;
}
};
var lineLabeling = new SimpleLabeling(labelAttribute: "name")
{
HaloSize = 1,
Placement = new LineLabelPlacement
{
Alignment = LineLabelAlignment.Parallel,
},
FontSize = 20,
FeatureBasedConfiguration = (feature, labeling) =>
{
if (feature.GetValue<string>("NAM") == "UNK")
{
// change labeling properties for some features.
labeling.FontStyle = FontStyle.Italic;
labeling.FontSize = 10;
labeling.Priority = -1;
var placement = (LineLabelPlacement) labeling.Placement;
placement.Alignment = LineLabelAlignment.Curved;
placement.Offset = 5;
}
}
};
map.Add(VectorLayer.Open(dataDir + "lines.geojson", Drivers.GeoJson), lineSymbolizer, lineLabeling);
map.Padding = 50;
map.Render(dataDir + "lines_labeling_feature_based_out.svg", Renderers.Svg);
}