ImageVerifierCode 换一换
格式:DOC , 页数:11 ,大小:127.50KB ,
资源ID:7035691      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7035691.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(MapObejcts组件应用设计(几何对象).doc)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

MapObejcts组件应用设计(几何对象).doc

1、1. Point对象 2. Line及Polygon对象 1. 图形坐标数据 2. Points集合与Parts集合 3. 几何对象的运算 1. IsPointIn 2. GetCrossings 3. 4. Intersect 5. Difference 6. Xor 7. Buffer 4. 动态分段 1. 点事件(PointEvents) 2. 线事件(LineEvent) 3. 线的节点(Vertex)路程 4. 动态分段样例 MapObjects2可以处理的几何元素有Point 、Line、 Polygon、 Circle、 Rectangle,每种

2、元素定义成一个对象。这些对象统称为Shape,但没有定义Shape对象。除了Point以外,其它四种都提供了交互式输入方法:TrackLine 、TrackPolygon、 TrackCircle、 TrackRectangle。 2.5.1 Point对象 Point是最简单的对象,语句 Dim pt As New MapObjects2.Point pt.X = 30342 pt.Y = 43535 建立了一个Point实例。 2.5.2 Line及Polygon对象 1图形坐标数据 在MapObjects2中,Line与Polygon图形都用Point的有序集合的集合定

3、义,称为parts,Point的有序集合定义一条折线,称为part,part的集合命名为Parts。只有一条折线的Line或Polygon实例的Parts集合中仅含有一个part。在Line中part的首尾两点不同,在Polygon中part的首尾两点用一个Point表示。 下面这段程序取自附属盘中的样例GeoData中的MouseDown事件过程,程序先根据鼠标位置查出一个省区,然后将省区多边形的坐标串加入到List1控件中。 Dim recs As MapObjects2.Recordset '查询结果记录集 Dim curX As Single, curY As Single '鼠

4、标光标位置坐标 Case “显示选择的多边形坐标数据” Dim pt As MapObjects2.Point Dim dist As Double Set pt = Map1.ToMapPoint(curX, curY) ‘根据屏幕坐标建立point实例 dist = 1000 Set recs = Map1.Layers(“china”).SearchByDistance(pt, dist, “”) ‘按距离查询 If recs.EOF Then Exit Sub ‘在列表框中显示省界坐标” Dim shp As Polygon Dim pts As MapObject

5、s2.Points Dim i As Integer Dim j As Integer Set shp = recs(“Shape”).Value Me.List1.Clear Me.List1.AddItem “Parts.Count = “ & shp.Parts.Count Me.List1.AddItem recs.Fields(“Name”) + “省界坐标” For j = 0 To shp.Parts.Count-1 Set pts = shp.Parts(j) For i = 0 To pts.Count - 1 Me.List1.AddItem (Str(

6、pts.Item(i).X) & “ “ & Str(pts.Item(i).Y)) Next i Next j Map1.Refresh ‘触发Map1_AfterTrackingLayerDraw事件过程,绘制查询结果图 End Select 2 Points集合与Parts集合 在Polygon及Line对象中,Points是点的集合,Parts是Points的集合。以下是集合上的常用操作: Dim poly As MapObjects2.Polygon Dim pts As MapObjects2.Points Set poly = Map1.TrackPolygon

7、 ‘鼠标跟踪绘制一个多边形 Set pts = poly.Parts.Item(0) ‘获得多边形中Points集合的引用 pts.Remove pts.Count –1 ‘删除多边形上的最后一点 Dim pt As New MapObjects2.Point pt.X = 2300 pt.Y = 4500 pts.Set 2 , pt ‘替换pts集合中的点pts.Item(2) pts.Reverse ‘改变pts中点的排列方向 在Polygon对象中,Points集合中点的排列方向赋予了特殊的含义。简单Polygon边界Points点按顺时针方向排列。含有岛区的复合Pol

8、ygon的外围边界线点按顺时针方向排列,内部岛区边界线点按逆时针方向排列。 Parts集合是不可创建对象,Polygon与Line的Parts属性也是只读的。在创建Polygon或Line对象的实例同时创建了Parts实例,且用Parts属性引用Parts实例。可按如下步骤建立一个完整的Polygon实例: 1创建一个Polygon对象实例。 2创建Points对象实例。 3创建Point对象实例,设置它的X、Y属性值,用Pionts.Add方法添加到Points实例中。 4重复步骤3,将所有的点加入到Points实例中。 5用Polygon.Parts.Add方法将Points实

