C#MapX添加图元.docx
- 文档编号:8804618
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:17
- 大小:22.92KB
C#MapX添加图元.docx
《C#MapX添加图元.docx》由会员分享,可在线阅读,更多相关《C#MapX添加图元.docx(17页珍藏版)》请在冰豆网上搜索。
C#MapX添加图元
vb+mapx,属性到图元的查询如何实现1
MapX中新建图层图元KeyValue值无法输入中文的解决方法3
C#+MAPX添加线、文本、符号等图元4
VB+MapX编程实现地图数据查询7
Mapx中创建测距工具、自动滚屏、图元的拖拽9
MAPX增加一个图层,在上面再加个图元12
C#MapX添加图元13
如何通过图元的属性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,属性到图元的查询如何实现 PrivateSubForm_Load()´方法一: ds.value(ftr,field)---连接远程数据库时不能读出其属性值´没有加入FeatureKey列´DimDsNameAsString´DimftrsAsNewFeatures´DimlyrAsMapXLib.Layer´DimdsAsNewMapXLib.Dataset´DimiAsInteger,jAsInteger´DimDsColsAsLong,DsRowsAsLong´´BrowserFlag=True´´DsName=Trim(ToolBars.Combo2.Text)´IfTrim(DsName)=""Then´MsgBox"请选择数据集",,"打开浏览窗口"´ExitSub´EndIf´´Setds=Formmain.Map1.Datasets(DsName)´DsCols=ds.Fields.Count´DsRows=ds.RowCount´´´将数据集中的数据显示在表格中´Grid1.Rows=DsRows+1´Grid1.Cols=DsCols´´Grid1.Row=0´Fori=0ToDsCols-1´Grid1.Col=i´Grid1.Text=ds.Fields.Item(i+1).name´Nexti´´ds.Layer.BeginAccessmiAccessRead´Fori=1ToDsRows´Forj=0ToDsCols-2´IfNotIsNull(ds.Value(i,j+1))ThenGrid1.TextArray(i*DsCols+j)=ds.Value(i,j+1)´Nextj´Nexti´ds.Layer.EndAccessmiAccessEnd´´´StatusBar1.Panels.Item (1).Text="共有"+""+Str(DsRows)+""+"条记录"´´StatusBar1.Top=Me.ScaleHeight-StatusBar1.Height´方法二: rowvalueDimdsAsMapXLib.Dataset,lyrAsMapXLib.layerDimftrsAsFeaturesDimftrAsFeatureDimrvAsRowValueDimrvsAsRowValuesDimDsNameAsStringDimDsRowsAsLong,DsColsAsLongDimiAsLong,jAsLongBrowserFlag=TrueDsName=Trim(ToolBars.Combo2.Text)IfTrim(DsName)=""ThenMsgBox"请选择数据集",,"打开浏览窗口"ExitSubEndIfSetds=Formmain.Map1.Datasets.Item(DsName)Setlyr=ds.layerSetftrs=lyr.AllFeaturesDsCols=ds.Fields.CountDsCols=DsCols+1´´多加一列存放Feature.FeatureKey,作为最后一列DsRows=ftrs.Count´将数据集中的数据显示在表格中Grid1.Rows=DsRows+1Grid1.Cols=DsColsGrid1.ColWidth(Grid1.Cols-1)=1´FeatureKey列宽为1,不让用户看到Grid1.Row=0Fori=0ToDsCols-2´减去最后一列Grid1.Col=iGrid1.Text=ds.Fields.Item(i+1).nameNextiGrid1.Col=DsCols-1Grid1.Text="Fkey"´Fori=1Tods.Fields.Count´MsgBoxds.Fields.Item(i).name´MsgBoxds.Fields.Item(i).Type´Nextilyr.BeginAccessmiAccessRead´Fori=1ToDsRows´Forj=0ToDsCols-1i=1ForEachftrInftrs´SetFtr=ftrs.Item(i)´i=ftrs.count时出错Setrvs=ds.RowValues(ftr)´Setrv=rvs.Item(j+1)j=0ForEachrvInrvsIfNotIsNull(rv.Value)ThenGrid1.TextArray(i*DsCols+j)=Trim(rv.Value)j=j+1NextGrid1.TextArray(i*DsCols+j)=ftr.FeatureKey´MsgBoxftr.FeatureKeyi=i+1Next´Nextj´Nextilyr.EndAccessmiAccessEndStatusBar1.Panels.Item (1).Text="共有"+""+Str(DsRows)+""+"条记录"StatusBar1.Top=Me.ScaleHeight-StatusBar1.HeightSetftr=NothingSetftrs=NothingSetds=NothingSetrv=NothingSetrvs=NothingSetlyr=NothingEndSubPrivateSubForm_Resize()Grid1.Width=Me.ScaleWidthGrid1.Height=Me.ScaleHeight-StatusBar1.Height-Grid1.TopStatusBar1.Top=Me.ScaleHeight-StatusBar1.HeightStatusBar1.Width=Me.ScaleWidthEndSubPrivateSubForm_Terminate()BrowserFlag=FalseEndSubPrivateSubForm_Unload(CancelAsInteger)BrowserFlag=FalseEndSubPrivateSubGrid1_Click()DimSelectStrAsStringDimlyrAsMapXLib.layerDimftrAsMapXLib.Feature´OnErrorGoToerror1Grid1.Col=Grid1.Cols-1´FeatureKeySelectStr=Grid1.TextSetlyr=Formmain.Map1.Datasets.Item(ToolBars.Combo2.Text).layerlyr.Selection.SelectByIDSelectStr,miSelectionNewIflyr.Selection.Count>0ThenForEachftrInlyr.SelectionFormmain.Map1.CenterX=ftr.CenterXFormmain.Map1.CenterY=ftr.CenterYNextEndIf´显示选择条Grid1.RowSel=Grid1.RowGrid1.Col=0Grid1.ColSel=Grid1.Cols-1error1: SelectCaseErr.NumberCase1004: ´出错在Setftr=lyr.Selection.Item (1),提示: 没有找到索引的对象item´仅在连接odbc数据库时出错.打开一般表不出错.´避免错误: foreachftrinlyr.selectionOnErrorGoTo0EndSelectSetftr=NothingSetlyr=NothingEndSub MapX中新建图层图元KeyValue值无法输入中文的解决方法 今天在项目中遇到一个问题,客户要求自己建立图层并能够自己编辑图元,我使用的是LayerInfo建立的miLayerInfoTypeNewTable格式的图层,用fields给图层中加入了两个字段,一个是name,一个是value,但是在建立好了图层之后,添加了图元并给图元的Keyvalue值赋值时,却无法输入中文,一输入就报错,查了无数的论坛和网页,基本都说这是个MapX的一个Bug,没有说到解决办法,我对地图的现有图层上的已有中文名的图元进行编辑,却没有报错,问题到底是出在哪里呢? 我用写字板把我自己建立的图层tab文件和已经有中文图元的原有图层tab文件带开后发现我建立的name字段有索引,可是原有图层的第一个字段却没有(在MapX中是默认将第一个字段作为KeyValue),于是我修改了fields的声明方式,将索引去掉,ok,问题解决了。 爽啊,现在将代码贴出,希望能帮助遇到同样问题的朋友。 (Delphi7+MapX5) myflds: =cofields.Create; myFlds.AddStringField('NAME',100,EmptyParam); mylayerinfo: =colayerinfo.Create; mylayerinfo.type_: =miLayerInfoTypeNewTable; mylayerinfo.AddParameter('FileSpec',MapFilePath+'\'+LayerName+'.tab'); mylayerinfo.AddParameter('Name',LayerName); mylayerinfo.AddParameter('Fields',myflds); mylayerinfo.AddParameter('OverwriteFile',1); map1.Layers.Add(mylayerinfo,1); 这里最重要的就是myFlds.AddStringField('NAME',100,EmptyParam);这句中的EmptyParam这个属性,这样就可以将这个字段的索引设为false。 上面的解决方案虽然是可以解决这个问题,但是再细想想如果以后要再用数据绑定,那么没有索引的图层肯定会导致很多问题,所以最好的解决办法是再加一个字段,将这个字段的索引设为true,这样就可以解决了。 我也做过这样的查找,中文不能查找而且不能添加到图层中(用程序),你的表中一定有索引吧,根据索引查找来实现,这样可能存在个转换的问题,我也找不到很好的方法,我也学的时间不长,最后我采用了中间数据表,实现相互的转换,即1----“中三路”,2----“南京路”,等等,然后通过1,2来查找,方法很次,如果你有好的方法请告诉我,谢谢! C#+MAPX添加线、文本、符号等图元 写这篇文章的时候,本人也是刚刚接触mapx。 考虑到网上关于C#+Mapx放大、拖动、缩小地图的文章已经很多,在此不做赘述。 从我本人的角度考虑,任何一个接触mapx的人都会想着怎么在地图上添加新的图元,而这方面的东西网上却很少,也许是那些大牛认为这个不值得去说教,那我这个菜鸟来唠叨唠叨,大家不要拍砖啊! 1.添加线段 MapXLib.Layerlyr; MapXLib.CoordSyscoor=axMap1.DisplayCoordSys;//坐标 lyr=axMap1.Layers.CreateLayer("temp_start",Type.Missing,100,10,coor); axMap1.Layers.AnimationLayer=lyr;//新建一个临时图层 lyr.Editable=true; lyr.Visible=true; MapXLib.Pointstart=newMapXLib.PointClass();//新建起点 MapXLib.Pointend=newMapXLib.PointClass();//新建终点 start.Set(node1.X,node1.Y); end.Set(node2.X,node2.Y); MapxLib.FeatureLineObg; MapXLib.Pointspts=newMapXlib.PointClass(); MapXLib.FeatureLineObj; MapXLib.Pointspts=newMapXLib.PointsClass(); pts.Add(start,1); pts.Add(end,2); LineObj=axMap1.FeatureFactory.CreateLine(pts,axMap1.DefaultStyle); lyr.AddFeature(LineObj,Type.Missing); 2.添加文本 MapXLib.Layerlyr; lyr=axMap1.Layers.CreateLayer("temp_start",Type.Missing,100,10,coor); axMap1.Layers.AnimationLayer=lyr;//新建一个临时图层 lyr.Editable=true; lyr.Visible=true; MapXLib.Stylemystyle=newStyleClass();//文本格式 mystyle.TextFont.Bold=false; mystyle.TextFont.Size=0.1m; mystyle.TextFontColor=0x0000FF; MapXLib.FeatureTextObj; TextObj=axMap1.FeatureFactory.CreateText(middle,EdgeID.ToString(),Type.Missing,mystyle);//第一个参数为Point lyr.AddFeature(TextObj,Type.Missing); 3.添加符号 MapXLib.Layertempstar_lyr; MapXLib.CoordSyscoor=axMap1.DisplayCoordSys; tempstar_lyr=axMap1.Layers.CreateLayer("temp_start",Type.Missing,100,10,coor); tempstar_lyr.Editable=true; tempstar_lyr.Visible=true; tempstar_lyr.AutoLabel=true; tempstar_lyr.OverrideStyle=true; tempstar_lyr.Style.SymbolFontColor=0x0000FF; tempstar_lyr.Style.SymbolType=MapXLib.SymbolTypeConstants.miSymbolTypeVector;//选择符号样式 tempstar_lyr.Style.SymbolVectorSize=20; MapXLib.FeatureSymbolObj=newFeatureClass(); SymbolObj.Attach(axMap1.GetOcx()); SymbolObj.KeyValue="S"; SymbolObj.Point=pt; tempstar_lyr.AddFeature(SymbolObj,Type.Missing); 本文来自CSDN博客,转载请标明出处: VB+MapX编程实现地图数据查询 综述 应用MapX控件实现查询的功能并不太难。 MapX为我们提供了Find、FindFeature等对象,可以用来实现我们需要的功能。 1、本程序实现从下列表中选择一个节点,并以此节点为中心进行进行定位的功能(实例以第一层RTUName属性的值进行查询) PrivateSubCommand1_Click() DimFindObjAsMapXLib.Find DimFoundFeatureAsFindFeature '从要查询的RTU图层生成Find对象,并为这个对象设置要查询的FindDataSet、FindField属性 SetFindObj=Form1.Map1.Layers.Item (1).Find SetFindObj.FindDataset=Form1.Map1.DataSets("RTU节点"&"dataset") SetFindObj.FindField=FindObj.FindDataset.Fields("RTUName") SetFoundFeature=FindObj.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MapX 添加