SumperMap基本编程

来源:互联网 发布:淘宝卖家常遇到的问题 编辑:程序博客网 时间:2024/04/30 15:55

SuperMap Object 基本编程,在转载的基础上,进行个人整理。

一. 工作空间

1.打开工作空间

SuperWorkSpace.open(); ,有文件和数据库的区别

说明:打开工作空间时,会自动打开对应的数据源;但如果对应的数据源,因数据库服务器信息调整等原

因,没有自动打开时并不强制报错,可以检查是否正确,并用程序调整数据源的连接信息等,以后会重新

自动打开。

2.工作空间的保存

SuperWorkSpace.save();


3.工作空间的保存


SuperWorkSpace.saveAs(); ,有文件和数据库的区别

 

说明:保存工作空间时,会自动保存对应的数据源;数据库型时,工作空间数据库,可以是空库,SM会自

动建立SmWorkspace数据表,每个工作空间对应一条记录。


二. 数据源

1.

创建数据源

SuperWorkSpace.createDataSource() 有文件和数据库的区别

2. 打开数据源

SuperWorkSpace.openDataSource(),文件型

SuperWorkSpace.openDataSourceEx()数据库型

说明:

1)如果已经打开过工作空间,且还没有关闭,打开新的数据源时,该数据源会被附加到这个工作空间里。

2)无率是文件型,还是数据库型的工作空间,可以存在多个数据源,且允许是文件型或数据库型数据源。

3. 获得数据源

SuperWorkSpace.DataSource.item()

4. 关闭数据源,只是从工作空间中移出,并不真正删除。

SuperWorkSpace.DataSource.Remove()

SuperWorkSpace.DataSource.RemoveAll()


三. 数据集

1. 创建数据集

soDataSource.createDataset();

说明,每个数据集对应一个数据表,表名同数据集的名称。

2. 获得数据集

soDataSource.Datasets.Item();

SuperWorkspace.DataSources.Item(i).Datasets.Item(i)

SuperMap.Layers.Item(i).Dataset

SuperMap.Selection.item(i).Dataset

3. 删除数据集

SoDatasource.DeleteDataset()

4.显示数据集

soLayers.addDataset()

soLayers.Refresh()

5.与soDatasetVector 对象的关系,可以简单互相转换

soDatasetVector objDtv = (soDatasetVector)objDataset; 反向转换同理

5、从数据集加入到图层时,样式处理问题

1)点 击SuperWkspManager节点事件,应该写的是点击数据集的情况下,将数据集添加到地图窗口吧,数

据集肯定是不能展示风格,如果你希望每次打开 数据集时都有原来的风格,建议将之前的风格保存为XML

(TOXML),下次点击时调用XML(FROMXML)。

2)每个图层都可导入风格XML文件,地图是不需要设置的,因为地图中的图层保存了风格信息,但数据集

是不保存风格的。

3)读写都是XML字符串的方式,字符串的保存,以及与数据集的对应关系,需要自己处理;如数据库型时

要加表和字段,文件型时自己处理对应的文件和内容。

4)个人总结,尽量用CAD型保存数据,这样风格等的处理不麻烦;但调整样式时,需要按对象循环修改;

生成等值线等时,要先建立临时图层,将对象复制到允许的点或线图层。


四.基本操作

1. SuperMap.Action seAction 常量

SuperMap.Action=seAction.scaZoomIn地图放大

SuperMap.Action = seAction.scaZoomOut;地图缩小

SuperMap.Action = seAction.scaZoomOut;地图自由缩放

SuperMap.Action = seAction.scaPan;地图漫游

SuperMap.ViewEntire() 全幅显示地图

2. 编辑操作


SuperMap.Action = seAction.scaSelect;点击选择对象

SuperMap.Action = seAction.scaNull;取消工具选择


SuperMap.Action=scaEditCreatePoint

SuperMap.Action= scaEditCreatePolyline

SuperMap.Action= scaEditCreatePolygon


seAction中有手工画点、线、各种面、各种线、文字等功能,详细看帮助。


