图示数据

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

本节的任务是用颜色图示各省市的人均GDP,人均GDP越高,颜色越深:

示例一

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

Dim
minValue As Double = DataTables("").Compute("Min(人均GDP)")
Dim
maxValue As Double = DataTables("").Compute("Max(人均GDP)")
Dim
minColor As Color = Color.FromArgb(230, 247, 255) ' 浅蓝
Dim
maxColor As Color = Color.FromArgb(74, 0, 114) '深紫
For
Each dr As DataRow In DataTables("行政区 域").Select("level= 1") '绘制省级行政区
   
Dim polygon As VectorPolygon = map.CreatePolygon(dr("geometry"))
    layer.Items.Add(Polygon)
   
Dim sr As DataRow = DataTables("").Find("省代码 = '" & dr("adcode") & "'")
   
If sr IsNot Nothing Then
       
Dim value As Double = sr("人均GDP")
       
Dim radio As Double
        radio = (value - minValue) / (maxValue - minValue)
       
Dim red As Byte = minColor.R + (CInt(maxColor.R) - CInt(minColor.R)) * radio
       
Dim green As Byte = minColor.G + CInt((maxColor.G) - CInt(minColor.G)) * radio
       
Dim blue As Byte = minColor.B + (CInt(maxColor.B) - CInt(minColor.B)) * radio
        polygon.Style.BackColor = Color.FromArgb(red, green, blue)
        polygon.Tag = sr(
"") & ":" & sr("人均GDP")
   
End If
Next

示例二

如果希望用颜色深浅表示市级行政区域的人均GDP(参考示例十四),可以将代码改为:

Dim map As GeoMap = e.Form.Controls("Map1").GeoMap
Dim
layer As New VectorLayer()
map.Layers.Add(layer)
layer.Style.Stroke.Color = Color.Gray

Dim
minValue As Double = DataTables("").Compute("Min(人均GDP)")
Dim
maxValue As Double = DataTables("").Compute("Max(人均GDP)")
Dim
minColor As Color = Color.FromArgb(230, 247, 255) ' 浅蓝
Dim
maxColor As Color = Color.FromArgb(74, 0, 114) '深紫
For
Each dr As DataRow In DataTables("行政区域").Select("level= 2") '绘制市级行政区
   
Dim polygon As VectorPolygon = map.CreatePolygon(dr("geometry"))
    layer.Items.Add(Polygon)
   
Dim sr As DataRow = DataTables("").Find("市代码 = '" & dr("adcode") & "'")
   
If sr IsNot Nothing Then
       
Dim value As Double = sr("人均GDP")
       
Dim radio As Double
        radio = (value - minValue) / (maxValue - minValue)
       
Dim red As Byte = minColor.R + (CInt(maxColor.R) - CInt(minColor.R)) * radio
       
Dim green As Byte = minColor.G + CInt((maxColor.G) - CInt(minColor.G)) * radio
       
Dim blue As Byte = minColor.B + (CInt(maxColor.B) - CInt(minColor.B)) * radio
        polygon.Style.BackColor = Color.FromArgb(red, green, blue)
        polygon.Tag = dr(
"name") & ":" & sr("人均GDP")
   
Else
        polygon.Tag = dr(
"name")
   
End If
Next

绘制的地图如下 ,出现一些白色区域是因为GDP数据不全:


 


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