空间信息处理方法与技术ppt课件.ppt_第1页
空间信息处理方法与技术ppt课件.ppt_第2页
空间信息处理方法与技术ppt课件.ppt_第3页
空间信息处理方法与技术ppt课件.ppt_第4页
空间信息处理方法与技术ppt课件.ppt_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

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

文档简介

空间信息处理方法与技术 2010 9 MapX的图元MapX图层与图层集合栅格图像的应用 第5章MapX的二次开发进阶1 1MapX的图元 图元 MapFeature 是指地图中存在的地理对象 例如点 线 区域等 在一幅地图中 会包含多种不同的地理对象 例如在一幅世界地图中 不同的国家用区域表示 河流用线来表示 城市则用点来表示 在MapX中 地图图元用图元对象 FeatureObject 来表示 例如在一幅中国电子地图中 一个类型为区域的图元对象用来表示河北省 一个类型为线的图元对象用来表示黄河 而一个类型为点的图元对象会用来表示北京市 图元 在MapX中通过Feature对象来访问地图对象 1 区域对象 覆盖给出地区的封闭对象 包括多边形 椭圆形以及矩形 例如 国家的边界 邮政编码划分区的边界 销售区域等等 2 点对象 表示单个数据位置 例如 客户位置 餐馆 停车计价器等等 3 线对象 覆盖给定距离的开放对象 包括线 折线和弧线 示例是街道 河流 能源线路 4 文本对象 描述地图或其他对象的文本 例如标注和标题 MapX在单独图层里使用同一类的对象 最普遍 也可以在同一图层里把多个对象联合起来 MapX可以创建 编辑 自定义和显示这些对象 从而使地图符合用户的需要 1 图元的属性 2 图元的操作 MapX为每个图元提供了一些方法以实现图元的操作 图元集合 在MapX中 组成地图的不同图层中的每个图层通常具有相同类型的图元 在MapX中 地图图层中的所有图元及其所有子集表示为图元集合FeaturesCollection 1 图元集合的属性 2 图元集合的方法 例 在VisualBasic中创建独立的Text图元 DimftrAsNewMapXLib Feature 新的独立图元对象DimftrAddedAsMapXLib Feature 附加文字图元到到图层1ftr AttachMap1ftr Type miFeatureTypeTextftr Style Map1 DefaultStyleftr Point SetMap1 CenterX Map1 CenterYftr Caption 北京 SetftrAdded Map1 Layers 1 AddFeature ftr 创建地图图元 通过分配新图元对象创建图元 要创建其他图元类型 只要将类型设为miFeatureTypeRegion miFeatureTypeLine或miFeatureTypeSymbol 然后设置该图元类型相应的属性 创建新的独立图元对象后 必须将该图元对象附加到地图上后才能引用对象的所有方法和属性 把图元附加到地图时地图的坐标系就与图元相关联 要用到图元的Attach方法 ftr AttachMap1 创建地图图元 用FeatureFactory方法创建图元 FeatureFactory对象的方法可以创建新的地图图元 也可通过对现有图元执行操作 例如缓冲区 来创建图元 由FeatureFactory方法创建返回的独立图元对象已经自动附加到地图上 它们已经具有相关坐标系 由这些方法返回的图元对象不需要再使用Attach方法 FeatureFactory对象的方法 DimftrAsMapXLib FeatureDimptAsNewMapXLib Pointpt SetMap1 CenterX Map1 CenterY 创建文字图元并将其加入图层1Setftr Map1 Layers 1 AddFeature Map1 FeatureFactory CreateText pt 北京 例 使用FeatureFactory创建一个文字图元 图元的选取 MapX能在地图上选择图元 这样就可以在图元上执行其他任务 用户可以单击地图选择一个或多个图元 点 区域等 MapX自动高亮显示被选中的图元 使用Selection集合来获取用户所选的图元 Selection集合 Selection集合也是Feature对象的集合 和Features集合不同的是 Selection集合表示当前已选中的Feature对象 每个图层对象都有自己的Selection集合 Layer Selection Selection集合提供了不同的方法以实现在程序代码中图元的选取 例如 可以使用SelectByRadius方法选取以某城市为圆心的一定半径范围内的所有图元 所选图元将在地图上高亮显示出来 Selection集合还具有在集合中添加和删除图元的方法 如果已经具有Selection或Features集合 还可以追加 删除 复制或查找两个集合的交集 Selection集合的3种选择类型 图元选择集合的方法 PrivateSubMap1 SelectionChanged DimftrAsFeature CreateafeatureobjectDimlyrAsLayer CreatealayerobjectForEachlyrInMap1 LayersForEachftrinlyr SelectionMsgBox found ftr name NextNextEndSub 当图层选择集改变时 使用图元选择工具或使用Layer对象的某一Selection方法 触发该事件 SelectionChanged事件 2MapX图层与图层集合 一幅计算机地图由多个图层 Layer 组成 在地图窗口中 每个含有图形对象的数据表都可以显示为一个图层 这些图层叠加在一起 使用户同时可以看到地图的所有方面 将这些透明的图层叠加在一起就组织起一个完整的地图 单个图层本身只反映了部分信息 当把由点类型构成的地图覆盖在线状地图和区域地图上时 就得到了一幅非常有用的地图 每一幅单独的地图是一个图层 MapX把地图存储为图层的集合 Layer对象代表矢量地图数据 由地图图元 区域 线 点和文本 集合组成 通常一个Layer对象对应于一个MapInfo表 Layers中的每一个Layer都是独立的 即其样式更改 图层缩放等不影响其他图层 可以在程序中操作图层对象 也可以使用属性页对话框在设计时设置图层属性 Layer对象 图层的名称 NameMsgBoxMap1 Layers 4 Name图层是否可见 VisibleMap1 Layers Item 2 Visible False是否替代该图层的默认显示特性 OverrideStyleMap1 Layers 9 OverrideStyle True 1 Layer对象的属性 设置图层显示的样式 StyleMap1 Layers 9 Style newstyleObject设置图层缩放打开或关闭 ZoomLayerMap1 Layers States ZoomLayer True设置图层可见的最小缩放级别 ZoomMinMap1 Layers States ZoomMin 45 设置图层可见的最大缩放级别 ZoomMaxMap1 Layers States ZoomMin 580是否允许用户通过单击该图层来选择该图层 SelectableMap1 Layers States Selectable True控制图层是否自动标注 AutoLabelMap1 Layers States AutoLabel True 图层的类型 TypemiLayerTypeNomal标准矢量图层miLayerTypeRaster栅格图层miLayerTypeSeamless无缝图层miLayerTypeUserDraw用户绘制图层miLayerTypeDrilldown可深入图层miLayerTypeUnknown未知类型图层下面的代码段在Layers集合中循环以确定现有的图层是什么类型 并在对话框中显示图层类型 DimlyrasLayerForEachlyrinMap1 LayersSelectCaselyr TypeCasemiLayerTypeNormalMsgBox Layer lyr Name isanormallayer CasemiLayerTypeRasterMsgBox Layer lyr Name isarasterlayer CasemiLayerTypeSeamlessMsgBox Layer lyr Name isaseamlesslayer CasemiLayerTypeUnknownMsgBox Layer lyr Name isanunknownlayer CasemiLayerTypeUserDrawMsgBox Layer lyr Name isauserdrawlayer CasemiLayerTypeDrilldownMsgBox Layer lyr Name isadrilldownlayer EndSelectNext 2 Layer对象的方法 每个Map都有图层集合 Layers Layers由图层 Layer 对象组成 而Layer是由MapInfo的表构建的 每个图层可包含不同类型的图元 点 线 面 文本 Layers集合中的每一个Layer对象的行为独立于其他对象 它们的样式更改 图层缩放的更改都基于单个图层 而不会影响其他图层 图层集合 Layers对象 1 如何得到图层集合 在GeosetManage中创建 GST文件后 即可在应用程序中使用由该 GST定义的Layers 2 Layers属性 Layers集合具有用来添加和删除layer对象 改变Layer显示的顺序 检查Layer类型等方法和属性 所有集合都有Count属性 该属性非常有用 可得到图层的数目 遍历Layers集合的每一图层 就可以用到此属性 Count 获得集合中的图层数量 DimIasIntegerForI 1toMap1 Layers CountDebug PrintMap1 Layers I NameNextI Item 从集合中获取图层 Item属性从集合中获得特定的Layer对象 Item属性返回一个图层作为对象 它是Layers集合的默认方法 可以通过索引值 如1 2等等 来引用图层 也可以通过它们的名称引用 例如Highways或者Cities DimlyrasLayerSetlyr Map1 Layers Item Highways 或者 DimlyrasLayerSetlyr Map1 Layers Item 3 Bounds 获得集合的地理范围 Bounds属性返回代表集合中所有地图图层的地理范围 除了暂存 装饰 图层 的Rectangle对象 如要在地图窗口中显示整个Layers 则 Map1 Bounds Map1 Layers Bounds AnimationLayer 动态图层 SetMap1 Layers AnimationLayer Map1 Layers 1 InsertionLayer 插入 编辑 图层 SetMap1 Layers InsertionLayer Map1 Layers 1 3 Layers的方法 Layers集合有一些方法来控制集合包含哪些图层以及它们如何显示 还有一个方法用于显示图层控制对话框 创建图层 DimlyraslayerSetlyr Map1 Layers CreateLayer Temporary 可以创建新的临时或永久的MapInfo表图层 该方法返回Layer对象 即添加到集合的Layer对象 添加图层 添加现有的图层到集合中并在地图上显示 当添加图层时 可以使用可选的Position参数指定图层在集合中的位置 如果没有指定Position参数 图层将根据地图中的其它图层自动放置 例如 点图层将置于区域图层之上 Map1 Layers Add C Data Counties tab 代码 PrivateSubmnuAddLayers Click DimsFileAsStringWithCommonDialog1 DialogTitle AddLayer Filter MapInfoTables tab tab ShowOpenIfLen 0ThenExitSubEndIfsFile EndWithOnErrorResumeNextMap1 Layers AddsFileEndSub 删除图层 Remove方法将指定的图层从地图删除 Map1 Layers Remove3 删除所有图层 RemoveAll方法将所有图层从地图中删除 Map1 Layers Removeall 重定位图层 Move方法重确定图层在Layers集合中的顺序 第一个参数是原来的顺序 顶端图层为1 第二个参数是要移动到的顺序 Map1 Layers Move1 2 LayersDlg图层控制对话框AddGeosetLayers添加一个Geoset中的所有图层到图层集合AddServerLayer添加一个Server图层到图层集合AddUserdrawLayer添加类型为miLayerTypeUserDraw的图层到图层集合ClearSelection清空图层集合中所有图层的Selection集合 如果用户单击确定 在对话框中所做的更改将立即对地图生效 方法调用 VB Map1 Layers LayersDlg LayersDlg方法显示可让用户添加图层 删除图层 更改图层顺序和更改图层属性的对话框 使用图层控制对话框 显示属性对话框 显示属性对话框使得用户可以自定义地图窗口中每个图层的显示 在图层控制中 用户可以选择图层并单击显示按钮以显示显示属性对话框 然后 用户可以更改图层的缺省样式并设置图层显示的缩放范围 当用户第一次打开地图时 边界 线 点和文本都使用在地图的Geoset文件中的默认值来显示 用户可以通过使用显示属性对话框的显示模式部分更改对象显示的方式 例如 用户想要将街道的显示变成红色虚线 在图层控制对话框中用户可以选择街道图层并单击显示按钮 将出现显示选项对话框 选中样式替换框以激活样式替换按钮 大的灰色按钮 MapX显示适合于图层中对象类型的替换按钮 例如 如果图层包含街道 将显示一个线替换按钮 单击该按钮进入线样式对话框 在此用户可以改变街道的宽度 样式和颜色 对于边界图层 样式替换按钮将引出区域样式对话框 可改变边界的填充和边框 当要为包含符号或点的图层替换样式时 将显示符号样式对话框 和其他显示设置一样 样式替换只在当前的工作期间有效 如果要使其永久有效 必须修改Geoset 图层的顺序放置 Layers集合中的地图图层按递增的索引顺序显示 例如 Layers 1 是最上面的图层 Layers 2 是Layer 1 下面的图层 等等 底部的图层首先绘制 顶部的图层最后绘制 正确地排列图层很重要 例如 假设有一个客户点图层和人口普查区图层 如果图层在Layers集合中的顺序不正确 MapX将首先绘制客户点图层 然后显示人口普查区图层 则点图层将被人口普查区图层所遮掩 可以在设计时重新调整图层在Map中显示的顺序 如前所述 在属性页的图层选项卡中使用向上和向下按钮 选择要重新排序的图层并选择向上或向下按钮移动图层到它当前位置的上方或下方 要使得用户在运行时可以调整图层的顺序 使用LayersDlg方法显示图层控制对话框 如前所述 图层顺序在使用选择工具时也很重要 选择工具从最上面的可选图层选择对象 如果在相同位置有几个对象 就很难精确选择所要的那一个 可以重新调整图层的顺序使得要选择的图层是新的最顶端的图层 图层缩放 有时您想使一个地图图层仅在某些缩放级别显示 图层缩放控制地图图层的显示 使它仅当地图缩放水平在预先设置的距离内时才显示 可为每个图层设置不同的图层缩放级别 例如 如果地图包括街道地图图层 当用户过于缩小地图时 可能发现街道变得难以辨认 使用图层缩放可令当用户缩小地图使显示范围大于5公里时 MapX自动隐藏街道的地图 未设置缩放级别的图层集合 对街道图层设置了缩放级别的图层集合 DimlyrStreetsAsLayer SetstheStreetstableasthelayerobjectandordersthelayer inthemapasnumber3 SetlyrStreets Map1 Layers Add Streets tab 3 lyrStreets ZoomLayer True SetszoomlayeringtotruelyrStreets ZoomMin 0 Setsminimumzoomto0mileslyrStreets ZoomMax 5 Setsmaximumzoomto5miles 一旦为图层设置了图层缩放 当地图在最小缩放级别和最大缩放级别之间缩放时 图层将在地图上显示 例如 Map1 ZoomTo3 70 26 44 05因为3英里的缩放值在最小缩放级别和最大缩放级别之间 Streets图层将中心点定在 70 26 44 05 并显示涵盖地图控件3英里的地图区域 相同Map窗口中的不同图层可以以不同的缩放级别显示 例如 地图上有街道图层 县边界图层 以及州边界图层 想要使街道图层只在缩放级别小于八英里时才可见 而县边界图层在缩放级别处于20到200英里时显示 州边界图层则只在缩放级别大于100英里时才可见 可以为地图中的每一个图层设置不同的缩放级别 MapX提供了多种方法来标注地图图层中地理对象的属性 它们的绘制位置基于地理对象中心的位置及其他定位信息 如锚点和偏移量 图层标注 Label 作为属性 标注是动态连接到关于它们的地图对象上的 如果图层被关闭或不可见 则标注不再显示 如果数据或地理信息改变 则标注也改变 如果为标注创建了表达式 并对该表达式进行更改 则当前标注会被新的表达式动态取代 无论是自动标注地图 还是交互地使用Label工具或LabelAtPoint方法 标注的内容都由与地理对象相关联的数据来确定 除了标注内容 还可以使用LabelProperties对象中的属性来控制自动标注的位置 显示和外观 可以为标注显示设置条件 如显示的样式和图层中所有对象的位置 LabelProperties对象的属性 以下示例程序使用外部Mapstats mdb库中 USA 表的 GEONAME 字段值作为标注 DimDSAsMapXLib ObjectDimDBAsMapXLib ObjectDimRSASMapXLib ObjectDimfieldASMapXLib ObjectSetDB Workspaces 0 OpenDatabase Mapstats mdb SetRS DB openRecordset USA SetDS Map1 Datasets Add miDataSetDAO RS SetMapl Layers usa Labelproperties Dataset DSSetfield DS Fields GEONAME SetMapl Layers Usa LabelProperties DataField field 自动标注 要为图层自动生成标注 可以设置图层AutoLabel属性为True 每一个图层对象都有LabelProperties对象 用来控制标注的许多方面 例如 为了隐藏图层的所有标注 可设置LabelProperties Visible属性为False 若要指定想在地图上显示的标注的最大数量 可以设置LabelMax属性 Duplicate属性控制同名的图元是否可以同时在地图上分开标注 Overlap属性控制是否允许标注叠加 设置Overlap为True可以使更多图元被标注 但叠加的标注很难识别 可以设置标注只在特定的缩放范围中显示 方法类似于在一定的缩放范围中显示地图图层 要对标注指定缩放范围 可设置图层的LabelProperties对象的LabelZoom LabelZoomMax和LabelZoomMin属性 要控制标注的位置 可设置Position属性 控制标注是在图元中心的上方 下方还是旁边 和Offset属性 控制标注对于图元的偏移量 默认的锚点取决于图层的主要图元类型 例如 区域图元的图层默认为在区域中心有相关标注 对于线 折线图元 如街道地图 可以使标注平行于线对象 方法是设置Parallel属性为True 缩放图层标注 交互式标注 尽管大部分标注可能会自动完成 但某些情况下可能要使用Label工具创建标注 Label工具是MapX内置的标准工具 要激活该工具 可设置Map CurrentTool属性为miLabelTool 1010 然后用户就可通过单击图元进行标注 删除标注 删除图层中所有标注的最简单的方法是将Visible设置为False 它将禁止该图层中所有标注的显示 包括自动和自定义标注 要只清除自定义标注 使用Label工具制作的标注 可使用ClearCustomLabels方法 注释 Annotation 也称为注记 文本图元 尽管标注可以解决大部分图元的注记需要 但可能仍然需要创建文本对象来对地图进行注记 不同于标注的是 文本注记不与数据连接 可以将它放在地图上的任何地方 即便那个位置没有任何图元 要添加文本或符号注记到地图 请使用Annotations集合和对象中的方法和属性 每个Map对象都有Annotations的集合 Map Annotations属性 注记可以是符号或文本对象 且绘制在地图的顶层 注记通常用于为地图添加文本消息 或者是添加符号 在对地图进行缩放时这些注记会相应地调整大小 注记不固定于某个特定的地图图层 注记总是在地图的顶层 符号注记Map1 CurrentTool miSymbolTool文本注记Map1 CurrentTool miTextTool用户自定义工具Map1 CreateCustomTool ToolNumber Type Cursor ShiftCursor CtrlCursor InfoTips 动态图层 AnimationLayers AnimationLayers在地图图元需要经常更新 例如在实时应用 时很有用 例如 可以开发一套舰队管理应用程序 将每一艘舰船用一个点对象来代表 可以通过使用GPS 全球卫星定位 技术获取舰船的当前位置 然后更新点对象以显示舰船在地图上的更新位置 在这类应用程序中 如果被更新的对象存储在动态图层而不是常规图层 那么在地图对象经常改变的地方 地图可以更快地重新绘制 1 动态图层的概念 最初 AnimationLayer设置为null 可以向Layer对象分派属性以使图层成为动态图层 它可以是常规图层或是用户绘制图层 当图层被分派了AnimationLayer属性 它就会绘制在所有图层的上方 包括Annotations图层和选择结果 该图层仍然在Layers集合中的同样位置 浮动对象如图标符号仍然显示在动态图层的顶端 尽管它们因为被省略了而不必每次重新绘制 如果普通的图层被用作动态图层 其选择结果和标注会依然有效 SetMap Layers AnimationLayer Layers 3 ForeachlyrinMap LayersifMap Layers AnimationLayer lyrthen EndifNext要关闭活动图层 给它赋予空值 SetMap Layers AnimationLayer Nothing这样使该图层变回普通图层 且其在图层列表中的位置不变 示例 绘制图层 Layers集合的AddUserDrawLayer方法使开发人员在地图上绘制图层 当需要绘制图层时 它与激活的DrawUserLayer事件结合在一起使用 该方法返回新创建的Layer对象 用户可以绘制任意数量的图层 首先 添加用户绘制图层到图层集合 DimlyrasLayerSetlyr Map1 Layers AddUserDrawLayer MyLayer 1 然后 设置DrawUserLayer事件中的代码以绘制图层 当应用程序使用Layers集合的AddUserDrawLayer方法创建了UserDraw图层后 当窗口需要更新时 应用程序就会激活该事件 栅格图的注册 3栅格图像的应用 栅格图的注册又称为配准 栅格图本身是不能附加数据的 因此在地理信息系统中 若要将一幅栅格图作为一个图层来显示 则需要创建一个与之对应的 TAB 文件 这个 TAB 文件存储了相应的的栅格图的坐标信息 这样 MapX会自动设置所有的矢量地图图层的旋转和投影 以便使它们与栅格图像的旋转和投影相配 从而使矢量数据准确地覆盖在栅格图像上 栅格图注册的方法 栅格图的注册就是要创建 TAB 文件 需要使用MapInfoProfessional创建并 注册 对应的栅格图 1 创建栅格图象文件栅格图象文件是由多行微小的点 象素 组成的一种计算机化的图象 如果手头有扫描仪及扫描软件 可以通过扫描一幅纸张地图来创建栅格图象 完成地图扫描并将其保存于文件中后 即可在MapInfo中显示该文件 有多种不同的栅格图象文件格式 MapInfo能够处理以下格式的栅格图象文件 JPEG GIF TIFF PCX BMP TGA Targa 和BIL SPOT卫星图片 2 指定正确的投影使用MaplnfoProfessional软件打开一幅栅格图 选择 配准 即开始注册过程 要准确显示栅格图像 在配准过程中正确的投影是很重要的 MapInfo在默认情况下使用经度 纬度方式投影 3 选择控制点配准栅格图像的关键是提供准确的控制点信息 因此 应该选择那些容易被辨认和选中的控制点 以城市地图为例 街道交叉点就是一个好的选择 选好控制点后便为该控制点指定地图坐标 4 输入地图坐标配准一幅栅格图象时 要输入地图坐标 如经度 纬度 并指定栅格图象上与该坐标对应的点 至少3个点 要在MapInfo中显示栅格图象前必须进行配准 以使MapInfo在显示图象时能够完成地理计算 如计算距离和面积等 5 保存配准结果MapInfo中首次打开一幅栅格图象时 MapInfo显示 配准栅格图象 对话框 填写该对话框以告知MapInfo如何配准图象 MapInfo将栅格图象配准信息保存在表文件中以供以后使用 下一次打开该栅格图象表时就不必再进行配准了 这样 只须对栅格图象进行一次配准 在地图中添加 删除和替换栅格图层 1 添加栅格图层 在MapX地图中 栅格图也是作为图层来显示的 每幅栅格图有一个相对应的 TAB 文件 这个 TAB 文件储存相应的坐标信息 因此在添加一个栅格图时 只需要使用MapName Layers Add LayerNumber语句添加相应的 TAB 文件即可 由于栅格图通常用作背景图 因此栅格图应该添加到所有图层的最底层 得到地图层数intLayerNumber MapName Layers Count 设置过滤条件dlgCommon Filter MapInfoTAB tab tab AllFiles 设置对话框标题dlgCommon DialogTitle 请选择加载的底图 dlgCommon ShowOpen 调出open对话框MapName Layers AdddlgCommon intLayerNumber 1 装载新底图 2 删除栅格图层 ForEachlyrUnLoadInMapName LayersSelectCaselyrUnLoad TypeCasemiLayerTypeRaster 如果是RASTER则卸载MapName Layers RemovelyrUnLoad NameCaseElse 如果是其他则保留EndSelectNext 在MapX中 LayerTypeConstants是用来表示图层类型的常数 LayerTypeConstants值为miLayerTypeRaster或数字2时表示图层的类型为栅格图 3 替换栅格图层 将一个地图中已有的栅格图层替换成需要的栅格图层 只需要先将地图

温馨提示

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

评论

0/150

提交评论