使用图片标记
本节内容可以参考CaseStudy目录下的文件"地图.Table"的示例二十七。
标记除了内置的几种形状,还可以使用图片作为标记。
本节的任务是在地图上用图片标记出某企业的办公室、工厂和仓库所在地:

示例
1、将Map控件的"地图来源"属性设置为"None"
2、将窗口的AfterLoad事件代码设置为:
Dim
map
As
GeoMap = e.Form.Controls("Map1").GeoMap
'增加图层
Dim
layer
As
New
VectorLayer()
map.Layers.Add(layer)
layer.Style.Stroke.Color = Color.Gray
layer.LabelVisibility = LabelVisibility.AutoHide
layer.LabelStyle.ForeColor = Color.BlueViolet
'增加图例
Dim
legend
As
New
MapLegend
map.Legends.Add(legend)
legend.Alignment = ContentAlignment.MiddleRight
legend.Layout = MapLegendLayout.Column
legend.Margin =
New
Padding(10)
map.Viewport.Margin =
New
Padding(0, 0, 100, 0)
'地图右侧留空100个像素用于显示图例
'绘制省级行政区域
For
Each
dr
As
DataRow
In
DataTables("行政区域").Select("level=
1")
layer.Items.Add(map.CreatePolygon(dr("geometry"),
5))
Next
'城市数组集合,三个数组分别表示办公室、工厂和仓库所在城市
Dim
cities
As
New
List(Of
String())
From
{
New
String()
{"北京",
"沈阳",
"西安",
"广州",
"上海"},
New
String()
{"深圳",
"绵阳",
"太原",
"湛江",
"徐州",
"武汉",
"重庆"},
New
String()
{"海口",
"株洲",
"昆明",
"银川",
"烟台",
"哈尔滨",
"喀什",
"无锡",
"酒泉",
"大连"}}
Dim
groupNames()
As
String
= {"办公室",
"工厂",
"仓库"}
'分组名称
Dim
imagesFiles()
As
String
= {"office.png",
"factory.png",
"store.png"}
'定义办公室、工厂和仓库使用的图片
For
idx
As
Integer
= 0
To
cities.Count - 1
'分组绘制城市
Dim
CustomShape
As
MarkImageShape = map.CreateImageShape(imagesFiles(idx))
'定义一个使用指定图片的形状
For
Each
city
As
String
In
cities(idx)
Dim
dr
As
DataRow = DataTables("行政区域").Find("name
= '"
& city &
"'")
If
dr
IsNot
Nothing
Then
Dim
mark
As
New
VectorPlacemark
mark.Geometry =
New
GeoPoint(CDbl(dr("centerX")),
CDbl(dr("centerY")))
mark.Marker.Size =
New
Size(30, 30)
mark.Marker.Shape = MarkerShape.Custom
'指明标记使用自定义形状
mark.Marker.CustomShape = CustomShape
'指定标记使用的形状
mark.Marker.Caption = city
mark.Marker.LabelPosition = LabelPosition.Right
layer.Items.Add(mark)
End
If
Next
'增加图例项目
Dim
item
As
New
MapLegendItem
item.Label = groupNames(idx)
item.Size =
New
Size(50, 50)
item.Kind = C1.FlexMap.MapLegendItemKind.Marker
item.Style.Alignment = ContentAlignment.MiddleLeft
item.Style.ForeColor = Color.BlueViolet
item.Shape = MarkerShape.Custom
item.CustomShape = CustomShape
legend.Items.Add(item)
Next