几何类型

FDO相同,MapGuide支持11种几何图形类型,这11种几何图形类型可以分为简单类型和聚合类型,聚合类型的几何图形由简单类型的几何图形所组成。类MgGeometryType定义了这11种几何图形类型,表8-1列出了这11种几何图形类型以及它们在MapGuide中所对应的类。

 

 

几何图形类型

几何类

简单类型

MgGeometryType::Point

MgPoint

MgGeometryType::LineString

MgLineString

MgGeometryType::CurveString

MgCurveString

MgGeometryType::Polygon

MgPolygon

MgGeometryType::CurvePolygon

MgCurvePolygon

聚合类型

MgGeometryType::MultiPoint

MgMultiPoint

MgGeometryType::MultiLineString

MgMultiLineString

MgGeometryType::MultiPolygon

MgMultiPolygon

MgGeometryType::MultiGeometry

MgMultiGeometry

MgGeometryType::MultiCurveString

MgMultiCurveString

MgGeometryType::MultiCurvePolygon

MgMultiCurvePolygon

8-1 MapGuide支持的几何图形类型

 

除了Point之外,简单类型的几何图形也是由一些组件所组成的,例如线段、圆环、环,类MgGeometryComponentType定义了MapGuide支持的所有组件,表8-2列出了这些组件类型以及它们在MapGuide中所对应的类。

 

几何图形组件类型

组件类

MgGeometryComponentType::ArcSegment

MgArcSegment

MgGeometryComponentType::CurveRing

MgCurveRing

MgGeometryComponentType::LinearRing

MgLinearRing

MgGeometryComponentType::LinearSegment

MgLinearSegment

8-2 MapGuide支持的几何图形组件类型

 

1)   Point

Point是一个0维的几何图形,用于表示一个单独的坐标位置,如下的代码展示了如何创建一个Point几何图形。

$geometryFactory = new MgGeometryFactory();

// 创建一个坐标

$oordinate = $geometryFactory->CreateCoordinateXY(0,2);

// 创建一个Point

$point = $geometryFactory->CreatePoint($coordinate);

// 得到PointAGF文本

$pointAgfText = $wktReaderWriter->Write($point);

2)   CurveCurveSegment

Curve是一个1维几何图形,用于存储一系列有序的Point,它由一系列CurveSegment所组成,如果Curve的起始点和结束点是同一个点,那么它是闭合的,否则此Curve是开放的。CurveSegment是一个抽象几何图形组件类型,它有两种子类型:直线段LinearSegment和圆弧段ArcSegmentCurve也是一个抽象几何图形类型,它有两个具体子类型LineStringCurveStringLineString的每个CurveSegment都是直线段LinearSegmentCurveString的每个CurveSegment段既可以是直线段LinearSegment,也可以是圆弧段ArcSegment

3)   LineString

LineStringCurve的子类型,它由若干个有序的直线段LinearSegment所组成,如下的代码创建了由一个直线段组成的LineString,图8-2显示了一些LineString几何图形。

$geometryFactory = new MgGeometryFactory();

$coordinateCollection = new MgCoordinateCollection();

$wktReaderWriter = new MgWktReaderWriter();

 

// 创建第一个坐标

$coordinate = $geometryFactory->CreateCoordinateXY(0,2);

$index = $coordinateCollection->Add($coordinate);

 

// 创建第二个坐标

$coordinate = $geometryFactory->CreateCoordinateXY(2,2);

$index = $coordinateCollection->Add($coordinate);

 

// 创建LineString

$lineString = $geometryFactory->CreateLineString($coordinateCollection);

 

// 得到LineStringAGF文本

$lineStringAgfText = $wktReaderWriter->Write(lineString);

 

4)   CurveString

CurveString Curve的子类型,它由若干个有序的直线段LinearSegment和圆弧段ArcSegment所组成,如下的代码创建了一个由一个圆弧段和一个直线段组成的CurveString

$geometryFactory = new MgGeometryFactory();

$coordinateCollection = new MgCoordinateCollection();

$curveSegmentCollection = new MgCurveSegmentCollection();

$wktReaderWriter = new MgWktReaderWriter();

 

// 创建一个圆弧

$startCoordinate = $geometryFactory->CreateCoordinateXY(0,2);

$controlCoordinate = $geometryFactory->CreateCoordinateXY(2,4);

$endCoordinate = $geometryFactory->CreateCoordinateXY(4,2);

$arcSegment = $geometryFactory->CreateArcSegment($startCoordinate,

$endCoordinate, $controlCoordinate);

