تسمية بسيطة

التسمية البسيطة

تحدد التسمية البسيطة كيفية تسمية الميزات.

الخيارات المدعومة هي:

خاصية الوصف
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 يحدد أولوية التسمية في حالة تداخلها مع تسمية أخرى.
لا يتم عرض التسمية ذات الأولوية المنخفضة.

أمثلة

أمثلة تسمية النقاط

بشكل افتراضي، ترسم التسمية البسيطة النص فوق النقاط:

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

من أجل التحكم في موضع النص بالنسبة لميزة النقطة، يجب تعيين خاصية الموضع:

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

أمثلة تسمية الخطوط

بشكل افتراضي، ترسم التسمية البسيطة تسمية بالقرب من مركز الخط:

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