3. 跟踪层编辑

SuperMap.Action= scaTrackPoint

SuperMap.Action= scaTrackPolyline

SuperMap.Action= scaTrackPolygon

 

五. 图层管理

可以通过SuperLegend控件实现可视化的管理。更新后SuperMap.Refresh()

也可以通过图层的soLayer.Editable ,soLayer.Selectable,soLayer.Snapable,soLayer.Visible 来

进行设置。

1. 点线面等简单类型图层的风格设置: 只能按图层设置统一的风格,且必须保存地图,用时要打开地图

supermap.layers(i).style

supermap.showstylePicker(soStyle, Dimension)

说明,CAD等复杂类型的图层,风格必须按对象设置,不用保存地图。

2. 文本层的图层风格:

SuperMap.ShowTextStylePicker()

3. 地图的操作:


SuperMap.SaveMapAs() 另存地图,首次建立一个地图文件时用此,要指定虚拟的文件名。


SuperMap.SaveMap() 保存当前地图

SuperMap.OpenMap() 打开指定的地图

注意,

1)简单图层的样式、地图的背景、图层的选择、专题图等信息是保存的地图文件中的。

2)保存工作空间时,必须保存地图;打开工作空间时,必须打开地图;否则以上信息会丢失,或不显示。

3)地图文件是保存在工作空间中的,不是真正的单独存储。

4)一个工作空间允许保存多个地图文件,这样相对灵活。

4. 按指定的比例尺显示:soLayer.VisibleScaleMax, soLayer.VisibleScaleMin


按对象大小进行过滤显示,象素显示,filterk可以进行筛选显示。

5.说明,图层名称 = 数据集名称 + "@" + 数据源别名

 

六. 记录集 soRecordSet

1. 获得记录集

soDatasetVector.Query(sql,true) sql为查询语句,相当于where条件,但通配符与标准SQL不同,要查

帮助。

soRecordset soDatasetVector.Query(strSQLFilter,bHasGeometry,[objFields], [strOptions])

bHasGeometry一般不用,直接写false;Fields为指定要获取的字段,否则为全部字段;strOptions为排

序或分组等,与SQL 语句同。

soDatasetVector.QueryEx(sql,true)

soDatasetVector.QueryByDistance(sql,true)

soSelection.toRecordset()

2. 添加记录:

soRecordset.addNew()

纯属性表的添加 soRecordSet.AddNew(nothing)

3. 几何对象的添加:soGeometry

RecordSet.getGeomotry()

Recordset.setGeometry()

从事件获得:Geometry_Selected()

SuperMap.AfterGeometryAdded()

4. 选择集与记录集

selection.toRecordset() 根据地图选择的对象,生成记录集,以便程序修改或调整风格等。

selection.FromRecordset() 根据记录集,自动选择地图上的对象,避免用户一个个的手工选择。

5. 不选中到选中

soSelection.Remove

soSelection.RemoveAll

6. 通过地图查询属性的过程

选取对象()->得到记录集->取值显示

selection.toRecordset()->soRecordset.GetFieldValue

7. 通过属性查询地图的过程

查询条件的设置->获得查询记录集->添加到选择集

layer.Dataset->soDatasetVector->soDatasetVector.Query(sql,true) -> selection.FromRecordset()


七. 跟踪层

跟踪层是所有图层的最上面一层,有Layer才有TrackingLayer

跟踪层临时放在内存中,关掉Layer,则TrackingLayer随之消失

跟踪层速度比较快,可以动态更新空间对象

1. 添加对象到跟踪层

soTrackingLayer.AddEvent(objGeometry ,objStyle,string)

分别设置Geometry,风格和标签

2. 获得跟踪层上面的对象

soTrackingLayer. Event

3. 删除跟踪层上面的对象

soTrackingLayer.ClearEvents()

4. 移动跟踪层上面的对象

soGeoevent.move()

soGeoevent.moveTo()

5. 几何对象和文本对象的风格之不同

