使用图片标记

本节内容可以参考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


本页地址:http://www.foxtable.com/webhelp/topics/6161.htm