9、例加入到Parts属性中。 单Part的Polygon用上述5步即可建立。 对于多Part的Polygon重复步骤5。 同理可以建立Line实例。 2.5.3几何对象的运算 MapObject2 的几何对象共有6种,符号常量由枚举表ShapeTypeConstants定义如下 符号常量 值 对象名 moShapeTypePoint 21 Point moShapeTypeLine 22 Line moShapeTypePolygon 23 Ploygon moShapeTypeMultipoint 24 Points moShapeTypeRecta

10、ngle 25 Rectangle moShapeTypeEllipse 26 Ellipse 六种对象的父对象都是Object。 例:判断几何对象的类型。 Dim ObjA As Object Dim ObjPoint As New MapObjects2.Point Dim ObjPolygon As New MapObjects2.Polygon Set ObjA = ObjPoint If ObjA.shapeType = moShapeTypePoint Then Debug.Print "ObjA类型是Point" Set ObjA = ObjPolyg

11、on If ObjA.shapeType = moShapeTypePolygon Then Debug.Print "objA的类型是Polygon " 几何对象的运算在上表中6种对象的实例上进行,由实例的方法完成运算,运算数据来源于实例及实例方法中的参数。 1 IsPointIn Function IsPointIn(pt As Point) As Boolean 适用对象: Polygon, Rectangle,Ellipse 这个方法判断点是否位于几何对象围成的区域中。例: Dim pt as New MapObjects2.Point pt.X = 1200 pt.

12、Y = 2000 if Not Map1.Extent.IsPointIn(pt) Then ‘Map.Extent是Ractangle对象 Map1.CenterAt pt.X, pt.Y ‘以pt为中心显示地图 End If 2 GetCrossings Function GetCrossings(Shape As Object) As Points 适用对象: Point,Points,Line, Polygon, Rectangle 这个函数计算两个几何图形的交点集合。例: Dim shape As New MapObjects2.Line Dim aPoly As

13、New MapObjects2.Polygon Dim pts As MapObjects2.Points 设置shape和aPoly的parts属性值 Set pts = aPoly.GetCrossings(shape) ‘返回交点集合的引用 3 Function Union(Shape As Object,[Extent]) As Object 适用对象: Point, Points, Line, Polygon, Rectangle, Ellipse 这个函数返回两个几何图形的并。 Polygon和Rectangle都表示面,归为同一类类型。参与运算的两个对象应属于同

14、一类型对象。例: Dim aPoly As MapObjects2.Polygon Dim bPoly As MapObjects2.Polygon Dim cPoly As MapObjects2.Polygon 设置aPoly及bPoly的parts属性值 Set cPoly = aPoly.Union(bPoly) 4 Intersect Function Intersect(Shape As Object,[Extent]) As Object 这个 函数返回两个几何图形的交。 句法: Set resultShape = object.Intersect (Sha

15、pe [,extent]) object可以是: Point, Points, Line, Polygon, Rectangle, Ellipse 6 种对象 Shape可以是: Point, Points, Line, Polygon, Rectangle, Ellipse 6 种对象 resultShape的类型随object与Shape的组合而异,如下表所示 resultShape的类型 Shape object Point Points Line Polygon Rectangle Ellipse Point Point Point Point Po

16、int Point Point Points Point Point 或Points Point 或Points Point或Points Point 或Points Point 或Points Line Point Point 或Points Point 或Points Line Line Line Polygon Point Point 或Points Line Polygon Polygong或Ractangle Polygon Rectangle Point Point 或Points Line Polygon或Ractagle

17、 Ractangle Polygon或 Ractangle Ellipse Point Point 或Points Line Polygon Polygon或 Ractangle Polygon 5 Difference Function Difference(Shape As Object,[Extent]) As Object 适用对象: Point, Points, Line, Polygon, Rectangle, Ellipse 这个函数返回两个几何图形的差。例: Set cPoly = aPoly.Difference(bPoly) 6 Xor F

18、unction Xor(Shape As Object,[Extent]) As Object 适用对象: Point, Points, Line, Polygon, Rectangle, Ellipse 这个函数返回两个几何图形的异或。例: Set cPoly = aPoly.Xor(bPoly) 7 Buffer Function Buffer(distance As Object, [Extent]) As Object 适用对象: Point, Points, Line, Polygon, Rectangle, Ellipse Buffer函数返回边界距离调用对象为dis

19、tance的Polygon。例: Dim aPoly As MapObjects2.Polygon Dim aLine As New MapObjects2.Line 设置aLine的Parts属性值 Set aPloly = aLine.Buffer(120) 在MapObjects2中,Buffer Intersect Difference Union及Xor方法使用整数坐标,具有较高的计算速度。为确保从浮点数转换到整数保持几何操作的一致性,建议使用Rectangle型的Extent参数,对所有的几何操作使用相同的Extent参数。若不使用参数Extent,对相同的Shape重复