$index = $curveSegmentCollection->Add($arcSegment);

 

// 创建直线段,它的起点和圆弧段的终点相同

$coordinate = $geometryFactory->CreateCoordinateXY(4,2);

$index = $coordinateCollection->Add($coordinate);

$coordinate = $geometryFactory->CreateCoordinateXY(2,0);

$index = $coordinateCollection->Add($coordinate);

$linearSegment = $geometryFactory->CreateLinearSegment($coordinateCollection);

$index = $curveSegmentCollection->Add($linearSegment);

 

// 创建CurveString

$curveString = $geometryFactory->CreateCurveString($curveSegmentCollection);

 

// 得到CurveStringAGF文本

$curveStringAgfText = $wktReaderWriter->Write($curveString);

 

5)   RegionRing

MgRegion是一个2维的几何图形,在OGC简单几何规范文档中称之为Surface,它一个外部边界和0或多个内部边界组成,这些边界都是Ring类型。Ring是一个抽象几何图形组件类型,它有两个具体子类型直线环LinearRing和曲线环CurveRingLinearRing由若干个有序的LinearSegment组成,CurveRing由若干个有序的LinearSegment组成。Region也是一个抽象几何图形类型,它有两个具体子类型PolygonCurvePolygonPolygon的边界都为直线环LinearRingCurvePolygon的边界为曲线环MgCurveRing

6)   Polygon

PolygonRegion的子类型,它的外部边界和内部边界都为直线环LinearRingPolygon的内部边界可以和外部边界接触,但是必须是相切,并且只能有一个内部边界和外部边界相切。图8-3显示了一些Polygon几何图形,图8-4展示了一些无法使用单个Polygon表示的几何图形。如下的代码创建了一个Polygon,它由一个正方形的外部边界和一个正方形的内部边界组成。

$geometryFactory = new MgGeometryFactory();

$coordinateCollection = new MgCoordinateCollection();

$interiorRingCollection = new MgLinearRingCollection();

$wktReaderWriter = new MgWktReaderWriter();

 

// 注意:外部边界的坐标值需要以逆时针的顺序加入

// 创建外部边界的第一个坐标值

$coordinate = $geometryFactory->CreateCoordinateXY(0,0);

$index = $coordinateCollection->Add($coordinate);

 

// 创建外部边界的第二个坐标值

$coordinate = $geometryFactory->CreateCoordinateXY(3,0);

$index = $coordinateCollection->Add($coordinate);

 

// 创建外部边界的第三个坐标值

$coordinate = $geometryFactory->CreateCoordinateXY(3,3);

$index = $coordinateCollection->Add($coordinate);

 

// 创建外部边界的第四个坐标值

$coordinate = $geometryFactory->CreateCoordinateXY(0,3);

$index = $coordinateCollection->Add($coordinate);

 

// 创建外部边界的第五个坐标值,它与外部边界的第一个坐标值相同

$coordinate = $geometryFactory->CreateCoordinateXY(0,0);

$index = $coordinateCollection->Add($coordinate);

 

// 创建用于定义外部边界的LinearRing

$exteriorRing = $geometryFactory->CreateLinearRing($coordinateCollection);

$coordinateCollection->Clear();

 

// 注意:内部边界的坐标值需要以顺时针的顺序加入

// 创建内部边界的第一个坐标

$coordinate = $geometryFactory->CreateCoordinateXY(1,1);

$index = $coordinateCollection->Add($coordinate);

 

// 创建内部边界的第二个坐标

$coordinate = $geometryFactory->CreateCoordinateXY(1,2);

$index = $coordinateCollection->Add($coordinate);

 

// 创建内部边界的第三个坐标

$coordinate = $geometryFactory->CreateCoordinateXY(2,2);

$index = $coordinateCollection->Add($coordinate);

 

// 创建内部边界的第四个坐标

$coordinate = $geometryFactory->CreateCoordinateXY(2,1);

$index = $coordinateCollection->Add($coordinate);

 

// 创建内部边界的第五个坐标值,它与内部边界的第一个坐标值相同

$coordinate = $geometryFactory->CreateCoordinateXY(1,1);

$index = $coordinateCollection->Add($coordinate);

 

// 创建用于定义内部边界的LinearRing

$interiorRing = $geometryFactory->CreateLinearRing($coordinateCollection);

 

// 将内部环加入内部环集合

$index = $interiorRingCollection->Add($interiorRing);

 

// 创建Polygon

