您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > mapx学习笔记资料手册
MAPX学习使用笔记资料Mapxtreme下面应该有三种图层一种是固定图层当你新建一个固定图层的时候会生成*.tab等文件一种是临时图层不生成*.tab文件一种是用户绘制图层用户自己使用CDC(Graphics)进行绘图如果你想对多边形进行编辑至少你要响应Mapxtreme的鼠标事件通过鼠标事件来确定当前用户在进行何种操作。一般的过程是这样的:1.新建一个图层(建议临时图层或者用户绘制图层)2.根据多边形的点的位置绘制图元或者用CDC绘制过变形同时确定各个点在Mapxtreme地图窗口的位置建立各个点的鼠标响应区域3.通过鼠标落下的时候通过各个点的响应区域判断那个点被选中鼠标移动和抬起时要做响应的处理来改变多边形选中点的位置重重新给多边形的点赋值如果使用临时图层需要对临时图层里面的多边形图元的点参数进行更改如果是CDC绘图的话只要更改CDC绘图即可整个过程中需要考虑到地图坐标与Mapxtreme窗口坐标之间的转化。{通过对象编辑工具,用户可以在地图图层中创建和修改图元。有四种标准的对象创建工具:“添加点”、“添加线条”、“添加折线”和“添加区域”。注:若要设置所使用的工具,请设置Map.CurrentTool属性。对象编辑工具将新图元添加到在Layers.InsertionLayer属性中指定的任何图层中。只能有一个插入图层,并且默认情况下是没有插入图层。在没有任何插入图层时将当前工具设置为对象创建工具将导致错误。MapX还支持对现有地图图元的修改。若要编辑图元,则对于您要更改的任何图层,必须将Layer.Editable属性设置为真。然后,可以使用内置的“箭头”工具,在当前选择中移动图元或调整图元的大小。若要移动选定图元,只需单击并在选}代码名称:向已存在的图层中添加数据作者/收集者:xyz2004开发环境:MapX+Delphi代码:procedureTForm1.Button2Click(Sender:TObject);varlyrnew:CMapxLayer;ds:CMapxDataset;rvs:CMapxRowvalues;rv:CMapxRowvalue;ptNew:CMapXpoint;ftrNew:CmapXFeature;beginlyrNew:=Map1.Layers.item(1);ds:=Map1.Datasets.Add(miDataSetLayer,lyrNew,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam);//rvs:=ds.Rowvalues[1].Clone;rv:=CoRowvalue.Create;rvs:=CoRowvalues.Create;rv.Dataset:=ds;rv.Field:=ds.Fields.Item(1);//假设mi表有两个字段,填充之rv.value:='item1';rvs.Add(rv);rv.Field:=ds.Fields.Item(2);rv.value:='item2';rvs.Add(rv);ptNew:=CoPoint.Create;ptNew.Set_(map1.centerx,map1.centery);ftrNew:=map1.FeatureFactory.CreateSymbol(ptNew,emptyparam);ftrNew:=lyrNew.AddFeature(ftrNew,rvs);//图元+属性,即feature+Rowvalues//ftrNew=lyrNew.AddFeature(ftrNew);//ftrNew.Update(True,rvs);end.代码名称:在MapX中实现图元闪烁原码作者/收集者:zlx开发环境:Delphi+MapX代码:MapX图元分三种类型:1、线(Line),即miFeatureTypeLine2、区域(Region),即miFeatureTypeRegion3、点符号(Symbol),即miFeatureTypeSymbol加入一个时钟控件,并在时钟控件中实现以下代码:procedureTMapFrm.tmFlashSelectTimer(Sender:TObject);varft:CMapXFindFeature;lyr:CMapXLayer;bExist:Boolean;i:Integer;str:String;ds:CMapXDataset;beginbExist:=False;fori:=1tomapCity.Layers.CountdobeginifmapCity.Layers.Item[i].Name=m_strSelLyrthenbeginbExist:=True;break;end;end;ifnotbExistthenbegintmFlashSelect.Enabled:=False;MsgFrm:=TMsgFrm.Create(Self);MsgFrm.m_strMsg:=Format('图层[%s]信息不存在!',[m_strSelLyr]);MsgFrm.ShowModal;MsgFrm.Free;Exit;end;lyr:=mapCity.Layers._Item(m_strSelLyr);ds:=mapCity.Datasets.Add(miDataSetLayer,lyr,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);lyr.Find.FindDataset:=ds;lyr.Find.FindField:=ds.Fields.Item[1];str:=Format('%d',[m_nSelID]);ft:=lyr.Find.Search(str,EmptyParam);ifft.FindRCmod101thenbegintmFlashSelect.Enabled:=False;MsgFrm:=TMsgFrm.Create(Self);MsgFrm.m_strMsg:=Format('单位点[%s]信息不存在!',[m_strCorpName]);MsgFrm.ShowModal;MsgFrm.Free;Exit;end;caseft.type_ofmiFeatureTypeLine:beginifft.Style.LineColor=miColorWhitethenft.Style.LineColor:=miColorRedelseft.Style.LineColor:=miColorWhite;end;miFeatureTypeRegion:beginifft.Style.RegionColor=miColorGreenthenft.Style.RegionColor:=miColorRedelseft.Style.RegionColor:=miColorGreen;end;miFeatureTypeSymbol:beginifnotm_bFlashSelthenlyr.Selection.Replace(ft)elselyr.Selection.ClearSelection;m_bFlashSel:=notm_bFlashSel;end;end;ft.Update(EmptyParam,EmptyParam);ifnotm_bCenterthenbeginm_bCenter:=True;mapCity.CenterX:=ft.CenterX;mapCity.CenterY:=ft.CenterY;mapCity.Refresh;end;end;我这里是把选中的图元实现闪烁,并把图元居中实现图元闪烁的另一个方法:假设图元原大小是20,改变后大小是15ifft.Style.SymbolBitmapSize=20thenft.Style.SymbolBitmapSize:=15elseft.Style.SymbolBitmapSize:=20;ft.Update(EmptyParam,EmptyParam);ft是symbol类型的代码名称:画多边形、直线代码名称:画多边形,画线1,画多边形,画线procedureTForm1.Map1PolyToolUsed(Sender:TObject;ToolNum:Smallint;Flags:Integer;constPoints:IDispatch;bShift,bCtrl:WordBool;varEnableDefault:WordBool);varStyle:CMapXStyle;f:CMapXFeature;begincaseFlagsofmiPolyToolBegin:;{某些用户开始使用PolyTool..}miPolyToolEnd:{用户通过双击完成PolyTool的使用}ifToolNum=MY_POLYGON_TOOLthenbegin{它们使用MY_POLYGON_TOOL!制作新的区域图元并将其添加到第一个图层}Style:=Map1.DefaultStyle.Clone;Style.RegionPattern:=miPatternSolid;Style.RegionColor:=255;Style.RegionBorderColor:=0;Style.RegionBorderWidth:=2;Style.RegionBorderStyle:=1;{使用由事件为我提供的点。MapX自动关闭打开的多边形,因此我无需担心!}f:=Map1.FeatureFactory.CreateRegion(Points,Style);Map1.Layers.Item('TempLayer').AddFeature(f,EmptyParam);endelseifToolNum=MY_POLYLINE_TOOLthenbegin{它们使用MY_POLYLINE_TOOL!制作新的线图元并将其添加到第一个图层}Style:=Map1.DefaultStyle.Clone;Style.LineStyle:=1;Style.LineColor:=255;Style.LineWidth:=2;{使用由事件为我提供的点}f:=Map1.FeatureFactory.CreateLine(Points,Style);Map1.Layers.Item('TempLayer').AddFeature(f,EmptyParam);end;miPolyToolEndEscaped:;{用户按下了Esc或退格键删除所有节点...不要再添加任何东西。}end;end;//////////////////////////////2.画折线和多边形(并没有考虑属性数据的录入)procedureTForm1.Map1PolyToolUsed(Sender:TObject;ToolNum:Smallint;Flags:Integer;constPoints:IDispatch;bShift,bCtrl:WordBool;varEnableDefault:WordBool);varStyle:CMapXStyle;f:CMapXFeature;begincaseFlagsofmiPolyToolBegin:;{某些用户开始使用PolyTool..}miPolyToolEnd:{用户通过双击完成PolyTool的使用}ifToolNum=MY_POLYGON_TOOLthenbegin{它们使用MY_POLYGON_TOOL!制作新的区域图元并将其添加到第一个图层}Style:=Map1.DefaultStyle.Clone;Style.RegionPattern:=miPatternSolid;Style.RegionColor:=255;Style.RegionBorderColor:=0;Style.RegionBorderWidth:=2;Sty
本文标题:mapx学习笔记资料手册
链接地址:https://www.777doc.com/doc-6380959 .html