برچسب‌گذاری ساده

برچسب‌گذاری ساده

برچسب‌گذاری ساده مشخص می‌کند که چگونه ویژگی‌ها باید برچسب‌گذاری شوند.

گزینه‌های پشتیبانی شده عبارتند از:

ویژگی توضیحات
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);
}

برای چرخاندن برچسب‌ها به طوری که موازی با خطوط باشند، می‌توان از LineLabelPlacement با LineLabelAlignment.Parallel استفاده کرد:

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);
}

اگر می‌خواهید متن‌ها دقیقاً خط را دنبال کنند، می‌توانید از LineLabelPlacement با LineLabelAlignment.Curved استفاده کنید:

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);
}