$polygon = $geometryFactory->CreatePolygon($exteriorRing, $interiorRingCollection);

 

// 得到PolygonAGF文本

$polygonAgfText = $wktReaderWriter->Write($polygon);

7)   CurvePolygon

CurvePolygonRegion的子类型,它的边界为曲线环CurveRing类型,如下的代码创建了一个CurvePolygon,它外部边界是一个圆,内部边界也是一个圆。

$geometryFactory = new MgGeometryFactory();

$curveSegmentCollection = new MgCurveSegmentCollection();

$curveRingCollection = new MgCurveRingCollection();

 

// 创建外部边界的第一个曲线段

$startCoordinate = $geometryFactory->CreateCoordinateXY(0,2);

$controlCoordinate = $geometryFactory->CreateCoordinateXY(2,4);

$endCoordinate = $geometryFactory->CreateCoordinateXY(4,2);

$arcSegment = $geometryFactory->CreateArcSegment($startCoordinate,

$endCoordinate, $controlCoordinate);

$index = $curveSegmentCollection->Add($arcSegment);

 

// 创建外部边界的第二个曲线段

$startCoordinate = $geometryFactory->CreateCoordinateXY(4,2);

$controlCoordinate = $geometryFactory->CreateCoordinateXY(2,0);

$endCoordinate = $geometryFactory->CreateCoordinateXY(0,2);

$arcSegment = $geometryFactory->CreateArcSegment($startCoordinate,

$endCoordinate, $controlCoordinate);

$index = $curveSegmentCollection->Add($arcSegment);

 

// 为外部边界创建曲线环

$exteriorCurveRing = $geometryFactory->CreateCurveRing($curveSegmentCollection);

 

// 在加入新的曲线段之前清除MgCurveSegmentCollection

$curveSegmentCollection->Clear();

 

// 创建内部边界的第一个曲线段

$startCoordinate = $geometryFactory->CreateCoordinateXY(1,2);

$controlCoordinate = $geometryFactory->CreateCoordinateXY(2,3);

$endCoordinate = $geometryFactory->CreateCoordinateXY(3,2);

$arcSegment = $geometryFactory->CreateArcSegment($startCoordinate,

$endCoordinate, $controlCoordinate);

$index = $curveSegmentCollection->Add($arcSegment);

 

// 创建内部边界的第二个曲线段

$startCoordinate = $geometryFactory->CreateCoordinateXY(3,2);

$controlCoordinate = $geometryFactory->CreateCoordinateXY(2,1);

$endCoordinate = $geometryFactory->CreateCoordinateXY(1,2);

$arcSegment = $geometryFactory->CreateArcSegment($startCoordinate,

$endCoordinate, $controlCoordinate);

$index = $curveSegmentCollection->Add($arcSegment);

 

// 为内部边界创建曲线环

$interiorCurveRing = $geometryFactory->CreateCurveRing($curveSegmentCollection);

$index = $curveRingCollection->Add($interiorCurveRing);

 

// 创建CurvePolygon

$curvePolygon = $geometryFactory->CreateCurvePolygon($exteriorCurveRing,

$curveRingCollection);

 

//得到CurvePolygonAGF文本

$curvePolygonAgfText = $wktReaderWriter->Write($curvePolygon);

8)   MultiPoint

MultiPoint是一个0维几何图形集合,集合中的每个元素都是Point,并且这些Point是无序的、不连接的,如下的代码创建了一个由两个Point组成MultiPoint

// 假设已经创建了两个Point

$pointCollection = new MgPointCollection();

// 在创建Point之后,将它们加入MgPointCollection

$index = $pointCollection->Add($point1);

$index = $pointCollection->Add($point2);

// 创建MultiPoint

$multiPoint = $geometryFactory->CreateMultiPoint($pointCollection);

// 获取MultiPointAGF文本

$multiPointAgfText = $wktReaderWriter->Write($multiPoint);

9)   MultiLineString

MultiLineString是一个1维几何图形集合,集合中的元素只能为LineString,并且这些LineString是无序的,图8-5显示了一些MultiLineString几何图形,如下的代码创建了一个由两个LineString组成MultiLineString

// 假设已经创建了两个LineString

$lineStringCollection = new MgLineStringCollection();

// 在创建LineString之后,将它们加入MgLineStringCollection

$index = $lineStringCollection->Add($lineString1);

$index = $lineStringCollection->Add($lineString2);

//创建MultiLineString

$multiLineString = $geometryFactory->CreateMultiLineString($lineStringCollection);

