绘制多个标记

本节内容可以参考CaseStudy目录下的文件"地图.Table"的示例二。

本节任务是在地图上标记出多个中国城市:

示例:

1、将Map控件的"地图来源"属性设置为"Custom"

2、将Map控件的GetMapTile事件代码设置为:

Dim style As Integer = 8 '地图类型,可选值为610,其中6为卫星图
Dim
size As Integer = 1
Dim
scale As Integer = 1
Dim
server As Integer = Rand.Next(1, 5) '随机使用14号服务器
Dim
scl As Integer = 2 '设置为2可以隐藏地图的文字标注,且分辨率更好
Dim
Language As String = "zh_cn" '中文地图,如果需要英文可设置为"en",我测试只有style8的时候才支持英文
Dim
url As String
If
style = 7 OrElse style = 8 Then
    url =
"https://webrd0{0}.is.autonavi.com/appmaptile?lang={1}&size={2}&scale={3}&style={4}&x={5}&y={6}&z={7}&scl={8}"
Else

    url =
"https://webst0{0}.is.autonavi.com/appmaptile?lang={1}&size={2}&scale={3}&style={4}&x={5}&y={6}&z={7}&scl={8}"
End
If
e.URI = CExp(url, server, Language, Size, scale, style, e.X, e.Y, e.Z, scl)

3、将窗口的AfterLoad事件代码设置为:

Dim map As GeoMap = e.Form.Controls("Map1").GeoMap
Dim
layer As New VectorLayer() '定义矢量层
layer.LabelVisibility = LabelVisibility.Visible
'标题可见
layer.Style.Stroke.Color = Color.Red
'形状线条为红色
layer.LabelStyle.ForeColor = Color.Green
'文字为绿色
map.Layers.Add(layer)
'将矢量层增加代map控件中
'
定义各城市的经纬度
Dim
cities As New Dictionary(Of String, GeoPoint)
cities.Add(
"北京", New GeoPoint(116.4053, 39.905))
cities.Add(
"上海", New GeoPoint(121.4726, 31.2317))
cities.Add(
"广州", New GeoPoint(113.2806, 23.1252))
cities.Add(
"成都", New GeoPoint(104.0657, 30.6595))
'
逐个绘制城市
For
Each city As String In cities.Keys
   
Dim mark As New VectorPlacemark() '增加一个标记
    mark.Marker.Caption = city
'指定标记的标题
    mark.Geometry = cities(city)
'设置标记位置为对应城市的经纬度
   
If city = "北京" Then '如果是北京
        mark.Marker.Size =
New SizeF(16, 16) '指定标记大小
        mark.Marker.Shape = MarkerShape.Star
'设置标记形状为五角星
   
Else
        mark.Marker.Size =
New SizeF(10, 10) '其他城市的标记要小一些
        mark.Marker.Shape = MarkerShape.Circle
'标记形状为圆形
   
End If
    mark.Marker.LabelPosition = LabelPosition.Right
'标题显示在标记右边
    mark.Style.BackColor = Color.Red
'标记的填充颜色为红色
    layer.Items.Add(mark)
'将标记添加到矢量层中
Next

一个标记可以包括多个点

通常一个标记(VectorPlacemark)对应一个点,如果需要的话,一个标记可以包括多个点。

例如上面的示例,如果将AfterLod事件代码改为:

Dim map As GeoMap = e.Form.Controls("Map1").GeoMap
Dim
layer As New VectorLayer() '定义矢量层
layer.LabelVisibility = LabelVisibility.Visible
'文字可见
layer.Style.Stroke.Color = Color.Red
'图形线条为红色
layer.LabelStyle.ForeColor = Color.Green
'文字为绿色
map.Layers.Add(layer)
'将矢量层增加代map控件中
'
定义各城市的经纬度
Dim
cities As New Dictionary(Of String, GeoPoint)
cities.Add(
"北京", New GeoPoint(116.4053, 39.905))
cities.Add(
"上海", New GeoPoint(121.4726, 31.2317))
cities.Add(
"广州", New GeoPoint(113.2806, 23.1252))
cities.Add(
"成都", New GeoPoint(104.0657, 30.6595))
'
一个标记可以包括多个位置点
Dim
mark As VectorPlacemark '定义一个标记
mark = map.CreatePlaceMark({cities(
"北京"), cities("上海"), cities("广州"), cities("成都")}) '指定多个位置点
mark.Marker.Size =
New SizeF(10, 10) '标记大小
mark.Marker.Shape = MarkerShape.Circle
'标记形状为圆形
mark.Style.BackColor = Color.Red
'标记的填充颜色为红色
layer.Items.Add(mark)
'将标记添加到矢量层中

生成的地图为:


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