20、使用几何方法,不同次的结果图形的几何坐标可能会出现计算误差。 如果在方法中没有使用Extent参数,Mapobjets2使用两个源Shape的外接矩形的并。 例1 在跟踪层画两个Polygon 求它们的Xor,用不同的颜色在跟踪层显示源Polygon和结果Polygon。 完整代码在XorPolygon样例目录中。主要代码如下: Dim shape1 As Object Dim exclOr As Boolean Private Sub Form_Load() '设置PointEvents在跟踪层中得显示用的符号符号 exclOr = False Map1.Tracking

21、Layer.SymbolCount = 2 With Map1.TrackingLayer.Symbol(0) .SymbolType = moFillSymbol '面(区域) .Style = moGrayFill '半透明填充 .Color = moCyan .OutlineColor = moCyan End With With Map1.TrackingLayer.Symbol(1) .SymbolType = moFillSymbol .Style = moGrayFill '半透明填充 .Color = moMagenta .OutlineColor = m

22、oMagenta End With End Sub Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) ' 在Map1窗口中画两个Polygon 计算它们的 XOR Dim poly As New MapObjects2.Polygon Dim eventLine As New MapObjects2.GeoEvent Set poly = Map1.TrackPolygon '在Map1窗口中画Polygon Set eventLine = Map1

23、TrackingLayer.AddEvent(poly, 0) '在跟踪层中显示Poly Call doXor(poly) End Sub Private Sub doXor(shape As Object) '计算两个Polygon的XOR If Not exclOr Then '画第一个Polygon时保存到Shape1中 Set shape1 = shape exclOr = True ElseIf exclOr Then '画完第而个Polygon后则计算它们的 XOR Dim xorShape As Object Dim xorEvent As New MapOb

24、jects2.GeoEvent Set xorShape = shape1.Xor(shape, Map1.FullExtent) '计算两个Polygon的Xor Set xorEvent = Map1.TrackingLayer.AddEvent(xorShape, 1) '加入到跟踪层中 Set shape1 = Nothing exclOr = False End If End Sub 习题 1 编写程序实现样例1的功能。 2 以习题1的代码为基础,写出Intersect程序,在程序中判断Intersect函数的返回结果的Shape类型。 2.5.4动态分段 动态

25、分段在Line对象上操作,是Line对象的特有方法操作的结果。在MapObjects2中Line表示有向折线,折线的折点称为Vertex(节点),折线的始末点称为Node(结点)。以始结点为度量起点,每个节点都有一个沿着折线的路程值,用路程值确定点在折线上的位置,给定的路程值确定了折线上的唯一点。 1点事件(PointEvents) Line对象几何图形上的任意一点称为PointEvent,PointEvent专用于程序设计,可在程序运行中动态创建,动态改变位置,是动态的Point实例。 例:在长度为500的线实例aLine上创建距始点路程为400的点事件。 Dim ptsEvents

26、 As MapObjects2.Points Set ptsEvents = aLine.ReturnPointEvents(400)                 0 500           2线事件(LineEvent) 从Line对象几何图形上截取的任意一条线段称为LineEvent(线事件),LineEvent是动态创建的线实例,用线的始末点在原Line上的路程确定截取位置。 例:在长度为500的Line实例aLine上,创建始点路程200终点路程400的线事件。 Dim lineEvent as MapObjects2.Line Set lineEv

27、ent = aLine.ReturnLineEvent(200,400) 3线的节点(Vertex)路程 Line对象实例上的节点距始结点(Node)的路程作为线的几何属性常用于最佳路径分析及网络分析,为此MapObjects.Line对象提供了两个方法: (1) Sub SetMeasuresAsLength() 此方法为线的节点的Measure属性赋路程值, 路程值用地图的数据坐标计算,是地面上的实际路程。 例:在长度为500的线实例aLine上设置节点的Measure(路程)属性值 aLine.SetMeasuresAsLength 0 80 280 31

28、0 500 180 各节点的Measure属性值如下: 从上例可见,aLine的始末结点也算作节点。 (2) Sub SetMeasures(StartValue As Double,EndValue As Double) 此方法用StartValue作为始节点的路程值,用EndValue作为末节点的路程值,在这两个值之间按新旧路程的比例插值作为中间节点的路程值,将计算结果赋给节点的Measure属性。执行此函数之前可执行也可不执行SetMeasuresAsLength函数。 例:对上例中aLine实例重新设置节点的路程属性值,使得始节点的路程值为1,末节点的路程值为25

