欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap 谈天说地
   您现在位于: 首页技术专栏SuperMap应用与开发SO开发 → 正文
自动制图
07-10-29 09:50:10 作者: 出处:超图

功能简介:

    从地图数据库中选出指定的数据(几何对象或者图斑),通过代码生成相应几何对象的布局(Layout),同时控制地图的高度、宽度等属性,也可以对布局进行放大、缩小、漫游等操作

数据来源:..\Data\World目录下的World.sdb和World.sdd两个文件

    所用SuperMap Objects 组件、对象的主要属性和方法:

控  件 及 对 象 属  性 方  法
SuperWorkspace Handle OpenDatasource
SuperMap    
SuperLayout LytAction CreateElement

功能实现:

  • 从数据库中读取地图数据的索引数据(例如国家名称等唯一标识名),添加到列表框中。

'向cbCountries中添加数据,cbCountries为VB标准Combo Box控件
Dim objDatasetVector As soDatasetVector '矢量数据集对象
Dim objRecordSet As soRecordset
'记录集对象
'获取地图窗口图层对应的矢量数据集
  If FrmMain.SuperMap1.Layers.Item(1).Dataset.Vector Then
    Set objDatasetVector = FrmMain.SuperMap1.Layers.Item(1).Dataset
  End If
'取出数据集中所有的记录,生成记录集对象
Set objRecordSet = objDatasetVector.Query("", False)
If objRecordSet Is Nothing Then Exit Sub
 
'取出记录集中的所有数据,添加到列表框
  objRecordSet.MoveFirst
For i = 1 To objRecordSet.RecordCount
   cbCountries.AddItem objRecordSet.GetFieldValue("Country")
   objRecordSet.MoveNext
Next i
'设置列表框的初始值
cbCountries.ListIndex = 0

 

  • 从列表框的选中的名称中生成相应的几何对象的布局

Dim objLytMap As soLytMap               '布局库地图对象
Dim objRect As New soRect              
'矩形对象
Dim objCountryRecord As soRecordset    
'记录集对象
Dim objGeoRegion As soGeoRegion        
'区域对象
Dim objGeoRect As soRect               
'矩形对象
Dim objlytText As soLytText            
'布局库文本对象
Dim objTextStyle As New soTextStyle    
'文本风格对象
Dim dScale As Double                   
'显示比例尺
Dim nUnit As Long                      
'数据源单位

'清空页面
SuperLayout1.Elements.RemoveAll

'检索所要显示的国家,国家的名称通过下拉列表框选择(cbCountries.Text)
'使用Query方法生成相应的记录集,本例为一个国家的地理数据

Set objCountryRecord = FrmMain.SuperMap1.Layers(1).Dataset.Query("Country = " & "'" & cbCountries.Text & "'", True)

If objCountryRecord Is Nothing Then
    MsgBox "找不到国家" & cbCountries.Text & "!"
    Exit Sub
End If

'通过记录集对象用GetGeometry方法生成与记录集对应的几何对象
Set objGeoRegion = objCountryRecord.GetGeometry()

'判断是否生成了对应的几何对象
If objGeoRegion Is Nothing Then
     Exit Sub
End If

'获得几何对象的外接矩形
Set objGeoRect = objGeoRegion.Bounds
If objGeoRect Is Nothing Then
     Exit Sub
End If

'得到距离单位,该距离单位用于以下代码计算地图显示比例
nUnit = SuperWorkspace1.Datasources.Item(1).DistanceUnits

'设置要显示国家的比例尺,矩形框的长度和宽度是无单位的,乘以单位(nUnit)
'即可得到实际的地理距离,乘以100是计算地图对象的大小占整个布局窗口的
'百分比

Dim dScale1 As Double
'显示比例尺
Dim dScale2 As Double
'显示比例尺

dScale1 = CLng(txtMapWidth.Text) * 100 / (objGeoRect.Width * nUnit)
dScale2 = CLng(txtMapHeight.Text) * 100 / (objGeoRect.Height * nUnit)

'取出比例小的一个作为地图窗口的比例
If dScale1 > dScale2 Then
      dScale = dScale2
Else
      dScale = dScale1
End If


'设置地图图幅的位置、大小
objRect.Top = 300
objRect.Bottom = objRect.Top + CLng(txtMapHeight.Text) * 100
objRect.Left = 300
objRect.Right = objRect.Left + CLng(txtMapWidth.Text) * 100

'使用SuperLayout库的soLytElements.CreateElement(nType As Long)
'方法生成地图和标题

Set objLytMap = FrmMain.SuperLayout1.Elements.CreateElement(sclytMap)
Set objlytText = FrmMain.SuperLayout1.Elements.CreateElement(sclytText)

'检验是否生成地图和标题对象
If objLytMap Is Nothing Or objlytText Is Nothing Then
     Exit Sub
End If

'设置地图的位置,地图名称,地图比例,地图标题的字体属性
objLytMap.SetPosition objRect
objLytMap.MapName = FrmMain.SuperWorkspace1.Maps.Item(1)
objLytMap.MapScale = dScale
objLytMap.CenterAt objGeoRect.CenterPoint.x, objGeoRect.CenterPoint.y
objlytText.Text = cbCountries.Text
objTextStyle.Bold = True
objTextStyle.FontHeight = 100
Set objlytText.Font = objTextStyle

'调整地图和标题的位置
SuperLayout1.Selection.Add objlytText
SuperLayout1.Selection.CenterHorizontal
SuperLayout1.Selection.Add objLytMap
SuperLayout1.Selection.CenterHorizontal
SuperLayout1.Selection.RemoveAll
SuperLayout1.Refresh

'释放内存
Set objLytMap = Nothing
Set objlytText = Nothing

效果如下图:


(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们 友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.

                   滇ICP备05006901号