C#MapX添加图元
- 格式:doc
- 大小:100.00 KB
- 文档页数:16
vb+mapx,属性到图元的查询如何实现 (1)
MapX中新建图层图元KeyValue值无法输入中文的解决方法 (5)
C#+MAPX 添加线、文本、符号等图元 (6)
VB+MapX编程实现地图数据查询 (9)
Mapx中创建测距工具、自动滚屏、图元的拖拽 (11)
MAPX增加一个图层,在上面再加个图元 (14)
C#MapX添加图元 (15)
如何通过图元的属性ID号在图层中查找并定位图元?
如果已知图元的属性ID编号,如何在图层中查找到其对应的图元,并定位到该图元,以及让该图元闪烁等操作.
解决方法:
首先需要了解GeoBeans在GBD数据文件中,对数据如何进行的组织.在图形系统中,可用通过信息栏查看并修改图元对应的ID编号,但这个ID编号是图元的"属性ID编号",它对用户是开放的,可以浏览并修改它,而且多个图元可以同时拥有一个相同的属性ID编号,这样可以把这些图元作为一个实体处理.但是在GBD内部,各个图元还有一个唯一的索引编号,这个编号是内部维护的,用户不能修改和改变它.当我们用下面这段代码遍历图层中的所有图元时,使用的就是这个内部索引号
var pMapManager = pMap.getManager();
var pLayer = pMapManager.getLayer( "layername" );
var count = pLayer.getCount();
for(i=0; i var pShape = pLayer.getShape(i); } 但是我们有时,不遍历图元,而只是想根据其 "属性ID" attributeId来查找图元,此时,我将使用另外一个函数接口 findShapesByAID 来获取图元,因为一个图层中允许多个图元使用相同的ID号,所以返回的不一定是一个图元( GShape对象 ),而是一组图元( GShapes对象 ), 实例代码: function locateById( layerName, shapeId ) { var pMap = document.getElementById( "GeobeansMap" ); var pLayer = pMap.getMapLayer( layerName ); if( pLayer == null ) { alert("layer " + layerName + " not existed."); return; } //返回一个图元集合对象GShapes var pShapes = pLayer.findShapesByAID( parseInt(shapeId) ); if( pShapes == null ) { alert("shape not existed"); return; } //假定只有一个图元返回,我们取第一个图元用于定位 var pShape = pShapes.shapeAt(0); //获取图元的中心x, y坐标 var x = pShape.getCenterX(); var y = pShape.getCenterY(); //利用中心点坐标定位图元 pMap.setMapCenter(x, y); //设置图元闪烁 pMap.setParameter("AutoCenter", "true"); pMap.setFlashCount(4); pMap.setFlashType(0); pMap.setSFlash( layerName, parseInt(shapeId) ); vb+mapx,属性到图元的查询如何实现 Private Sub Form_Load() ´方法一: ds.value(ftr,field)---连接远程数据库时不能读出其属性值´没有加入FeatureKey列´ Dim DsName As String ´ Dim ftrs As New Features ´ Dim lyr As yer ´ Dim ds As New Map XLib.Dataset ´ Dim i As Integer, j As Integer ´ Dim DsCols As Long, DsR ows As Long ´ ´ BrowserFlag = True ´ ´ DsName = Trim(Too bo2.Text) ´ If Trim(DsName) = "" Then ´ MsgBox "请选择数据集", , "打开浏览窗口" ´ Exit Sub ´ End If ´ ´ Set ds = Formmain. Map1.Datasets(DsName) ´ DsCols = ds.Fields.Count ´ DsRows = ds.RowC ount ´ ´ ´将数据集中的数据显示在表格中´ Grid1.Rows = DsRo ws + 1 ´ Grid1.Cols = DsCols ´ ´ Grid1.Row = 0 ´ For i = 0 To DsCols -1 ´ Grid1.Col = i ´ Grid1.Text = ds.Fields.Item(i + 1).name & acute; Next i ´ ´ yer.BeginAccess miAccessRead ´ For i = 1 T o DsRows ´ For j = 0 To DsCols - 2 ´ If Not IsNull(ds.Value(i, j + 1)) Th en Grid1.TextArray(i * DsCols + j) = ds.Value(i, j + 1) ´ Next j ´ Next i & acute; yer.EndAccess miAccessEnd ´ ´ ´ StatusBar1.Panels.Ite m(1).Text = "共有" + " " + Str(DsRows) + " " + "条记录" ´ ´ StatusBar1.To p = Me.ScaleHeight - StatusBar1.Height ´方法二:rowvalue Dim ds As MapXLib.Da taset, lyr As yer Dim ftrs As Features Dim ftr As Feature Dim rv As RowVal ue Dim rvs As RowValues Dim DsName As String Dim DsRows As Long, DsCols As L ong Dim i As Long, j As Long BrowserFlag = True DsName = Trim(bo2.T ext) If Trim(DsName) = "" Then MsgBox "请选择数据集", , "打开浏览窗口" Exit Sub End If Set ds = Formmain.Map1.Datasets.Item(DsName) Set lyr = yer Set ftrs = lyr.All Features DsCols = ds.Fields.Count DsCols = DsCols + 1 ´´多加一列存放Fe ature.FeatureKey,作为最后一列DsRows = ftrs.Count ´将数据集中的数据显示在表格中Grid1.Rows = DsRows + 1 Grid1.Cols = DsCols Grid1.ColWidth(Grid1.Cols - 1) = 1 ´FeatureKey列宽为1,不让用户看到Grid1.Row = 0 For i = 0 To DsCols - 2 &acut e;减去最后一列Grid1.Col = i Grid1.Text = ds.Fields.Item(i + 1).name Next i Grid1.Col =