29、1,中间节点路程值按新旧路程值比例计算。 aLine.SetMeasurs(1,251) 1 41 141 156 251 91 4动态分段样例 在MapObjects中,点事件将给定的线动态分为两段,称为动态分段(Dynamic Segmentation)。分段只是视觉上的效果,并未对线进行实际分割。动态分段函数不会更改线的节点坐标值。 例1 用鼠标在地图窗口中输入一点,找出最近的一条线,在线上分别使用3个Measure函数,显示出每个Measuer 函数设置的线的各个节点的Measure值。完整样例在SetMeasuer目录中 Private Su

30、b Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim pt As MapObjects2.Point Dim recs As New MapObjects2.Recordset Set pt = Map1.ToMapPoint(X, Y) '转换(X,Y)成地图数据坐标系下的坐标 Set recs = Map1.Layers(0).SearchByDistance(pt, Map1.ToMapDistance(150), "") ' 如果找到了一条线,则提取它的 shap

31、e 字段值储存在 oLine 变量中, ‘设置 measures 在列表框中显示oLine上的 ' 的各个节点的Measure值。 If Not recs.EOF Then Dim oLine As New MapObjects2.Line Dim pointMeasuer As Double Set oLine = recs("Shape").Value Map1.TrackingLayer.ClearEvents Map1.TrackingLayer.AddEvent oLine, 0 List1.Clear List2.Clear List3.Clear Dim

32、 vertices As New MapObjects2.Points Dim i As Integer oLine.SetMeasuresAsLength pointMeasuer = oLine.ReturnMeasure(pt) List1.AddItem "鼠标点的 Measure: " & pointMeasuer List1.AddItem "节点的 Measure:" For Each vertices In oLine.Parts For i = 0 To vertices.Count - 1 List1.AddItem vertices(i).Measure

33、 Next i Next vertices oLine.SetMeasures 0, 100 pointMeasuer = oLine.ReturnMeasure(pt) List2.AddItem "鼠标点的 Measure: " & pointMeasuer List2.AddItem "节点的 Measure:" For Each vertices In oLine.Parts For i = 0 To vertices.Count - 1 List2.AddItem vertices(i).Measure Next i Next vertices oLine.Of

34、fsetMeasures 50 pointMeasuer = oLine.ReturnMeasure(pt) List3.AddItem "鼠标点的 Measure: " & pointMeasuer List3.AddItem "节点的 Measure:" For Each vertices In oLine.Parts For i = 0 To vertices.Count - 1 List3.AddItem vertices(i).Measure Next i Next vertices End If End Sub 例2:在地图窗口中用鼠标左键输入一点,在Map1

35、Layers(“Road”)图层中找出与输入点距离最近的线,在找到的线上创建与输入点距离最近的点(点事件)。在跟踪层中用红色显示点事件。样例在PntEnt.vbp工程中,从中摘取的程序如下: Private Sub Form_Load() 省略的其它语句 ‘设置PointEvents在跟踪层中得显示符号 Map1.TrackingLayer.SymbolCount = 1 With Map1.TrackingLayer.Symbol(0) .SymbolType = moPointSymbol .Color = moRed .Size = 6 .Style = moCirc

36、leMarker End With EndSub Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 省略的其它语句 Case “点事件” ‘在道路图层上搜索与鼠标点最靠近的线 Dim pt As MapObjects2.Point Dim recs As New MapObjects2.Recordset Set pt = Map1.ToMapPoint(X, Y) Set recs = Map1.Layers(“road”).SearchByD

37、istance(pt, Map1.ToMapDistance(150), “”) ‘ 如果找到最近的线则将它的图形数据保存到gLine变量中 If Not recs.EOF Then Map1.TrackingLayer.ClearEvents ‘清除跟踪层中的点事件 Dim gLine As New MapObjects2.Line Set gLine = recs(“Shape”).Value gLine.SetMeasuresAsLength ‘用长度设置线上节点的路程值 ‘Get closest measure, and return point events Dim

38、nearMeasure As Double Dim events As MapObjects2.Points nearMeasure = gLine.ReturnMeasure(pt) ‘ gLine上与pt点最接近的点的路程值 Set events = gLine.ReturnPointEvents(nearMeasure) ‘返回GLine上路程值为nearMeasure的点 ‘在地图窗口中显示events点 If Not events Is Nothing Then Dim theSelected As MapObjects2.GeoEvent Set theSelected = Map1.TrackingLayer.AddEvent(events, 0) End If End If End Select End Sub

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服