45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:设计MapObejcts组件应用的方法

设计MapObejcts组件应用的方法

2016-08-29 06:52:39 来源:www.45fan.com 【

设计MapObejcts组件应用的方法

MapObjects2可以处理的几何元素有Point Line Polygon Circle Rectangle,每种元素定义成一个对象。这些对象统称为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 LinePolygon对象

1图形坐标数据

MapObjects2中,LinePolygon图形都用Point的有序集合的集合定义,称为partsPoint的有序集合定义一条折线,称为part,part的集合命名为Parts。只有一条折线的LinePolygon实例的Parts集合中仅含有一个part。在Linepart的首尾两点不同,在Polygonpart的首尾两点用一个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集合

PolygonLine对象中,Points是点的集合,PartsPoints的集合。以下是集合上的常用操作:

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集合是不可创建对象,PolygonLineParts属性也是只读的。在创建PolygonLine对象的实例同时创建了Parts实例,且用Parts属性引用Parts实例。可按如下步骤建立一个完整的Polygon实例:

1创建一个Polygon对象实例。

2创建Points对象实例。

3创建Point对象实例,设置它的XY属性值,用Pionts.Add方法添加到Points实例中。

4重复步骤3,将所有的点加入到Points实例中。

5Polygon.Parts.Add方法将Points实例加入到Parts属性中。

PartPolygon用上述5步即可建立。 对于多PartPolygon重复步骤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, RectangleEllipse

这个方法判断点是否位于几何对象围成的区域中。例:

Dim pt as New MapObjects2.Point

pt.X = 1200

pt.Y = 2000

if Not Map1.Extent.IsPointIn(pt) Then ‘Map.ExtentRactangle对象

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

设置shapeaPolyparts属性值

Set pts = aPoly.GetCrossings(shape) ‘返回交点集合的引用

3

Function Union(Shape As Object,[Extent]) As Object

适用对象: Point, Points, Line, Polygon, Rectangle, Ellipse

这个函数返回两个几何图形的并。

PolygonRectangle都表示面,归为同一类类型。参与运算的两个对象应属于同一类型对象。例:

Dim aPoly As MapObjects2.Polygon

Dim bPoly As MapObjects2.Polygon

Dim cPoly As MapObjects2.Polygon

设置aPolybPolyparts属性值

Set cPoly = aPoly.Union(bPoly)

4 Intersect

Function Intersect(Shape As Object,[Extent]) As Object

这个 函数返回两个几何图形的交。


本文地址:http://www.45fan.com/a/question/69138.html
Tags: 组件 MapObejcts MapObjects2
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部