1)几何对象的风格对应为soStyle,适用于点、线、面等对象。

2)文本对象对应的风格是soTextStyle,适用于普通文本对象、专题图的文本对象。


八.布局对象SuperLayout

1. 布局窗口中选中的对象SuperLayout.Selection

2. 布局窗口中的元素SuperLayout.Elements

3. 布局窗口的鼠标事件SuperLayout.LytAction

4. SuperLayout 中的地图对象,soLytMap

5. SoLytMap.MapHold 锁定地图可以用soLytMap.MapAction进行放大缩小


九. 地图控件的关联

–SuperLegend1.connect SuperMap1.handle

–SuperMap1.connect SuperWorkspace1.handle

–SuperLayout1.connect Superworkspace1.handle

–SuperWkspManager1.connect Superworkspace1.handle

–SuperGridView1.connect objRecordset


十. 地图控件的释放顺序

–SuperLegend1.disconnect

–SuperMap1.close

–SuperMap1.disconnect

–SuperLayout1.disconnect

–SuperWkspManager1.disconnect

–SuperWorkspace1.close


十一.应用举例

1、工作空间另存时,数据源仍是原始工作空间的数据源,原理和解决办法

1)如文件型的工作空间和数据源,另存为数据库型工作空间时,对应的数据源仍是本地文件,这样无法达

到共享的目的;反之,数据库型另存为本地文件时,数据源为SQL的,也无法达到备份或个人调整的目的

2)解决方法,打开另存的工作空间,增加数据库型的新数据源,在旧的数据源中按记录集(Dataset)循环

,用.CopyDataset将数据复制到新的数据源中,再从工作空间中移除旧的数据源,保存工作空间即可。


2、地图的背景控制

1)用户临时指定

       soStyle objStyle;
            objStyle = axSuperMap.BackStyle;

            /*
                语法soStyle SuperMap.BackStyle
                说明,返回/设置 SuperMap 控件的背景风格(soStyle)。
                备注,该属性主要用于设置 SuperMap 控件的背景风格,系统默认背景颜色为白色。
            */

            soResources objRss;
            soFillStyleLib objFlLib;
            objRss = axSuperWorkspace.Resources;
            objFlLib = objRss.FillStyleLib;
            objFlLib.ShowPicker(objStyle);

            //保存工作空间时必须保存地图信息,否则界面的背景不会保存;打开时也必须打开对应的

地图,否则背景不显示。
            axSuperMap.Refresh();

            Marshal.ReleaseComObject(objStyle);
            objStyle = null;
            Marshal.ReleaseComObject(objFlLib);
            objFlLib = null;
            Marshal.ReleaseComObject(objRss);
            objRss = null;


2)系统预先定义背景的方法,如直接定义背景色为X色,VB写的,不翻译了

Dim oStyle As soStyle

oStyle.BrushColor=vbRed
      Set oStyle = SuperMap1.BackStyle

.......

既然SuperMap1.BackStyle返回的是sostyle对象,那直接设置这个soStyle对象中相关的属性,再把它穿

回给SuperMap的背景色就可以

3、利用鼠标中轴进行地图的放大和缩小控制

        private void axSuperMap_MouseWheelEvent(object sender,

AxSuperMapLib._DSuperMapEvents_MouseWheelEvent e)
        {
            //用鼠标中键进行地图的放大和缩小,操作步骤:
            //1、鼠标左键或右键点击一下地图控件的位置,2、前后移动鼠标中轮看变化。
            if (e.zDelta > 0)
            {
                //SuperMap.Zoom(dZoomRatio As Double),根据指定的比率缩放地图。
                this.axSuperMap.Zoom(1.5);
            }
            if (e.zDelta < 0)
            {
                this.axSuperMap.Zoom(1 / 1.5);
            }
            this.axSuperMap.Refresh();
        }

4、列表显示问题

建议,特殊情况下,将记录集数据一条条加入到微软的记录集中,并用微软的列表显示,这样排序、分页

尤其是数据的格式化问题,处理起来要容易许多。

原创粉丝点击