// 获取MultiLineStringAGF文本

$multiLineStringAgfText = $wktReaderWriter->Write($multiLineString);

10) MultiCurveString

一个MultiLineString是一个1维几何图形的集合,集合中的元素为CurveString,并且这些CurveString是无序的,如下的代码创建了一个由两个CurveString组成MultiCurveString

// 假设已经创建了两个CurveString

$curveStringCollection = new MgCurveStringCollection();

// 在创建CurveString之后,将它们加入MgCurveStringCollection

$index = $curveStringCollection->Add($curveString1);

$index = $curveStringCollection->Add($curveString2);

// 创建MultiCurveString

$multiCurveString = $geometryFactory->CreateMultiCurveString($curveStringCollection);

// 获取MultiCurveStringAGF文本

$multiCurveStringAgfText = $wktReaderWriter->Write($multiCurveString);

11) MultiPolygon

MultiPolygon是一个2维几何图形的集合,集合中的元素为Polygon,它的任意两个MgPolygon不可以相交,但可以接触,接触点必须是有限的,图8-6显示了一些MultiPolygon的示例,图8-7显示了无法使用MultiPolygon表示的几何,如下的代码创建了一个由两个Polygon组成MultiPolygon

// 假设已经创建了两个Polygon

$polygonCollection = new MgPolygonCollection();

// 在创建Polygon之后,将它们加入MgPolygonCollection

$index = $polygonCollection->Add($polygon1);

$index = $polygonCollection->Add($polygon2);

// 创建MultiPolygon

$multiPolygon = $geometryFactory->CreateMultiPolygon($polygonCollection);

// 获取MultiPolygonAGF文本

$multiPolygonAgfText = $wktReaderWriter->Write($multiPolygon);

12) MultiCurvePolygon

MultiCurvePolygon是一个2维几何图形的集合,集合中的元素为CurvePolygon,它的任意两个CurvePolygon不可以相交,但可以接触,接触点必须是有限的,如下的代码创建了一个由两个CurvePolygon组成MultiCurvePolygon

// 假设已经创建了两个CurvePolygon

$curvePolygonCollection = new MgCurvePolygonCollection();

// 在创建CurvePolygon之后,将它们加入MgCurvePolygonCollection

$index = $curvePolygonCollection->Add($curvePolygon1);

$index = $curvePolygonCollection->Add($curvePolygon2);

// 创建MultiCurvePolygon

$multiCurvePolygon = $geometryFactory-> CreateMultiCurvePolygon(

$curvePolygonCollection);

// 获取MultiCurvePolygonAGF文本

$ multiCurvePolygon = $wktReaderWriter->Write($multiPolygon);

13) MultiGeometry

MultiGeometry是一个几何图形的集合,集合中的元素可以为任意类型的几何图形,例如一个MultiGeometry可以包含一个Point和一个MultiPoint,集合中的任意两个几何图形不可以是连接的,并且集合中的所有几何图形是无序的,如下的代码创建了一个由PointMultiPointMultiLineStringCurveStringMultiCurveStringPolygonMultiPolygonMultiCurvePolygon组成MultiCurvePolygon

$geometryFactory = new MgGeometryFactory();

$geometryCollection = new MgGeometryCollection();

 

// 假设已经创建了下面的这些几何图形

$index = $geometryCollection->Add($point);

$index = $geometryCollection->Add($multiPoint);

$index = $geometryCollection->Add($lineString);

$index = $geometryCollection->Add($multiLineString);

$index = $geometryCollection->Add($curveString);

$index = $geometryCollection->Add($multiCurveString);

$index = $geometryCollection->Add($polygon);

$index = $geometryCollection->Add($multiPolygon);

$index = $geometryCollection->Add($curvePolygon);

$index = $geometryCollection->Add($multiCurvePolygon);

 

//创建MultiGeometry

$multiGeometry = $geometryFactory->CreateMultiGeometry($geometryCollection);

 

// 获取MultiCurvePolygonAGF文本

$multiGeometryAgfText = $wktReaderWriter->Write($multiGeometry);

 LineString

 

8-2 LineString示例

Polygon 

 

8-3 Polygon示例

 Non-Polygon

 

8-4 无法用单个Polygon表示的几何体

MultiLineString 

 

 

8-5 MultiLineString示例

MultiPolygon 

 

8-6 MultiPolygon示例

 Non-MultiPolygon

 

8-7 无法用MultiPolygon表示的几何体

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值