00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
#ifndef _OGR_GEOMETRY_H_INCLUDED
00180
#define _OGR_GEOMETRY_H_INCLUDED
00181
00182
#include "ogr_core.h"
00183
#include "ogr_spatialref.h"
00184
00194 class OGRRawPoint
00195 {
00196
public:
00197
OGRRawPoint()
00198 {
00199 x = y = 0.0;
00200 }
00201
double x;
00202
double y;
00203 };
00204
00205
00206
00207
00208
00209
00219 class CPL_DLL OGRGeometry
00220 {
00221
private:
00222
OGRSpatialReference * poSRS;
00223
00224
public:
00225 OGRGeometry();
00226
virtual ~OGRGeometry();
00227
00228
00229
virtual int getDimension()
const = 0;
00230
virtual int getCoordinateDimension()
const = 0;
00231
virtual OGRBoolean IsEmpty()
const {
return 0; }
00232
virtual OGRBoolean IsSimple()
const {
return 1; }
00233
virtual void empty() = 0;
00234
virtual OGRGeometry *clone()
const = 0;
00235
virtual void getEnvelope(
OGREnvelope * psEnvelope )
const = 0;
00236
00237
00238
virtual int WkbSize()
const = 0;
00239
virtual OGRErr importFromWkb(
unsigned char *,
int=-1 )=0;
00240
virtual OGRErr exportToWkb( OGRwkbByteOrder,
unsigned char * )
const = 0;
00241
virtual OGRErr importFromWkt(
char ** ppszInput ) = 0;
00242
virtual OGRErr exportToWkt(
char ** ppszDstText )
const = 0;
00243
00244
00245
virtual OGRwkbGeometryType getGeometryType()
const = 0;
00246
virtual const char *getGeometryName()
const = 0;
00247
virtual void dumpReadable( FILE *,
const char * = NULL );
00248
virtual void flattenTo2D() = 0;
00249
virtual char * exportToGML()
const;
00250
00251
void assignSpatialReference(
OGRSpatialReference * poSR );
00252 OGRSpatialReference *getSpatialReference(
void )
const {
return poSRS; }
00253
00254
virtual OGRErr transform(
OGRCoordinateTransformation *poCT ) = 0;
00255 OGRErr transformTo(
OGRSpatialReference *poSR );
00256
00257
00258
virtual OGRBoolean Intersect( OGRGeometry * ) const;
00259 virtual OGRBoolean Equal( OGRGeometry * ) const = 0;
00260
00261 #ifdef notdef
00262
00263
00264
00265 OGRGeometry *getBoundary();
00266
00267 OGRBoolean Disjoint( OGRGeometry * );
00268 OGRBoolean Touch( OGRGeometry * );
00269 OGRBoolean Cross( OGRGeometry * );
00270 OGRBoolean Within( OGRGeometry * );
00271 OGRBoolean Contains( OGRGeometry * );
00272 OGRBoolean Overlap( OGRGeometry * );
00273 OGRBoolean Relate( OGRGeometry *, const
char * );
00274
00275
double Distance( OGRGeometry * );
00276 OGRGeometry *Intersection(OGRGeometry *);
00277 OGRGeometry *Buffer(
double );
00278 OGRGeometry *ConvexHull();
00279 OGRGeometry *Union( OGRGeometry * );
00280 OGRGeometry *Difference( OGRGeometry * );
00281 OGRGeometry *SymmetricDifference( OGRGeometry * );
00282 #endif
00283
00284
00285 static
int bGenerate_DB2_V72_BYTE_ORDER;
00286 };
00287
00288
00289
00290
00291
00298 class CPL_DLL
OGRPoint : public OGRGeometry
00299 {
00300
double x;
00301
double y;
00302
double z;
00303
00304
public:
00305
OGRPoint();
00306
OGRPoint(
double x,
double y,
double z = 0.0 );
00307
virtual ~
OGRPoint();
00308
00309
00310
virtual int WkbSize()
const;
00311
virtual OGRErr importFromWkb(
unsigned char *,
int=-1 );
00312
virtual OGRErr exportToWkb( OGRwkbByteOrder,
unsigned char * )
const;
00313
virtual OGRErr importFromWkt(
char ** );
00314
virtual OGRErr exportToWkt(
char ** ppszDstText )
const;
00315
00316
00317
virtual int getDimension()
const;
00318
virtual int getCoordinateDimension()
const;
00319
virtual OGRGeometry *clone()
const;
00320
virtual void empty();
00321
virtual void getEnvelope(
OGREnvelope * psEnvelope )
const;
00322
00323
00324
double getX()
const {
return x; }
00325
double getY()
const {
return y; }
00326
double getZ()
const {
return z; }
00327
00328
00329 void setX(
double xIn ) { x = xIn; }
00330 void setY(
double yIn ) { y = yIn; }
00331 void setZ(
double zIn ) { z = zIn; }
00332
00333
00334
virtual OGRBoolean Equal( OGRGeometry * ) const;
00335
00336
00337 virtual const
char *getGeometryName() const;
00338 virtual OGRwkbGeometryType getGeometryType() const;
00339 virtual OGRErr transform(
OGRCoordinateTransformation *poCT );
00340 virtual
void flattenTo2D();
00341
00342 };
00343
00344
00345
00346
00347
00352 class CPL_DLL
OGRCurve : public OGRGeometry
00353 {
00354
public:
00355
OGRCurve();
00356
virtual ~
OGRCurve();
00357
00358
virtual double get_Length()
const = 0;
00359
virtual void StartPoint(
OGRPoint *)
const = 0;
00360
virtual void EndPoint(
OGRPoint *)
const = 0;
00361
virtual int get_IsClosed()
const;
00362
virtual void Value(
double,
OGRPoint * )
const = 0;
00363
00364 };
00365
00366
00367
00368
00369
00374 class CPL_DLL OGRLineString :
public OGRCurve
00375 {
00376
protected:
00377
int nPointCount;
00378
OGRRawPoint *paoPoints;
00379
double *padfZ;
00380
00381
void Make3D();
00382
void Make2D();
00383
00384
public:
00385 OGRLineString();
00386
virtual ~OGRLineString();
00387
00388
00389
virtual int WkbSize()
const;
00390
virtual OGRErr importFromWkb(
unsigned char *,
int = -1 );
00391
virtual OGRErr exportToWkb( OGRwkbByteOrder,
unsigned char * )
const;
00392
virtual OGRErr importFromWkt(
char ** );
00393
virtual OGRErr exportToWkt(
char ** ppszDstText )
const;
00394
00395
00396
virtual int getDimension()
const;
00397
virtual int getCoordinateDimension()
const;
00398
virtual OGRGeometry *clone()
const;
00399
virtual void empty();
00400
virtual void getEnvelope(
OGREnvelope * psEnvelope )
const;
00401
00402
00403
virtual double get_Length()
const;
00404
virtual void StartPoint(
OGRPoint *)
const;
00405
virtual void EndPoint(
OGRPoint *)
const;
00406
virtual void Value(
double,
OGRPoint * )
const;
00407
00408
00409
int getNumPoints()
const {
return nPointCount; }
00410
void getPoint(
int,
OGRPoint * )
const;
00411
double getX(
int i )
const {
return paoPoints[i].x; }
00412
double getY(
int i )
const {
return paoPoints[i].y; }
00413
double getZ(
int i )
const;
00414
00415
00416
virtual OGRBoolean Equal( OGRGeometry * )
const;
00417
00418
00419
void setNumPoints(
int );
00420
void setPoint(
int,
OGRPoint * );
00421
void setPoint(
int,
double,
double,
double = 0.0 );
00422
void setPoints(
int,
OGRRawPoint *,
double * = NULL );
00423
void setPoints(
int,
double * padfX,
double * padfY,
00424
double *padfZ = NULL );
00425
void addPoint(
OGRPoint * );
00426
void addPoint(
double,
double,
double = 0.0 );
00427
00428
00429
virtual OGRwkbGeometryType getGeometryType()
const;
00430
virtual const char *getGeometryName()
const;
00431
virtual OGRErr transform(
OGRCoordinateTransformation *poCT );
00432
virtual void flattenTo2D();
00433
00434 };
00435
00436
00437
00438
00439
00440
00441
00450 class CPL_DLL OGRLinearRing :
public OGRLineString
00451 {
00452
private:
00453
friend class OGRPolygon;
00454
00455
00456
virtual int _WkbSize(
int b3D )
const;
00457
virtual OGRErr _importFromWkb( OGRwkbByteOrder,
int b3D,
00458
unsigned char *,
int=-1 );
00459
virtual OGRErr _exportToWkb( OGRwkbByteOrder,
int b3D,
00460
unsigned char * )
const;
00461
00462
public:
00463 OGRLinearRing();
00464 OGRLinearRing( OGRLinearRing * );
00465 ~OGRLinearRing();
00466
00467
00468
virtual const char *getGeometryName()
const;
00469
virtual OGRGeometry *clone()
const;
00470
virtual int isClockwise()
const;
00471
00472
00473
00474
00475
virtual int WkbSize()
const;
00476
virtual OGRErr importFromWkb(
unsigned char *,
int=-1 );
00477
virtual OGRErr exportToWkb( OGRwkbByteOrder,
unsigned char * )
const;
00478 };
00479
00480
00481
00482
00483
00488 class CPL_DLL OGRSurface :
public OGRGeometry
00489 {
00490
public:
00491
virtual double get_Area()
const = 0;
00492
virtual OGRErr Centroid(
OGRPoint * poPoint )
const = 0;
00493
virtual OGRErr PointOnSurface(
OGRPoint * poPoint )
const = 0;
00494 };
00495
00496
00497
00498
00499
00509 class CPL_DLL OGRPolygon :
public OGRSurface
00510 {
00511
int nRingCount;
00512 OGRLinearRing **papoRings;
00513
00514
public:
00515 OGRPolygon();
00516
virtual ~OGRPolygon();
00517
00518
00519
virtual const char *getGeometryName()
const;
00520
virtual OGRwkbGeometryType getGeometryType()
const;
00521
virtual OGRGeometry *clone()
const;
00522
virtual void empty();
00523
virtual OGRErr transform(
OGRCoordinateTransformation *poCT );
00524
virtual void flattenTo2D();
00525
00526
00527
virtual double get_Area()
const;
00528
virtual int Centroid(
OGRPoint * poPoint )
const;
00529
virtual int PointOnSurface(
OGRPoint * poPoint )
const;
00530
00531
00532
virtual int WkbSize()
const;
00533
virtual OGRErr importFromWkb(
unsigned char *,
int = -1 );
00534
virtual OGRErr exportToWkb( OGRwkbByteOrder,
unsigned char * )
const;
00535
virtual OGRErr importFromWkt(
char ** );
00536
virtual OGRErr exportToWkt(
char ** ppszDstText )
const;
00537
00538
00539
virtual int getDimension()
const;
00540
virtual int getCoordinateDimension()
const;
00541
virtual void getEnvelope(
OGREnvelope * psEnvelope )
const;
00542
00543
00544
virtual OGRBoolean Equal( OGRGeometry * )
const;
00545
00546
00547
void addRing( OGRLinearRing * );
00548
void addRingDirectly( OGRLinearRing * );
00549
00550 OGRLinearRing *getExteriorRing();
00551
const OGRLinearRing *getExteriorRing()
const;
00552
int getNumInteriorRings()
const;
00553 OGRLinearRing *getInteriorRing(
int );
00554
const OGRLinearRing *getInteriorRing(
int )
const;
00555 };
00556
00557
00558
00559
00560
00568 class CPL_DLL OGRGeometryCollection :
public OGRGeometry
00569 {
00570
int nGeomCount;
00571 OGRGeometry **papoGeoms;
00572
00573
int nCoordinateDimension;
00574
00575
public:
00576 OGRGeometryCollection();
00577
virtual ~OGRGeometryCollection();
00578
00579
00580
virtual const char *getGeometryName()
const;
00581
virtual OGRwkbGeometryType getGeometryType()
const;
00582
virtual OGRGeometry *clone()
const;
00583
virtual void empty();
00584
virtual OGRErr transform(
OGRCoordinateTransformation *poCT );
00585
virtual void flattenTo2D();
00586
00587
00588
virtual int WkbSize()
const;
00589
virtual OGRErr importFromWkb(
unsigned char *,
int = -1 );
00590
virtual OGRErr exportToWkb( OGRwkbByteOrder,
unsigned char * )
const;
00591
virtual OGRErr importFromWkt(
char ** );
00592
virtual OGRErr exportToWkt(
char ** ppszDstText )
const;
00593
00594
00595
virtual int getDimension()
const;
00596
virtual int getCoordinateDimension()
const;
00597
virtual void getEnvelope(
OGREnvelope * psEnvelope )
const;
00598
00599
00600
int getNumGeometries()
const;
00601 OGRGeometry *getGeometryRef(
int );
00602
const OGRGeometry *getGeometryRef(
int )
const;
00603
00604
00605
virtual OGRBoolean Equal( OGRGeometry * )
const;
00606
00607
00608
virtual OGRErr addGeometry(
const OGRGeometry * );
00609
virtual OGRErr addGeometryDirectly( OGRGeometry * );
00610
virtual OGRErr removeGeometry(
int iIndex,
int bDelete = TRUE );
00611 };
00612
00613
00614
00615
00616
00624 class CPL_DLL OGRMultiPolygon :
public OGRGeometryCollection
00625 {
00626
public:
00627 OGRMultiPolygon();
00628
00629
virtual const char *getGeometryName()
const;
00630
virtual OGRwkbGeometryType getGeometryType()
const;
00631
virtual OGRGeometry *clone()
const;
00632
virtual OGRErr importFromWkt(
char ** );
00633
virtual OGRErr exportToWkt(
char ** )
const;
00634
00635
00636
virtual OGRErr addGeometryDirectly( OGRGeometry * );
00637 };
00638
00639
00640
00641
00642
00647 class CPL_DLL OGRMultiPoint :
public OGRGeometryCollection
00648 {
00649
private:
00650 OGRErr importFromWkt_Bracketed(
char ** );
00651
00652
public:
00653 OGRMultiPoint();
00654
00655
virtual const char *getGeometryName()
const;
00656
virtual OGRwkbGeometryType getGeometryType()
const;
00657
virtual OGRGeometry *clone()
const;
00658
virtual OGRErr importFromWkt(
char ** );
00659
virtual OGRErr exportToWkt(
char ** )
const;
00660
00661
00662
virtual OGRErr addGeometryDirectly( OGRGeometry * );
00663 };
00664
00665
00666
00667
00668
00673 class CPL_DLL OGRMultiLineString :
public OGRGeometryCollection
00674 {
00675
public:
00676 OGRMultiLineString();
00677 ~OGRMultiLineString();
00678
00679
virtual const char *getGeometryName()
const;
00680
virtual OGRwkbGeometryType getGeometryType()
const;
00681
virtual OGRGeometry *clone()
const;
00682
virtual OGRErr importFromWkt(
char ** );
00683
virtual OGRErr exportToWkt(
char ** )
const;
00684
00685
00686
virtual OGRErr addGeometryDirectly( OGRGeometry * );
00687 };
00688
00689
00690
00691
00692
00693
00698 class CPL_DLL OGRGeometryFactory
00699 {
00700
public:
00701
static OGRErr createFromWkb(
unsigned char *,
OGRSpatialReference *,
00702 OGRGeometry **,
int = -1 );
00703
static OGRErr createFromWkt(
char **,
OGRSpatialReference *,
00704 OGRGeometry ** );
00705
static OGRGeometry *createFromGML(
const char * );
00706
00707
static void destroyGeometry( OGRGeometry * );
00708
static OGRGeometry *createGeometry( OGRwkbGeometryType );
00709
00710
static OGRGeometry * forceToPolygon( OGRGeometry * );
00711
static OGRGeometry * forceToMultiPolygon( OGRGeometry * );
00712
static OGRGeometry * forceToMultiPoint( OGRGeometry * );
00713
static OGRGeometry * forceToMultiLineString( OGRGeometry * );
00714 };
00715
00716
#endif