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 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点按顺时针方向排列。含有岛区的复合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定义如下
符号常量 |
值 |
对象名 |
|