设计MapObejcts组件应用的方法
MapObjects2可以处理的几何元素有Point 、Line、 Polygon、 Circle、 Rectangle,每种元素定义成一个对象。这些对象统称为Shape,但没有定义Shape对象。除了Point以外,其它四种都提供了交互式输入方法:TrackLine 、TrackPolygon、 TrackCircle、 TrackRectangle。
2.5.1 P oint对象
Point是最简单的对象,语句
Dim pt As New MapObjects2.Point
pt.X = 30342
pt.Y = 43535
建立了一个Point实例。
2.5.2 Line及Polygon对象
1图形坐标数据
在MapObjects2中,Line与Polygon图形都用Point的有序集合的集合定义,称为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 '鼠标光标位置坐标
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 MapObjects2.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(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 ‘鼠标跟踪绘制一个多边形
Set pts = poly.Parts.Item(0) ‘获得多边形中Points集合的引用
pts.Remove pts.Count –1 ‘删除多边形上的最后一点
Dim pt AsNew MapObjects2.Point
pt.X = 2300
pt.Y = 4500
pts.Set 2 , pt ‘替换pts集合中的点pts.Item(2)
pts.Reverse ‘改变pts中点的排列方向
在Polygon对象中,Points集合中点的排列方向赋予了特殊的含义。简单Polygon边界Points点按顺时针方向排列。含有岛区的复合Polygon的外围边界线点按顺时针方向排列,内部岛区边界线点按逆时针方向排列。
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实例加入到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 |
moShapeTypeRectangle |
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 = ObjPolygon
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.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 New MapObjects2.Polygon
Dim pts As MapObjects2.Points
设置shape和aPoly的parts属性值
Set pts = aPoly.GetCrossings(shape) ‘返回交点集合的引用
3
Function
适用对象: Point, Points, Line, Polygon, Rectangle, Ellipse
这个函数返回两个几何图形的并。
Polygon和Rectangle都表示面,归为同一类类型。参与运算的两个对象应属于同一类型对象。例:
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
这个
本文地址:http://www.45fan.com/a/question/69138.html