mapx学习笔记资料手册.doc_第1页
mapx学习笔记资料手册.doc_第2页
mapx学习笔记资料手册.doc_第3页
mapx学习笔记资料手册.doc_第4页
mapx学习笔记资料手册.doc_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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.Rowvalues1.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.Itemi.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.Item1;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.SymbolBitmapSize20thenft.Style.SymbolBitmapSize:=15elseft.Style.SymbolBitmapSize:=20;ft.Update(EmptyParam,EmptyParam);ft是symbol类型的代码名称:画多边形、直线代码名称:画多边形,画线1,画多边形,画线procedure TForm1.Map1PolyToolUsed(Sender: TObject; ToolNum: Smallint; Flags: Integer; const Points: IDispatch; bShift, bCtrl: WordBool; var EnableDefault: WordBool); var Style: CMapXStyle; f: CMapXFeature; begin case Flags of miPolyToolBegin: ; 某些用户开始使用 PolyTool. miPolyToolEnd: 用户通过双击完成 PolyTool 的使用 if ToolNum = MY_POLYGON_TOOL then begin 它们使用 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(Temp Layer).AddFeature(f, EmptyParam); end else if ToolNum = MY_POLYLINE_TOOL then begin 它们使用 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(Temp Layer).AddFeature(f, EmptyParam); end; miPolyToolEndEscaped: ; 用户按下了 Esc 或退格键 删除所有节点. 不要再添加任何东西。 end; end; /2.画折线和多边形(并没有考虑属性数据的录入)procedure TForm1.Map1PolyToolUsed(Sender: TObject; ToolNum: Smallint; Flags: Integer; const Points: IDispatch; bShift, bCtrl: WordBool; var EnableDefault: WordBool); var Style: CMapXStyle; f: CMapXFeature; begin case Flags of miPolyToolBegin: ; 某些用户开始使用 PolyTool. miPolyToolEnd: 用户通过双击完成 PolyTool 的使用 if ToolNum = MY_POLYGON_TOOL then begin 它们使用 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(Temp Layer).AddFeature(f, EmptyParam); end else if ToolNum = MY_POLYLINE_TOOL then begin 它们使用 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(Temp Layer).AddFeature(f, EmptyParam); end; miPolyToolEndEscaped: ; 用户按下了 Esc 或退格键 删除所有节点. 不要再添加任何东西。 end; end;用DELPHI开发”MapInfo MapX“ 分类:学习笔记2007.11.13 15:41 作者:xboshi82 | 评论:0 | 阅读:2618 MapInfo MapX是一个用来做地图化工作的OCX控件, 首先是简介 是以后才有的 MapX是一个OCX组件,可以被快速集成到使用Visual Basic、PowerBuilder、Delphi、Visual C+或其他面向对象的语言的客户端应用程序以及使用Lotus Script的Lotus Notes (v4.5)中。开发人员可以在他们熟悉的环境中工作,最终用户可以通过他们熟悉的应用程序来访问地图数据。 MapX 的功能 MapX不仅仅是一个“地图浏览器”。通过MapX,可以分析并直观地显示业务数据,创建或编辑地图图元,并按地理位置显示数据结果。 、专题制图 - 使用专题制图显现数据。联合数据和地图中的每个图元,并在地图中用颜色编码(或其他样式)来表示数据。可使用六种不同的样式来观察数据(色彩范围、点密度、独立值、等级符号、饼图、直方图)。 、逐层细化制图 - 可以通过简单的定点和单击来浏览数据,在OLAP S环境下,可以允许用户通过定点和单击逐层细化地图的某个区域。 、数据绑定 - 地图可合并来自嵌套OCX的容器、ODBC或DAO数据源(例如MSAccess)的数据。MapX提供多种不同类型数据的绑定,包括邮政编码级别的地理编码。 、注释 - 可以提供定位、高亮显示特定数据的功能,通过添加文本、符号和标注来使您的地图信息变得更加丰富。、图层化 - 显示和控制地图图层的显示,让它只在地图的缩放比例符合事先调整的距离时才显示。还可以使用或创建无缝地图图层,它可以把一组基表看作一个整体。特殊图层类型可以支持特殊类型的应用,如动态图层(用于实时跟踪)和用户描绘图层(用于描绘特殊的地图元素,如地图上方的标志)。 、栅格图像 - 用一幅放在底层的栅格图像作为地图背景,使您的地图更生动、更详细。目前,主要是配合卫星行片,使地图更加逼真 、自动标注 - 自动向地图添加标注,同时控制其属性及显示。、选择 - 通过分组和组织数据,发挥MapX的分析特性。即在一个指定的半径、矩形区域或指定点的范围内选择地图图元。图元工厂 - FeatureFactory对象使您得以创建、合并和缓冲区或擦除点、线和区域图元。工具 - 用户可以通过单击和拖动直接与地图交互。通过MapX内置的导航、选择和标注工具或自定义工具来对地图进行操作。地图编辑 - 可以让用户在地图上添加、修改或删除图元。投影和坐标系 - MapX对地图坐标系和投影的完全支持使您可以更精确地调整地图的显示并在自己的坐标系中处理X-Y数据。、远程空间服务器连接 - 可以连接运行在Oracle8.0.5、Informix或其他所支持的数据库上的Oracle8i Spatial和MapInfo SpatialWare上存储的真实数据。为集中管理和安全起见,空间服务器允许公司在企业数据库中主持他们的地图数据。象SpatialWare和Oracle8i Spatial之类的空间服务器还提供高级查询处理功能,并增加了用于处理组织机构的空间数据的服务器性能。在一个RDBMS中存储空间数据对于需要进行大量地图编辑和处理大型数据集的应用程序也是必要的。但需要说明的是,公司有专门用于的 安装 MapX 因为MapX是32位OCX,所以它需要一个32位版本的Windows (Windows 95/98或Windows NT 4.0)。MapX应用程序不能在Windows 3.1 中运行。下面讲组织数据和地图 要使用 MapX,需要有您的记录和MapInfo地图文件。MapX 以 MapInfo 表的形式组织所有潜在信息。每个表都是一组用来在地图中创建图层的 MapInfo 文件。文件如何组成表?所有的 MapInfo 表都会拥有下列文件:.tab:描述 MapInfo 表的结构。它是描述包含数据的文件的格式的小文本文件。.dat:(.mdb、.aid 或 .dbf):这些文件含有表格格式数据。.map:描述图形对象(如果表没有地图对象则不存在该文件)。.id:是链接对象和数据的交叉引用文件(如果表没有地图对象则不存在该文件)。.ind:索引文件。索引文件允许使用 Find 对象来查找地图对象。不熟悉,就讲一下MapInfo 表和 MapX 图层每个可用地图表示的 MapInfo 表都能在地图上作为图层显示。例如,您可以显示客户表、街道表以及县边界表。图层是透明的,而每一层都包含了地图的不同部分。这些图层是一层层叠加,这样您就可以看到整个地图信息。 什么是 GeoSets?Geoset 保存了地图图层的集合以及一些对您来说简单易用的设置。其名称的由来是因为 Geosets 是由一些表示同一地理区域的以标准 MapInfo 格式出现的地图文件(.tab)组成的数据集。当您希望将多个图层作为示例地图使用时,会发现单独打开和显示多个图层是件多么费时的工作,Geoset 使您避免这样的情况。Geoset 的扩展名是 .gst。.gst 文件是文本文件,它包含若干用来告诉 MapX 显示什么表以及如何显示的元数据键值。当打开 Geoset 时,它自动打开所有包括在 Geoset 中的文件并默认显示。开发者可以更改“默认显示”来迎合自己的需要。Geoset 设置包括投影、默认缩放值,对象的自动标注,缩放范围以及打开的表是否可见。MapX 也可以打开开发者指定的任意单个(.tab)地图文件。使用 Geoset 非常方便,无需 MapX 就能运行。MapX 将不会打开 MapInfo 工作空间(.wor 文件类型)。但在地图的组织上相当于MapInfo 工作空间第三个概念:地图图元以上是入门 下面讲的也是基础性的 Map 对象 下列图表是 MapX 对象体系的局部,您可以看到 Map 对象存在于最顶端。每个 MapX 的对象、属性和方法都衍生于 Map 对象。每个在 Map 对象之下的属性和方法都会对生成整个 Map 对象有所影响。主要是由 DataSets、Layers 和 Annotations 对象定义每一个 Map 对象。 下表显示了一些由数值表示的 Map 对象属性。可以在“设计时”改变这些属性,也可以在“运行时”使用以下代码示例来更改。属性描述代码示例Zoom设置在地图中显示的英里(默认的距离单位)数。Map1.Zoom = 500Rotation对地图旋转指定的度数Map1.Rotation = 179CenterX设置 x 和 y 坐标,它们可能代表经纬度。这是由地图的投影来决定的。Map1.CenterX = -79.4458CenterY设置 x 和 y 坐标,它们可能代表经纬度。这是由地图的投影来决定的。Map1.CenterY = 44.9932显示不正常 Zoom设置在地图中显示的英里(默认的距离单位)数。Map1.Zoom = 500Rotation对地图旋转指定的度数Map1.Rotation = 179CenterX设置 x 和 y 坐标,它们可能代表经纬度。这是由地图的投影来决定的。Map1.CenterX = -79.4458CenterY设置 x 和 y 坐标,它们可能代表经纬度。这是由地图的投影来决定的。Map1.CenterY = 44.9932用 Map 对象,可以通过操纵地图的几个方法和属性来控制地图如何来显示。有一些属性是由其他对象来表示的。例如,当您看到 MapX 地图时,也就是看到单独图层的集合,它是由 Layers 集合来表示的。Layers 集合是 Map 对象的属性。现在让我们来看一看如何改变地图的属性。属性页允许我们操作 Map 对象的多个属性。 上面是属性页,可以直接修改,也可以在程序里修改 下面讲图层 每一幅单独的地图是一个图层,MapX 把地图存储为图层的集合。 区域地图 图层集合还有很多,以后再详细讲 下面是GeoSets GeoSet 是地图图层及其设置的集合。可以在“设计时”指定GeoSet 。如果在“运行时”设置,则先要删除所有已加载的图层和数据集,然后加载新的 GeoSet。如前所述,在运行时指定要加载的其他 GeoSet、给地图对象添加图层,或是操作图层的外观等操作都可以通过属性页来实现,或者可以通过与 MapX 一起装载的 MapX Geoset Manager 程序 来实现(此程序可以在 MapX 程序组中找到)。 可以利用GeoSetManager管理工具更改图层设置,当认为满意时,就可以保存地图。这将把 GeoSet 文件(*.GST)写到驱动器中。当打开该 GeoSet 文件时,将返回所有的地图图层和设置。Geoset Manager 使您可以修改图层、管理缩放等级、标注,以及其他属性。下面是GeoDictionary,数据绑定的你可以把图片打包,压缩传他 利用MapXz作数据绑定或创建专题地图时,可以用 GeoDictionary来匹配数据源与地图图层。GeoDictionary 是一个保存了关于哪个地图图层可以匹配、哪个字段可以用作匹配字段的信息文件(一般命名为 geodict.dct)。如果想运用自动匹配/自动绑定,则必须在 GeoDictionary 中注册文件。例如,如果拥有按州划分的销售额的数据,那么 GeoDictionary 就可以确定此数据和“USA”地图图层相匹配。 修改 GeoDictionary如果在做数据绑定时要利用自动匹配,则在 GeoDictionary 里注册 MapInfo表是必要的。在 MapX GeoSet Manager 的工具菜单下有执行GeoDictionary 程序的选项。MapX GeoDictionary 程序允许把新的MapInfo 表注册到 GeoDictionary 中。同时,在 MapX GeoDictionary 中,单击注册表按钮,然后选择要注册的表,设置表属性并为其输入描述。如果要想自动地把这张表加载到 GeoSet 中,请单击添加按钮然后选择要把表添加进的 GeoSet 。下面是基础部分的第五个问题:DataSets DataSets使您可以将数据绑定到地图。例如,如果您有一个按县划分的关于销售额的 MS Access 数据库和一幅县地图,您就可以把数据绑定在这幅县地图上,并可以发现这个按县划分的销售额趋势图,而以表格数据的形式则不容易突出显示该趋势。 如上所示,当 MapX 需要在数据和地图之间指定某个匹配时,该匹配是通过称为自动匹配/自动绑定的处理过程来确定的。如要利用自动匹配/自动绑定,首先必须在 GeoDictionary 中注册地图。一旦将数据和地图绑定,就可以看到相关的地理化信息。数据的直观表示使得专题地图的创建变得可行。专题就是以颜色划分的地图,以该方式来表现数据的变化趋势。我们将在以后章节中详细的讲解专题图的制作。 Annotations 集合是把文本和符号放在地图上的简单方法。注释放在所有其他图层的最顶端,并且不和任何数据链接。如果您熟悉 MapInfo,Annotations的概念在目的上与地图的装饰图层比较相似。下表列出了 Annotations 集合对象的方法和属性:Annotations 集合方法 表格显示不正常,表格项依次是方法描述代码示例AddSymbol向 Annotation 集合添加符号。使用默认样式(由 Map.DefaultStyle 指定)。Map1.Annotations.AddSymbol X, YAddText向 Annotation 集合添加文本。第四个参数表示文本在指定坐标系中的初始位置。Map1.Annotations.AddText _ “Developer Services”, _ 79.44, 46.8889, _ miPositionTL Remove从集合中删除指定的 Annotation。Map1.Annotations.Remove 1RemoveAll从集合中删除所有的 Annotation。Map1. Annotations.RemoveAllAnnotation 集合属性Editable指定注释是否能够编辑。Map1.Annotations.Editable _ = TrueType指定 Annotation 对象类型。If Map1.Annotations(2).Type_Graphic包含了拥有 Annotation 属性的 Graphic 对象。请参阅联机帮助中的 Graphic 对象描述。请注意在注释对象中没有关于位置、符号样式或是注释的属性。注释的图形属性包含了该信息的图形对象。要修改注释,可修改注释的图形对象。 下列代码在指定位置添加符号:Add a symbol at locationMap1.Annotations.AddSymbol(X1, Y1); 第七个问题:创建对象在 MapX 对象模型中,可以使用下列对象类来创建独立对象。BindLayer ODBCQueryInfoBitmapSymbols 点集的集合Feature PointFields PointsNotesQueryInfo RectangleNotesViewInfo StyleDelphi 示例Var s : variant;begin s := CreateOleObject(MapX.Style.4); s.PickRegion; MapObject.Layers.Item(1).Style := s;End一、加载地图数据 1、 TAB的数据分为两种数据:地图数据(Layers)、属性数据(Datasets)。关系:不可分割的一个数据集的两部分. 2、 数据加载:GST文件由GeosetManager40.exe程序生成。在程序使用gsT文件:Map1.Geoset=Filepath+FileName 3、 问题:GST文件加载后,只是默认将地图数据加载,属性数据另外需要使用单独的命令进行加载,否则对属性数据的操作全部非法。加载:Map1.Datasets.ADD 属性数据集名称4、 另一种加载方式:使用LayerInfo 对象,这种方式下加载地图数据源的地图集和属性集均可直接使用。示例: dim LayerInfo as MapXLib.LayerInfo dim Lyr as Mpxlib.layer LayerInfo.Type = miLayerInfoTypeTab 加载表的类型 LayerInfo.AddParameter FileSpec, FilePath + LayerName + .TAB 加载表的全路径名 LayerInfo.AddParameter NAME, LayerName 地图集的别名 LayerInfo.AddParameter AutoCreateDataset, 1 是否加载属性数据集 LayerInfo.AddParameter datasetname, LayerName 属性数据集别名 MainMap.Layers.Add LayerInfo 加载到指定的MapX对象中,立即可直接使用 5、 第三种加载数据方式:GST文件+ LayerInfo方式。示例: 使用两个MapX对象:MainMap、TempMap TempMap.Geoset=GST文件 MainMap.geoset=” TempMap.Refresh For I=1 to TempMap.Layers.Count FileName=TempMap.Layers.Item(I).Filespec 直接引用LayerInfo方式加载地图数据到MainMap Next 二、创建地图对象 必要:创建地图对象,必须使用FeatureFactory对象 1、 创建一个点对象 点对象有一个坐标点(X,Y),点对象变量是Point类型,点对象的样式(Style)是符号样式。 Dim Pnt AS MapXLib.Point Dim FeaFac AS MapXLib.FeatureFactory Dim Lyr AS MapXLib.Layer Dim Ftr AS MapXLib.Feature Dim NewStyle AS MapXLib.Style 绑定 SET Lyr=MainMap.Layers.Item(LayerName) SET FeaFac=mainmap.featurefactory 设置点对象样式 With NewStyle .SymbolType = miSymbolTypeBitmap .SymbolBitmapSize = 24 .SymbolBitmapTransparent = False .SymbolBitmapName = YIEL2-32.BMP End With Mainmap.AutoRedraw=False 禁止自动刷新 Lyr.Editable=True 置当前图层为可写状态 创建点对象 pnt.set X1,Y1 添加进当前图层 Set Ftr=FeaFac. CreateSymbol (Pnt,Newstyle) 创建符号 Set Ftr=FeaFac. CreateSymbol (Pnt,MainMap.DefaultStyle) 添加 Lyr.AddFeature Ftr Lyr.Refresh Mainmap.AutoRedraw=True Lyr.Editable=False 释放 SET Pnt = Nothing SET FeaFac = Nothing SET Lyr = Nothing SET Ftr = Nothing 以上代码放在MapX的ToolUsed事件下 单独修改某个图元的样式:SET Ftr.Style=NewStyle,再用Update 即可 2、 创建一个线矩形 Dim Pnts AS MapXLib.Points With NewStyle .LineColor=Rgb(0, 0,255) End With 第一个点 Pnt.Set X1,Y1 Pnts.add Pnt 第二个点 Pnt.Set X2,Y1 Pnts.add Pnt 第三个点 Pnt.Set X2,Y2 Pnts.add Pnt 第四个点 Pnt.Set X1,Y2 Pnts.add Pnt 第五个点 Pnt.Set X1,Y1 Pnts.add Pnt 创建线矩形 SET Ftr=FeaFac.CreateLine(Pnts,NewStyle) Lyr.AddFeature Ftr Lyr.Refresh 3、 上面创建对象中存在的问题:并未对其数据数据进行赋值 创建对象的同时创建其数据集合 Dim Pnt AS MapXLib.Point Dim FeaFac AS MapXLib.FeatureFactory Dim Lyr AS MapXLib.Layer Dim Ftr AS MapXLib.Feature Dim NewStyle AS MapXLib.Style Dim ds AS MapXLib.Dataset Dim Flds AS MapXLib.Fields 绑定 SET Lyr=MainMap.Layers.Item(LayerName) SET ds=Lyr.Datasets.Item(1) Set Flds=ds.Fields SET FeaFac=mainmap.featurefactory 设置点对象样式 With NewStyle .SymbolType = miSymbolTypeBitmap .SymbolBitmapSize = 24 .SymbolBitmapTransparent = False .SymbolBitmapName = YIEL2-32.BMP End With Mainmap.AutoRedraw=False 禁止自动刷新 Lyr.Editable=True 置当前图层为可写状态 创建点对象 pnt.set X1,Y1 创建图形 Set Ftr=FeaFac. CreateSymbol (Pnt,Newstyle) 创建符号 Set Ftr=FeaFac. CreateSymbol (Pnt,MainMap.DefaultStyle) 设置属性 For I=1 to Flds.Count Lyr.KeyFields=Flds.Item(i).Name Ftr.KeyValue=ValueStr(I) 这里并没有对字段类型进行判断 Next 另外一种方法:使用RowValues和RowValue对象 添加 Lyr.AddFeature Ftr Lyr.Refresh Mainmap.AutoRedraw=True Lyr.Editable=False 释放 SET Pnt = Nothing SET FeaFac = Nothing SET Lyr = Nothing SET Ftr = Nothing SET ds = Nothing SET Flds = Nothing 4、 创建表 (1) 临时表: A、用MainMap.Layers.CreateLayer方法创建临时表。但这个临时表只有一个字段:GeoName( Char 24)。程序运行过程中该表存放位置为系统临时文件夹下 B、使用LayerInfo对象创建临时表,可以指定字段。示例: Dim Lyr As MapXLib.Layer Dim LayerInfo As New MapXLib.LayerInfo Dim Flds As New MapXLib.Fields 字段定义 Flds.AddStringField ID, 12 Flds.AddStringField Name, 50 Flds.AddNumericField Deptch, 12, 2 Flds.AddIntegerField Length LayerInfo.Type = miLayerInfoTypeTemp LayerInfo.AddParameter FileSpec, FileName LayerInfo.AddParameter NAME, LayerName LayerInfo.AddParameter Fields, Flds Set Lyr = MainMap.Layers.Add(LayerInfo, 1) Set Lyr = Nothing Set LayerInfo = Nothing (2) 创建永久表 Dim Lyr As MapXLib.Layer Dim LayerInfo As New MapXLib.LayerInfo Dim Flds As New MapXLib.Fields Flds.AddStringField ID, 12 Flds.AddStringField Name, 50 Flds.AddNumericField Deptch, 12, 2 Flds.AddIntegerField Length LayerInfo.Type = miLayerInfoTypeNewTable LayerInfo.AddParameter FileSpec, FilePath + + FileName LayerInfo.AddParameter NAME, LayerName LayerInfo.AddParameter Fields, Flds Set Lyr = MainMap.Layers.Add(LayerInfo, 1) Set Lyr = Nothing Set LayerInfo = Nothing 5、 创建工具句柄 系统已经定义工具句柄都以整数(包括16进制)常数存在,句柄号大于1000和小于12基本都为系统使用。 A. 定义常数:必须为全局变量 Global Const CreateSymbolTool = 13 创建节点 Global Const CreateLineTool = 15 创建管线 Global Const InfoTipTool = 16 信息工具 Global Const MoveFeature = 17 移动地图 Global Const ScaleDistanceTool = 18 测量两点间的距离 B. 使用CreateCustomTool创建新的工具句柄: MainMap.CreateCustomTool CreateSymbolTool, miToolTypePoint, m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论