GEOS
3.3.7
|
00001 /************************************************************************ 00002 * 00003 * $Id: geos_c.h.in 3725 2012-11-15 17:35:24Z strk $ 00004 * 00005 * C-Wrapper for GEOS library 00006 * 00007 * Copyright (C) 2010 2011 Sandro Santilli <strk@keybit.net> 00008 * Copyright (C) 2005 Refractions Research Inc. 00009 * 00010 * This is free software; you can redistribute and/or modify it under 00011 * the terms of the GNU Lesser General Public Licence as published 00012 * by the Free Software Foundation. 00013 * See the COPYING file for more information. 00014 * 00015 * Author: Sandro Santilli <strk@refractions.net> 00016 * 00017 *********************************************************************** 00018 * 00019 * GENERAL NOTES: 00020 * 00021 * - Remember to call initGEOS() before any use of this library's 00022 * functions, and call finishGEOS() when done. 00023 * 00024 * - Currently you have to explicitly GEOSGeom_destroy() all 00025 * GEOSGeom objects to avoid memory leaks, and to GEOSFree() 00026 * all returned char * (unless const). 00027 * 00028 ***********************************************************************/ 00029 00030 #ifndef GEOS_C_H_INCLUDED 00031 #define GEOS_C_H_INCLUDED 00032 00033 #ifndef __cplusplus 00034 # include <stddef.h> /* for size_t definition */ 00035 #else 00036 # include <cstddef> 00037 using std::size_t; 00038 #endif 00039 00040 #ifdef __cplusplus 00041 extern "C" { 00042 #endif 00043 00044 /************************************************************************ 00045 * 00046 * Version 00047 * 00048 ***********************************************************************/ 00049 00050 /* 00051 * Following 'ifdef' hack fixes problem with generating geos_c.h on Windows, 00052 * when building with Visual C++ compiler. 00053 * 00054 */ 00055 #if defined(_MSC_VER) 00056 #include <geos/version.h> 00057 #define GEOS_CAPI_VERSION_MAJOR 1 00058 #define GEOS_CAPI_VERSION_MINOR 7 00059 #define GEOS_CAPI_VERSION_PATCH 7 00060 #define GEOS_CAPI_VERSION "3.3.7-CAPI-1.7.7" 00061 #else 00062 #ifndef GEOS_VERSION_MAJOR 00063 #define GEOS_VERSION_MAJOR 3 00064 #endif 00065 #ifndef GEOS_VERSION_MINOR 00066 #define GEOS_VERSION_MINOR 3 00067 #endif 00068 #ifndef GEOS_VERSION_PATCH 00069 #define GEOS_VERSION_PATCH 7 00070 #endif 00071 #ifndef GEOS_VERSION 00072 #define GEOS_VERSION "3.3.7" 00073 #endif 00074 #ifndef GEOS_JTS_PORT 00075 #define GEOS_JTS_PORT "1.12.0" 00076 #endif 00077 00078 #define GEOS_CAPI_VERSION_MAJOR 1 00079 #define GEOS_CAPI_VERSION_MINOR 7 00080 #define GEOS_CAPI_VERSION_PATCH 7 00081 #define GEOS_CAPI_VERSION "3.3.7-CAPI-1.7.7" 00082 #endif 00083 00084 #define GEOS_CAPI_FIRST_INTERFACE GEOS_CAPI_VERSION_MAJOR 00085 #define GEOS_CAPI_LAST_INTERFACE (GEOS_CAPI_VERSION_MAJOR+GEOS_CAPI_VERSION_MINOR) 00086 00087 /************************************************************************ 00088 * 00089 * (Abstract) type definitions 00090 * 00091 ************************************************************************/ 00092 00093 typedef void (*GEOSMessageHandler)(const char *fmt, ...); 00094 00095 /* When we're included by geos_c.cpp, those are #defined to the original 00096 * JTS definitions via preprocessor. We don't touch them to allow the 00097 * compiler to cross-check the declarations. However, for all "normal" 00098 * C-API users, we need to define them as "opaque" struct pointers, as 00099 * those clients don't have access to the original C++ headers, by design. 00100 */ 00101 #ifndef GEOSGeometry 00102 typedef struct GEOSGeom_t GEOSGeometry; 00103 typedef struct GEOSPrepGeom_t GEOSPreparedGeometry; 00104 typedef struct GEOSCoordSeq_t GEOSCoordSequence; 00105 typedef struct GEOSSTRtree_t GEOSSTRtree; 00106 typedef struct GEOSBufParams_t GEOSBufferParams; 00107 #endif 00108 00109 /* Those are compatibility definitions for source compatibility 00110 * with GEOS 2.X clients relying on that type. 00111 */ 00112 typedef GEOSGeometry* GEOSGeom; 00113 typedef GEOSCoordSequence* GEOSCoordSeq; 00114 00115 /* Supported geometry types 00116 * This was renamed from GEOSGeomTypeId in GEOS 2.2.X, which might 00117 * break compatibility, this issue is still under investigation. 00118 */ 00119 00120 enum GEOSGeomTypes { 00121 GEOS_POINT, 00122 GEOS_LINESTRING, 00123 GEOS_LINEARRING, 00124 GEOS_POLYGON, 00125 GEOS_MULTIPOINT, 00126 GEOS_MULTILINESTRING, 00127 GEOS_MULTIPOLYGON, 00128 GEOS_GEOMETRYCOLLECTION 00129 }; 00130 00131 /* Byte oders exposed via the c api */ 00132 enum GEOSByteOrders { 00133 GEOS_WKB_XDR = 0, /* Big Endian */ 00134 GEOS_WKB_NDR = 1 /* Little Endian */ 00135 }; 00136 00137 typedef struct GEOSContextHandle_HS *GEOSContextHandle_t; 00138 00139 typedef void (*GEOSQueryCallback)(void *item, void *userdata); 00140 00141 /************************************************************************ 00142 * 00143 * Initialization, cleanup, version 00144 * 00145 ***********************************************************************/ 00146 00147 #include <geos/export.h> 00148 00149 extern void GEOS_DLL initGEOS(GEOSMessageHandler notice_function, 00150 GEOSMessageHandler error_function); 00151 extern void GEOS_DLL finishGEOS(void); 00152 00153 extern GEOSContextHandle_t GEOS_DLL initGEOS_r( 00154 GEOSMessageHandler notice_function, 00155 GEOSMessageHandler error_function); 00156 extern void GEOS_DLL finishGEOS_r(GEOSContextHandle_t handle); 00157 00158 extern GEOSMessageHandler GEOS_DLL GEOSContext_setNoticeHandler_r(GEOSContextHandle_t extHandle, 00159 GEOSMessageHandler nf); 00160 extern GEOSMessageHandler GEOS_DLL GEOSContext_setErrorHandler_r(GEOSContextHandle_t extHandle, 00161 GEOSMessageHandler nf); 00162 00163 extern const char GEOS_DLL *GEOSversion(); 00164 00165 00166 /************************************************************************ 00167 * 00168 * NOTE - These functions are DEPRECATED. Please use the new Reader and 00169 * writer APIS! 00170 * 00171 ***********************************************************************/ 00172 00173 extern GEOSGeometry GEOS_DLL *GEOSGeomFromWKT(const char *wkt); 00174 extern char GEOS_DLL *GEOSGeomToWKT(const GEOSGeometry* g); 00175 00176 extern GEOSGeometry GEOS_DLL *GEOSGeomFromWKT_r(GEOSContextHandle_t handle, 00177 const char *wkt); 00178 extern char GEOS_DLL *GEOSGeomToWKT_r(GEOSContextHandle_t handle, 00179 const GEOSGeometry* g); 00180 00181 /* 00182 * Specify whether output WKB should be 2d or 3d. 00183 * Return previously set number of dimensions. 00184 */ 00185 extern int GEOS_DLL GEOS_getWKBOutputDims(); 00186 extern int GEOS_DLL GEOS_setWKBOutputDims(int newDims); 00187 00188 extern int GEOS_DLL GEOS_getWKBOutputDims_r(GEOSContextHandle_t handle); 00189 extern int GEOS_DLL GEOS_setWKBOutputDims_r(GEOSContextHandle_t handle, 00190 int newDims); 00191 00192 /* 00193 * Specify whether the WKB byte order is big or little endian. 00194 * The return value is the previous byte order. 00195 */ 00196 extern int GEOS_DLL GEOS_getWKBByteOrder(); 00197 extern int GEOS_DLL GEOS_setWKBByteOrder(int byteOrder); 00198 00199 extern GEOSGeometry GEOS_DLL *GEOSGeomFromWKB_buf(const unsigned char *wkb, size_t size); 00200 extern unsigned char GEOS_DLL *GEOSGeomToWKB_buf(const GEOSGeometry* g, size_t *size); 00201 00202 extern GEOSGeometry GEOS_DLL *GEOSGeomFromHEX_buf(const unsigned char *hex, size_t size); 00203 extern unsigned char GEOS_DLL *GEOSGeomToHEX_buf(const GEOSGeometry* g, size_t *size); 00204 00205 extern int GEOS_DLL GEOS_getWKBByteOrder_r(GEOSContextHandle_t handle); 00206 extern int GEOS_DLL GEOS_setWKBByteOrder_r(GEOSContextHandle_t handle, 00207 int byteOrder); 00208 00209 extern GEOSGeometry GEOS_DLL *GEOSGeomFromWKB_buf_r(GEOSContextHandle_t handle, 00210 const unsigned char *wkb, 00211 size_t size); 00212 extern unsigned char GEOS_DLL *GEOSGeomToWKB_buf_r(GEOSContextHandle_t handle, 00213 const GEOSGeometry* g, 00214 size_t *size); 00215 00216 extern GEOSGeometry GEOS_DLL *GEOSGeomFromHEX_buf_r(GEOSContextHandle_t handle, 00217 const unsigned char *hex, 00218 size_t size); 00219 extern unsigned char GEOS_DLL *GEOSGeomToHEX_buf_r(GEOSContextHandle_t handle, 00220 const GEOSGeometry* g, 00221 size_t *size); 00222 00223 /************************************************************************ 00224 * 00225 * Coordinate Sequence functions 00226 * 00227 ***********************************************************************/ 00228 00229 /* 00230 * Create a Coordinate sequence with ``size'' coordinates 00231 * of ``dims'' dimensions. 00232 * Return NULL on exception. 00233 */ 00234 extern GEOSCoordSequence GEOS_DLL *GEOSCoordSeq_create(unsigned int size, unsigned int dims); 00235 00236 extern GEOSCoordSequence GEOS_DLL *GEOSCoordSeq_create_r( 00237 GEOSContextHandle_t handle, 00238 unsigned int size, 00239 unsigned int dims); 00240 00241 /* 00242 * Clone a Coordinate Sequence. 00243 * Return NULL on exception. 00244 */ 00245 extern GEOSCoordSequence GEOS_DLL *GEOSCoordSeq_clone(const GEOSCoordSequence* s); 00246 00247 extern GEOSCoordSequence GEOS_DLL *GEOSCoordSeq_clone_r( 00248 GEOSContextHandle_t handle, 00249 const GEOSCoordSequence* s); 00250 00251 /* 00252 * Destroy a Coordinate Sequence. 00253 */ 00254 extern void GEOS_DLL GEOSCoordSeq_destroy(GEOSCoordSequence* s); 00255 00256 extern void GEOS_DLL GEOSCoordSeq_destroy_r(GEOSContextHandle_t handle, 00257 GEOSCoordSequence* s); 00258 00259 /* 00260 * Set ordinate values in a Coordinate Sequence. 00261 * Return 0 on exception. 00262 */ 00263 extern int GEOS_DLL GEOSCoordSeq_setX(GEOSCoordSequence* s, 00264 unsigned int idx, double val); 00265 extern int GEOS_DLL GEOSCoordSeq_setY(GEOSCoordSequence* s, 00266 unsigned int idx, double val); 00267 extern int GEOS_DLL GEOSCoordSeq_setZ(GEOSCoordSequence* s, 00268 unsigned int idx, double val); 00269 extern int GEOS_DLL GEOSCoordSeq_setOrdinate(GEOSCoordSequence* s, 00270 unsigned int idx, unsigned int dim, double val); 00271 00272 extern int GEOS_DLL GEOSCoordSeq_setX_r(GEOSContextHandle_t handle, 00273 GEOSCoordSequence* s, unsigned int idx, 00274 double val); 00275 extern int GEOS_DLL GEOSCoordSeq_setY_r(GEOSContextHandle_t handle, 00276 GEOSCoordSequence* s, unsigned int idx, 00277 double val); 00278 extern int GEOS_DLL GEOSCoordSeq_setZ_r(GEOSContextHandle_t handle, 00279 GEOSCoordSequence* s, unsigned int idx, 00280 double val); 00281 extern int GEOS_DLL GEOSCoordSeq_setOrdinate_r(GEOSContextHandle_t handle, 00282 GEOSCoordSequence* s, 00283 unsigned int idx, 00284 unsigned int dim, double val); 00285 00286 /* 00287 * Get ordinate values from a Coordinate Sequence. 00288 * Return 0 on exception. 00289 */ 00290 extern int GEOS_DLL GEOSCoordSeq_getX(const GEOSCoordSequence* s, 00291 unsigned int idx, double *val); 00292 extern int GEOS_DLL GEOSCoordSeq_getY(const GEOSCoordSequence* s, 00293 unsigned int idx, double *val); 00294 extern int GEOS_DLL GEOSCoordSeq_getZ(const GEOSCoordSequence* s, 00295 unsigned int idx, double *val); 00296 extern int GEOS_DLL GEOSCoordSeq_getOrdinate(const GEOSCoordSequence* s, 00297 unsigned int idx, unsigned int dim, double *val); 00298 00299 extern int GEOS_DLL GEOSCoordSeq_getX_r(GEOSContextHandle_t handle, 00300 const GEOSCoordSequence* s, 00301 unsigned int idx, double *val); 00302 extern int GEOS_DLL GEOSCoordSeq_getY_r(GEOSContextHandle_t handle, 00303 const GEOSCoordSequence* s, 00304 unsigned int idx, double *val); 00305 extern int GEOS_DLL GEOSCoordSeq_getZ_r(GEOSContextHandle_t handle, 00306 const GEOSCoordSequence* s, 00307 unsigned int idx, double *val); 00308 extern int GEOS_DLL GEOSCoordSeq_getOrdinate_r(GEOSContextHandle_t handle, 00309 const GEOSCoordSequence* s, 00310 unsigned int idx, 00311 unsigned int dim, double *val); 00312 /* 00313 * Get size and dimensions info from a Coordinate Sequence. 00314 * Return 0 on exception. 00315 */ 00316 extern int GEOS_DLL GEOSCoordSeq_getSize(const GEOSCoordSequence* s, 00317 unsigned int *size); 00318 extern int GEOS_DLL GEOSCoordSeq_getDimensions(const GEOSCoordSequence* s, 00319 unsigned int *dims); 00320 00321 extern int GEOS_DLL GEOSCoordSeq_getSize_r(GEOSContextHandle_t handle, 00322 const GEOSCoordSequence* s, 00323 unsigned int *size); 00324 extern int GEOS_DLL GEOSCoordSeq_getDimensions_r(GEOSContextHandle_t handle, 00325 const GEOSCoordSequence* s, 00326 unsigned int *dims); 00327 00328 /************************************************************************ 00329 * 00330 * Linearref functions -- there are more, but these two are probably 00331 * sufficient for most purposes 00332 * 00333 ***********************************************************************/ 00334 00335 /* 00336 * GEOSGeometry ownership is retained by caller 00337 */ 00338 00339 00340 /* Return distance of point 'p' projected on 'g' from origin 00341 * of 'g'. Geometry 'g' must be a lineal geometry */ 00342 extern double GEOS_DLL GEOSProject(const GEOSGeometry *g, 00343 const GEOSGeometry* p); 00344 extern double GEOS_DLL GEOSProject_r(GEOSContextHandle_t handle, 00345 const GEOSGeometry *g, 00346 const GEOSGeometry *p); 00347 00348 /* Return closest point to given distance within geometry 00349 * Geometry must be a LineString */ 00350 extern GEOSGeometry GEOS_DLL *GEOSInterpolate(const GEOSGeometry *g, 00351 double d); 00352 extern GEOSGeometry GEOS_DLL *GEOSInterpolate_r(GEOSContextHandle_t handle, 00353 const GEOSGeometry *g, 00354 double d); 00355 00356 extern double GEOS_DLL GEOSProjectNormalized(const GEOSGeometry *g, 00357 const GEOSGeometry* p); 00358 extern double GEOS_DLL GEOSProjectNormalized_r(GEOSContextHandle_t handle, 00359 const GEOSGeometry *g, 00360 const GEOSGeometry *p); 00361 00362 extern GEOSGeometry GEOS_DLL *GEOSInterpolateNormalized(const GEOSGeometry *g, 00363 double d); 00364 extern GEOSGeometry GEOS_DLL *GEOSInterpolateNormalized_r( 00365 GEOSContextHandle_t handle, 00366 const GEOSGeometry *g, 00367 double d); 00368 00369 /************************************************************************ 00370 * 00371 * Buffer related functions 00372 * 00373 ***********************************************************************/ 00374 00375 enum GEOSBufCapStyles { 00376 GEOSBUF_CAP_ROUND=1, 00377 GEOSBUF_CAP_FLAT=2, 00378 GEOSBUF_CAP_SQUARE=3 00379 }; 00380 00381 enum GEOSBufJoinStyles { 00382 GEOSBUF_JOIN_ROUND=1, 00383 GEOSBUF_JOIN_MITRE=2, 00384 GEOSBUF_JOIN_BEVEL=3 00385 }; 00386 00387 /* @return 0 on exception */ 00388 extern GEOSBufferParams GEOS_DLL *GEOSBufferParams_create(); 00389 extern GEOSBufferParams GEOS_DLL *GEOSBufferParams_create_r( 00390 GEOSContextHandle_t handle); 00391 extern void GEOS_DLL GEOSBufferParams_destroy(GEOSBufferParams* parms); 00392 extern void GEOS_DLL GEOSBufferParams_destroy_r( 00393 GEOSContextHandle_t handle, 00394 GEOSBufferParams* parms); 00395 00396 /* @return 0 on exception */ 00397 extern int GEOS_DLL GEOSBufferParams_setEndCapStyle( 00398 GEOSBufferParams* p, 00399 int style); 00400 extern int GEOS_DLL GEOSBufferParams_setEndCapStyle_r( 00401 GEOSContextHandle_t handle, 00402 GEOSBufferParams* p, 00403 int style); 00404 00405 /* @return 0 on exception */ 00406 extern int GEOS_DLL GEOSBufferParams_setJoinStyle( 00407 GEOSBufferParams* p, 00408 int joinStyle); 00409 extern int GEOS_DLL GEOSBufferParams_setJoinStyle_r( 00410 GEOSContextHandle_t handle, 00411 GEOSBufferParams* p, 00412 int joinStyle); 00413 00414 /* @return 0 on exception */ 00415 extern int GEOS_DLL GEOSBufferParams_setMitreLimit( 00416 GEOSBufferParams* p, 00417 double mitreLimit); 00418 extern int GEOS_DLL GEOSBufferParams_setMitreLimit_r( 00419 GEOSContextHandle_t handle, 00420 GEOSBufferParams* p, 00421 double mitreLimit); 00422 00423 /* @return 0 on exception */ 00424 extern int GEOS_DLL GEOSBufferParams_setQuadrantSegments( 00425 GEOSBufferParams* p, 00426 int quadSegs); 00427 extern int GEOS_DLL GEOSBufferParams_setQuadrantSegments_r( 00428 GEOSContextHandle_t handle, 00429 GEOSBufferParams* p, 00430 int quadSegs); 00431 00432 /* @param singleSided: 1 for single sided, 0 otherwise */ 00433 /* @return 0 on exception */ 00434 extern int GEOS_DLL GEOSBufferParams_setSingleSided( 00435 GEOSBufferParams* p, 00436 int singleSided); 00437 extern int GEOS_DLL GEOSBufferParams_setSingleSided_r( 00438 GEOSContextHandle_t handle, 00439 GEOSBufferParams* p, 00440 int singleSided); 00441 00442 /* @return NULL on exception. */ 00443 extern GEOSGeometry GEOS_DLL *GEOSBufferWithParams( 00444 const GEOSGeometry* g1, 00445 const GEOSBufferParams* p, 00446 double width); 00447 extern GEOSGeometry GEOS_DLL *GEOSBufferWithParams_r( 00448 GEOSContextHandle_t handle, 00449 const GEOSGeometry* g1, 00450 const GEOSBufferParams* p, 00451 double width); 00452 00453 /* These functions return NULL on exception. */ 00454 extern GEOSGeometry GEOS_DLL *GEOSBuffer(const GEOSGeometry* g1, 00455 double width, int quadsegs); 00456 extern GEOSGeometry GEOS_DLL *GEOSBuffer_r(GEOSContextHandle_t handle, 00457 const GEOSGeometry* g1, 00458 double width, int quadsegs); 00459 00460 /* These functions return NULL on exception. */ 00461 extern GEOSGeometry GEOS_DLL *GEOSBufferWithStyle(const GEOSGeometry* g1, 00462 double width, int quadsegs, int endCapStyle, int joinStyle, 00463 double mitreLimit); 00464 extern GEOSGeometry GEOS_DLL *GEOSBufferWithStyle_r(GEOSContextHandle_t handle, 00465 const GEOSGeometry* g1, double width, int quadsegs, int endCapStyle, 00466 int joinStyle, double mitreLimit); 00467 00468 /* These functions return NULL on exception. Only LINESTRINGs are accepted. */ 00469 /* @deprecated in 3.3.0: use GEOSOffsetCurve instead */ 00470 extern GEOSGeometry GEOS_DLL *GEOSSingleSidedBuffer(const GEOSGeometry* g1, 00471 double width, int quadsegs, int joinStyle, double mitreLimit, 00472 int leftSide); 00473 extern GEOSGeometry GEOS_DLL *GEOSSingleSidedBuffer_r( 00474 GEOSContextHandle_t handle, 00475 const GEOSGeometry* g1, double width, int quadsegs, 00476 int joinStyle, double mitreLimit, int leftSide); 00477 00478 /* 00479 * Only LINESTRINGs are accepted. 00480 * @param width : offset distance. 00481 * negative for right side offset. 00482 * positive for left side offset. 00483 * @return NULL on exception 00484 */ 00485 extern GEOSGeometry GEOS_DLL *GEOSOffsetCurve(const GEOSGeometry* g1, 00486 double width, int quadsegs, int joinStyle, double mitreLimit); 00487 extern GEOSGeometry GEOS_DLL *GEOSOffsetCurve_r(GEOSContextHandle_t handle, 00488 const GEOSGeometry* g1, double width, int quadsegs, 00489 int joinStyle, double mitreLimit); 00490 00491 00492 /************************************************************************ 00493 * 00494 * Geometry Constructors. 00495 * GEOSCoordSequence* arguments will become ownership of the returned object. 00496 * All functions return NULL on exception. 00497 * 00498 ***********************************************************************/ 00499 00500 extern GEOSGeometry GEOS_DLL *GEOSGeom_createPoint(GEOSCoordSequence* s); 00501 extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyPoint(); 00502 extern GEOSGeometry GEOS_DLL *GEOSGeom_createLinearRing(GEOSCoordSequence* s); 00503 extern GEOSGeometry GEOS_DLL *GEOSGeom_createLineString(GEOSCoordSequence* s); 00504 extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyLineString(); 00505 00506 extern GEOSGeometry GEOS_DLL *GEOSGeom_createPoint_r( 00507 GEOSContextHandle_t handle, 00508 GEOSCoordSequence* s); 00509 extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyPoint_r( 00510 GEOSContextHandle_t handle); 00511 extern GEOSGeometry GEOS_DLL *GEOSGeom_createLinearRing_r( 00512 GEOSContextHandle_t handle, 00513 GEOSCoordSequence* s); 00514 extern GEOSGeometry GEOS_DLL *GEOSGeom_createLineString_r( 00515 GEOSContextHandle_t handle, 00516 GEOSCoordSequence* s); 00517 extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyLineString_r( 00518 GEOSContextHandle_t handle); 00519 00520 /* 00521 * Second argument is an array of GEOSGeometry* objects. 00522 * The caller remains owner of the array, but pointed-to 00523 * objects become ownership of the returned GEOSGeometry. 00524 */ 00525 extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyPolygon(); 00526 extern GEOSGeometry GEOS_DLL *GEOSGeom_createPolygon(GEOSGeometry* shell, 00527 GEOSGeometry** holes, unsigned int nholes); 00528 extern GEOSGeometry GEOS_DLL *GEOSGeom_createCollection(int type, 00529 GEOSGeometry* *geoms, unsigned int ngeoms); 00530 extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyCollection(int type); 00531 00532 extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyPolygon_r( 00533 GEOSContextHandle_t handle); 00534 extern GEOSGeometry GEOS_DLL *GEOSGeom_createPolygon_r( 00535 GEOSContextHandle_t handle, 00536 GEOSGeometry* shell, 00537 GEOSGeometry** holes, 00538 unsigned int nholes); 00539 extern GEOSGeometry GEOS_DLL *GEOSGeom_createCollection_r( 00540 GEOSContextHandle_t handle, int type, 00541 GEOSGeometry* *geoms, 00542 unsigned int ngeoms); 00543 extern GEOSGeometry GEOS_DLL *GEOSGeom_createEmptyCollection_r( 00544 GEOSContextHandle_t handle, int type); 00545 00546 extern GEOSGeometry GEOS_DLL *GEOSGeom_clone(const GEOSGeometry* g); 00547 00548 extern GEOSGeometry GEOS_DLL *GEOSGeom_clone_r(GEOSContextHandle_t handle, 00549 const GEOSGeometry* g); 00550 00551 /************************************************************************ 00552 * 00553 * Memory management 00554 * 00555 ***********************************************************************/ 00556 00557 extern void GEOS_DLL GEOSGeom_destroy(GEOSGeometry* g); 00558 00559 extern void GEOS_DLL GEOSGeom_destroy_r(GEOSContextHandle_t handle, 00560 GEOSGeometry* g); 00561 00562 /************************************************************************ 00563 * 00564 * Topology operations - return NULL on exception. 00565 * 00566 ***********************************************************************/ 00567 00568 extern GEOSGeometry GEOS_DLL *GEOSEnvelope(const GEOSGeometry* g1); 00569 extern GEOSGeometry GEOS_DLL *GEOSIntersection(const GEOSGeometry* g1, const GEOSGeometry* g2); 00570 extern GEOSGeometry GEOS_DLL *GEOSConvexHull(const GEOSGeometry* g1); 00571 extern GEOSGeometry GEOS_DLL *GEOSDifference(const GEOSGeometry* g1, const GEOSGeometry* g2); 00572 extern GEOSGeometry GEOS_DLL *GEOSSymDifference(const GEOSGeometry* g1, 00573 const GEOSGeometry* g2); 00574 extern GEOSGeometry GEOS_DLL *GEOSBoundary(const GEOSGeometry* g1); 00575 extern GEOSGeometry GEOS_DLL *GEOSUnion(const GEOSGeometry* g1, const GEOSGeometry* g2); 00576 extern GEOSGeometry GEOS_DLL *GEOSUnaryUnion(const GEOSGeometry* g1); 00577 00578 /* @deprecated in 3.3.0: use GEOSUnaryUnion instead */ 00579 extern GEOSGeometry GEOS_DLL *GEOSUnionCascaded(const GEOSGeometry* g1); 00580 extern GEOSGeometry GEOS_DLL *GEOSUnionCascaded_r(GEOSContextHandle_t handle, const GEOSGeometry* g1); 00581 00582 extern GEOSGeometry GEOS_DLL *GEOSPointOnSurface(const GEOSGeometry* g1); 00583 extern GEOSGeometry GEOS_DLL *GEOSGetCentroid(const GEOSGeometry* g); 00584 00585 extern GEOSGeometry GEOS_DLL *GEOSEnvelope_r(GEOSContextHandle_t handle, 00586 const GEOSGeometry* g1); 00587 extern GEOSGeometry GEOS_DLL *GEOSIntersection_r(GEOSContextHandle_t handle, 00588 const GEOSGeometry* g1, 00589 const GEOSGeometry* g2); 00590 extern GEOSGeometry GEOS_DLL *GEOSConvexHull_r(GEOSContextHandle_t handle, 00591 const GEOSGeometry* g1); 00592 extern GEOSGeometry GEOS_DLL *GEOSDifference_r(GEOSContextHandle_t handle, 00593 const GEOSGeometry* g1, 00594 const GEOSGeometry* g2); 00595 extern GEOSGeometry GEOS_DLL *GEOSSymDifference_r(GEOSContextHandle_t handle, 00596 const GEOSGeometry* g1, 00597 const GEOSGeometry* g2); 00598 extern GEOSGeometry GEOS_DLL *GEOSBoundary_r(GEOSContextHandle_t handle, 00599 const GEOSGeometry* g1); 00600 extern GEOSGeometry GEOS_DLL *GEOSUnion_r(GEOSContextHandle_t handle, 00601 const GEOSGeometry* g1, 00602 const GEOSGeometry* g2); 00603 extern GEOSGeometry GEOS_DLL *GEOSUnaryUnion_r(GEOSContextHandle_t handle, 00604 const GEOSGeometry* g); 00605 extern GEOSGeometry GEOS_DLL *GEOSPointOnSurface_r(GEOSContextHandle_t handle, 00606 const GEOSGeometry* g1); 00607 extern GEOSGeometry GEOS_DLL *GEOSGetCentroid_r(GEOSContextHandle_t handle, 00608 const GEOSGeometry* g); 00609 00610 /* 00611 * all arguments remain ownership of the caller 00612 * (both Geometries and pointers) 00613 */ 00614 extern GEOSGeometry GEOS_DLL *GEOSPolygonize(const GEOSGeometry * const geoms[], unsigned int ngeoms); 00615 extern GEOSGeometry GEOS_DLL *GEOSPolygonizer_getCutEdges(const GEOSGeometry * const geoms[], unsigned int ngeoms); 00616 /* 00617 * Polygonizes a set of Geometrys which contain linework that 00618 * represents the edges of a planar graph. 00619 * 00620 * Any dimension of Geometry is handled - the constituent linework 00621 * is extracted to form the edges. 00622 * 00623 * The edges must be correctly noded; that is, they must only meet 00624 * at their endpoints. 00625 * The Polygonizer will still run on incorrectly noded input 00626 * but will not form polygons from incorrected noded edges. 00627 * 00628 * The Polygonizer reports the follow kinds of errors: 00629 * 00630 * - Dangles - edges which have one or both ends which are 00631 * not incident on another edge endpoint 00632 * - Cut Edges - edges which are connected at both ends but 00633 * which do not form part of polygon 00634 * - Invalid Ring Lines - edges which form rings which are invalid 00635 * (e.g. the component lines contain a self-intersection) 00636 * 00637 * Errors are reported to output parameters "cuts", "dangles" and 00638 * "invalid" (if not-null). Formed polygons are returned as a 00639 * collection. NULL is returned on exception. All returned 00640 * geometries must be destroyed by caller. 00641 * 00642 */ 00643 extern GEOSGeometry GEOS_DLL *GEOSPolygonize_full(const GEOSGeometry* input, 00644 GEOSGeometry** cuts, GEOSGeometry** dangles, GEOSGeometry** invalid); 00645 00646 extern GEOSGeometry GEOS_DLL *GEOSLineMerge(const GEOSGeometry* g); 00647 extern GEOSGeometry GEOS_DLL *GEOSSimplify(const GEOSGeometry* g1, double tolerance); 00648 extern GEOSGeometry GEOS_DLL *GEOSTopologyPreserveSimplify(const GEOSGeometry* g1, 00649 double tolerance); 00650 00651 extern GEOSGeometry GEOS_DLL *GEOSPolygonize_r(GEOSContextHandle_t handle, 00652 const GEOSGeometry *const geoms[], 00653 unsigned int ngeoms); 00654 extern GEOSGeometry GEOS_DLL *GEOSPolygonizer_getCutEdges_r( 00655 GEOSContextHandle_t handle, 00656 const GEOSGeometry * const geoms[], 00657 unsigned int ngeoms); 00658 extern GEOSGeometry GEOS_DLL *GEOSPolygonize_full_r(GEOSContextHandle_t handle, 00659 const GEOSGeometry* input, GEOSGeometry** cuts, 00660 GEOSGeometry** dangles, GEOSGeometry** invalidRings); 00661 00662 extern GEOSGeometry GEOS_DLL *GEOSLineMerge_r(GEOSContextHandle_t handle, 00663 const GEOSGeometry* g); 00664 extern GEOSGeometry GEOS_DLL *GEOSSimplify_r(GEOSContextHandle_t handle, 00665 const GEOSGeometry* g1, 00666 double tolerance); 00667 extern GEOSGeometry GEOS_DLL *GEOSTopologyPreserveSimplify_r( 00668 GEOSContextHandle_t handle, 00669 const GEOSGeometry* g1, double tolerance); 00670 00671 /* 00672 * Return all distinct vertices of input geometry as a MULTIPOINT. 00673 * Note that only 2 dimensions of the vertices are considered when 00674 * testing for equality. 00675 */ 00676 extern GEOSGeometry GEOS_DLL *GEOSGeom_extractUniquePoints( 00677 const GEOSGeometry* g); 00678 extern GEOSGeometry GEOS_DLL *GEOSGeom_extractUniquePoints_r( 00679 GEOSContextHandle_t handle, 00680 const GEOSGeometry* g); 00681 00682 /* 00683 * Find paths shared between the two given lineal geometries. 00684 * 00685 * Returns a GEOMETRYCOLLECTION having two elements: 00686 * - first element is a MULTILINESTRING containing shared paths 00687 * having the _same_ direction on both inputs 00688 * - second element is a MULTILINESTRING containing shared paths 00689 * having the _opposite_ direction on the two inputs 00690 * 00691 * Returns NULL on exception 00692 */ 00693 extern GEOSGeometry GEOS_DLL *GEOSSharedPaths(const GEOSGeometry* g1, 00694 const GEOSGeometry* g2); 00695 extern GEOSGeometry GEOS_DLL *GEOSSharedPaths_r(GEOSContextHandle_t handle, 00696 const GEOSGeometry* g1, const GEOSGeometry* g2); 00697 00698 /* 00699 * Snap first geometry on to second with given tolerance 00700 * Returns a newly allocated geometry, or NULL on exception 00701 */ 00702 extern GEOSGeometry GEOS_DLL *GEOSSnap(const GEOSGeometry* g1, 00703 const GEOSGeometry* g2, double tolerance); 00704 extern GEOSGeometry GEOS_DLL *GEOSSnap_r(GEOSContextHandle_t handle, 00705 const GEOSGeometry* g1, const GEOSGeometry* g2, double tolerance); 00706 00707 /************************************************************************ 00708 * 00709 * Binary predicates - return 2 on exception, 1 on true, 0 on false 00710 * 00711 ***********************************************************************/ 00712 00713 extern char GEOS_DLL GEOSDisjoint(const GEOSGeometry* g1, const GEOSGeometry* g2); 00714 extern char GEOS_DLL GEOSTouches(const GEOSGeometry* g1, const GEOSGeometry* g2); 00715 extern char GEOS_DLL GEOSIntersects(const GEOSGeometry* g1, const GEOSGeometry* g2); 00716 extern char GEOS_DLL GEOSCrosses(const GEOSGeometry* g1, const GEOSGeometry* g2); 00717 extern char GEOS_DLL GEOSWithin(const GEOSGeometry* g1, const GEOSGeometry* g2); 00718 extern char GEOS_DLL GEOSContains(const GEOSGeometry* g1, const GEOSGeometry* g2); 00719 extern char GEOS_DLL GEOSOverlaps(const GEOSGeometry* g1, const GEOSGeometry* g2); 00720 extern char GEOS_DLL GEOSEquals(const GEOSGeometry* g1, const GEOSGeometry* g2); 00721 extern char GEOS_DLL GEOSEqualsExact(const GEOSGeometry* g1, const GEOSGeometry* g2, double tolerance); 00722 extern char GEOS_DLL GEOSCovers(const GEOSGeometry* g1, const GEOSGeometry* g2); 00723 extern char GEOS_DLL GEOSCoveredBy(const GEOSGeometry* g1, const GEOSGeometry* g2); 00724 00725 extern char GEOS_DLL GEOSDisjoint_r(GEOSContextHandle_t handle, 00726 const GEOSGeometry* g1, 00727 const GEOSGeometry* g2); 00728 extern char GEOS_DLL GEOSTouches_r(GEOSContextHandle_t handle, 00729 const GEOSGeometry* g1, 00730 const GEOSGeometry* g2); 00731 extern char GEOS_DLL GEOSIntersects_r(GEOSContextHandle_t handle, 00732 const GEOSGeometry* g1, 00733 const GEOSGeometry* g2); 00734 extern char GEOS_DLL GEOSCrosses_r(GEOSContextHandle_t handle, 00735 const GEOSGeometry* g1, 00736 const GEOSGeometry* g2); 00737 extern char GEOS_DLL GEOSWithin_r(GEOSContextHandle_t handle, 00738 const GEOSGeometry* g1, 00739 const GEOSGeometry* g2); 00740 extern char GEOS_DLL GEOSContains_r(GEOSContextHandle_t handle, 00741 const GEOSGeometry* g1, 00742 const GEOSGeometry* g2); 00743 extern char GEOS_DLL GEOSOverlaps_r(GEOSContextHandle_t handle, 00744 const GEOSGeometry* g1, 00745 const GEOSGeometry* g2); 00746 extern char GEOS_DLL GEOSEquals_r(GEOSContextHandle_t handle, 00747 const GEOSGeometry* g1, 00748 const GEOSGeometry* g2); 00749 extern char GEOS_DLL GEOSEqualsExact_r(GEOSContextHandle_t handle, 00750 const GEOSGeometry* g1, 00751 const GEOSGeometry* g2, 00752 double tolerance); 00753 extern char GEOS_DLL GEOSCovers_r(GEOSContextHandle_t handle, 00754 const GEOSGeometry* g1, 00755 const GEOSGeometry* g2); 00756 extern char GEOS_DLL GEOSCoveredBy_r(GEOSContextHandle_t handle, 00757 const GEOSGeometry* g1, 00758 const GEOSGeometry* g2); 00759 00760 /************************************************************************ 00761 * 00762 * Prepared Geometry Binary predicates - return 2 on exception, 1 on true, 0 on false 00763 * 00764 ***********************************************************************/ 00765 00766 /* 00767 * GEOSGeometry ownership is retained by caller 00768 */ 00769 extern const GEOSPreparedGeometry GEOS_DLL *GEOSPrepare(const GEOSGeometry* g); 00770 00771 extern void GEOS_DLL GEOSPreparedGeom_destroy(const GEOSPreparedGeometry* g); 00772 00773 extern char GEOS_DLL GEOSPreparedContains(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); 00774 extern char GEOS_DLL GEOSPreparedContainsProperly(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); 00775 extern char GEOS_DLL GEOSPreparedCoveredBy(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); 00776 extern char GEOS_DLL GEOSPreparedCovers(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); 00777 extern char GEOS_DLL GEOSPreparedCrosses(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); 00778 extern char GEOS_DLL GEOSPreparedDisjoint(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); 00779 extern char GEOS_DLL GEOSPreparedIntersects(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); 00780 extern char GEOS_DLL GEOSPreparedOverlaps(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); 00781 extern char GEOS_DLL GEOSPreparedTouches(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); 00782 extern char GEOS_DLL GEOSPreparedWithin(const GEOSPreparedGeometry* pg1, const GEOSGeometry* g2); 00783 00784 /* 00785 * GEOSGeometry ownership is retained by caller 00786 */ 00787 extern const GEOSPreparedGeometry GEOS_DLL *GEOSPrepare_r( 00788 GEOSContextHandle_t handle, 00789 const GEOSGeometry* g); 00790 00791 extern void GEOS_DLL GEOSPreparedGeom_destroy_r(GEOSContextHandle_t handle, 00792 const GEOSPreparedGeometry* g); 00793 00794 extern char GEOS_DLL GEOSPreparedContains_r(GEOSContextHandle_t handle, 00795 const GEOSPreparedGeometry* pg1, 00796 const GEOSGeometry* g2); 00797 extern char GEOS_DLL GEOSPreparedContainsProperly_r(GEOSContextHandle_t handle, 00798 const GEOSPreparedGeometry* pg1, 00799 const GEOSGeometry* g2); 00800 extern char GEOS_DLL GEOSPreparedCoveredBy_r(GEOSContextHandle_t handle, 00801 const GEOSPreparedGeometry* pg1, 00802 const GEOSGeometry* g2); 00803 extern char GEOS_DLL GEOSPreparedCovers_r(GEOSContextHandle_t handle, 00804 const GEOSPreparedGeometry* pg1, 00805 const GEOSGeometry* g2); 00806 extern char GEOS_DLL GEOSPreparedCrosses_r(GEOSContextHandle_t handle, 00807 const GEOSPreparedGeometry* pg1, 00808 const GEOSGeometry* g2); 00809 extern char GEOS_DLL GEOSPreparedDisjoint_r(GEOSContextHandle_t handle, 00810 const GEOSPreparedGeometry* pg1, 00811 const GEOSGeometry* g2); 00812 extern char GEOS_DLL GEOSPreparedIntersects_r(GEOSContextHandle_t handle, 00813 const GEOSPreparedGeometry* pg1, 00814 const GEOSGeometry* g2); 00815 extern char GEOS_DLL GEOSPreparedOverlaps_r(GEOSContextHandle_t handle, 00816 const GEOSPreparedGeometry* pg1, 00817 const GEOSGeometry* g2); 00818 extern char GEOS_DLL GEOSPreparedTouches_r(GEOSContextHandle_t handle, 00819 const GEOSPreparedGeometry* pg1, 00820 const GEOSGeometry* g2); 00821 extern char GEOS_DLL GEOSPreparedWithin_r(GEOSContextHandle_t handle, 00822 const GEOSPreparedGeometry* pg1, 00823 const GEOSGeometry* g2); 00824 00825 /************************************************************************ 00826 * 00827 * STRtree functions 00828 * 00829 ***********************************************************************/ 00830 00831 /* 00832 * GEOSGeometry ownership is retained by caller 00833 */ 00834 00835 extern GEOSSTRtree GEOS_DLL *GEOSSTRtree_create(size_t nodeCapacity); 00836 extern void GEOS_DLL GEOSSTRtree_insert(GEOSSTRtree *tree, 00837 const GEOSGeometry *g, 00838 void *item); 00839 extern void GEOS_DLL GEOSSTRtree_query(GEOSSTRtree *tree, 00840 const GEOSGeometry *g, 00841 GEOSQueryCallback callback, 00842 void *userdata); 00843 extern void GEOS_DLL GEOSSTRtree_iterate(GEOSSTRtree *tree, 00844 GEOSQueryCallback callback, 00845 void *userdata); 00846 extern char GEOS_DLL GEOSSTRtree_remove(GEOSSTRtree *tree, 00847 const GEOSGeometry *g, 00848 void *item); 00849 extern void GEOS_DLL GEOSSTRtree_destroy(GEOSSTRtree *tree); 00850 00851 00852 extern GEOSSTRtree GEOS_DLL *GEOSSTRtree_create_r( 00853 GEOSContextHandle_t handle, 00854 size_t nodeCapacity); 00855 extern void GEOS_DLL GEOSSTRtree_insert_r(GEOSContextHandle_t handle, 00856 GEOSSTRtree *tree, 00857 const GEOSGeometry *g, 00858 void *item); 00859 extern void GEOS_DLL GEOSSTRtree_query_r(GEOSContextHandle_t handle, 00860 GEOSSTRtree *tree, 00861 const GEOSGeometry *g, 00862 GEOSQueryCallback callback, 00863 void *userdata); 00864 extern void GEOS_DLL GEOSSTRtree_iterate_r(GEOSContextHandle_t handle, 00865 GEOSSTRtree *tree, 00866 GEOSQueryCallback callback, 00867 void *userdata); 00868 extern char GEOS_DLL GEOSSTRtree_remove_r(GEOSContextHandle_t handle, 00869 GEOSSTRtree *tree, 00870 const GEOSGeometry *g, 00871 void *item); 00872 extern void GEOS_DLL GEOSSTRtree_destroy_r(GEOSContextHandle_t handle, 00873 GEOSSTRtree *tree); 00874 00875 00876 /************************************************************************ 00877 * 00878 * Unary predicate - return 2 on exception, 1 on true, 0 on false 00879 * 00880 ***********************************************************************/ 00881 00882 extern char GEOS_DLL GEOSisEmpty(const GEOSGeometry* g1); 00883 extern char GEOS_DLL GEOSisSimple(const GEOSGeometry* g1); 00884 extern char GEOS_DLL GEOSisRing(const GEOSGeometry* g1); 00885 extern char GEOS_DLL GEOSHasZ(const GEOSGeometry* g1); 00886 extern char GEOS_DLL GEOSisClosed(const GEOSGeometry *g1); 00887 00888 extern char GEOS_DLL GEOSisEmpty_r(GEOSContextHandle_t handle, 00889 const GEOSGeometry* g1); 00890 extern char GEOS_DLL GEOSisSimple_r(GEOSContextHandle_t handle, 00891 const GEOSGeometry* g1); 00892 extern char GEOS_DLL GEOSisRing_r(GEOSContextHandle_t handle, 00893 const GEOSGeometry* g1); 00894 extern char GEOS_DLL GEOSHasZ_r(GEOSContextHandle_t handle, 00895 const GEOSGeometry* g1); 00896 extern char GEOS_DLL GEOSisClosed_r(GEOSContextHandle_t handle, 00897 const GEOSGeometry *g1); 00898 00899 /************************************************************************ 00900 * 00901 * Dimensionally Extended 9 Intersection Model related 00902 * 00903 ***********************************************************************/ 00904 00905 /* These are for use with GEOSRelateBoundaryNodeRule (flags param) */ 00906 enum GEOSRelateBoundaryNodeRules { 00907 /* MOD2 and OGC are the same rule, and is the default 00908 * used by GEOSRelatePattern 00909 */ 00910 GEOSRELATE_BNR_MOD2=1, 00911 GEOSRELATE_BNR_OGC=1, 00912 GEOSRELATE_BNR_ENDPOINT=2, 00913 GEOSRELATE_BNR_MULTIVALENT_ENDPOINT=3, 00914 GEOSRELATE_BNR_MONOVALENT_ENDPOINT=4 00915 }; 00916 00917 /* return 2 on exception, 1 on true, 0 on false */ 00918 extern char GEOS_DLL GEOSRelatePattern(const GEOSGeometry* g1, const GEOSGeometry* g2, const char *pat); 00919 extern char GEOS_DLL GEOSRelatePattern_r(GEOSContextHandle_t handle, 00920 const GEOSGeometry* g1, 00921 const GEOSGeometry* g2, 00922 const char *pat); 00923 00924 /* return NULL on exception, a string to GEOSFree otherwise */ 00925 extern char GEOS_DLL *GEOSRelate(const GEOSGeometry* g1, const GEOSGeometry* g2); 00926 extern char GEOS_DLL *GEOSRelate_r(GEOSContextHandle_t handle, 00927 const GEOSGeometry* g1, 00928 const GEOSGeometry* g2); 00929 00930 /* return 2 on exception, 1 on true, 0 on false */ 00931 extern char GEOS_DLL GEOSRelatePatternMatch(const char* mat, const char *pat); 00932 extern char GEOS_DLL GEOSRelatePatternMatch_r(GEOSContextHandle_t handle, 00933 const char* mat, 00934 const char *pat); 00935 00936 /* return NULL on exception, a string to GEOSFree otherwise */ 00937 extern char GEOS_DLL *GEOSRelateBoundaryNodeRule(const GEOSGeometry* g1, 00938 const GEOSGeometry* g2, 00939 int bnr); 00940 extern char GEOS_DLL *GEOSRelateBoundaryNodeRule_r(GEOSContextHandle_t handle, 00941 const GEOSGeometry* g1, 00942 const GEOSGeometry* g2, 00943 int bnr); 00944 00945 /************************************************************************ 00946 * 00947 * Validity checking 00948 * 00949 ***********************************************************************/ 00950 00951 /* These are for use with GEOSisValidDetail (flags param) */ 00952 enum GEOSValidFlags { 00953 GEOSVALID_ALLOW_SELFTOUCHING_RING_FORMING_HOLE=1 00954 }; 00955 00956 /* return 2 on exception, 1 on true, 0 on false */ 00957 extern char GEOS_DLL GEOSisValid(const GEOSGeometry* g1); 00958 extern char GEOS_DLL GEOSisValid_r(GEOSContextHandle_t handle, 00959 const GEOSGeometry* g1); 00960 00961 /* return NULL on exception, a string to GEOSFree otherwise */ 00962 extern char GEOS_DLL *GEOSisValidReason(const GEOSGeometry *g1); 00963 extern char GEOS_DLL *GEOSisValidReason_r(GEOSContextHandle_t handle, 00964 const GEOSGeometry* g1); 00965 00966 /* 00967 * Caller has the responsibility to destroy 'reason' (GEOSFree) 00968 * and 'location' (GEOSGeom_destroy) params 00969 * return 2 on exception, 1 when valid, 0 when invalid 00970 */ 00971 extern char GEOS_DLL GEOSisValidDetail(const GEOSGeometry* g, 00972 int flags, 00973 char** reason, GEOSGeometry** location); 00974 extern char GEOS_DLL GEOSisValidDetail_r(GEOSContextHandle_t handle, 00975 const GEOSGeometry* g, 00976 int flags, 00977 char** reason, 00978 GEOSGeometry** location); 00979 00980 /************************************************************************ 00981 * 00982 * Geometry info 00983 * 00984 ***********************************************************************/ 00985 00986 /* Return NULL on exception, result must be freed by caller. */ 00987 extern char GEOS_DLL *GEOSGeomType(const GEOSGeometry* g1); 00988 00989 extern char GEOS_DLL *GEOSGeomType_r(GEOSContextHandle_t handle, 00990 const GEOSGeometry* g1); 00991 00992 /* Return -1 on exception */ 00993 extern int GEOS_DLL GEOSGeomTypeId(const GEOSGeometry* g1); 00994 00995 extern int GEOS_DLL GEOSGeomTypeId_r(GEOSContextHandle_t handle, 00996 const GEOSGeometry* g1); 00997 00998 /* Return 0 on exception */ 00999 extern int GEOS_DLL GEOSGetSRID(const GEOSGeometry* g); 01000 extern int GEOS_DLL GEOSGetSRID_r(GEOSContextHandle_t handle, 01001 const GEOSGeometry* g); 01002 01003 extern void GEOS_DLL GEOSSetSRID(GEOSGeometry* g, int SRID); 01004 extern void GEOS_DLL GEOSSetSRID_r(GEOSContextHandle_t handle, 01005 GEOSGeometry* g, int SRID); 01006 01007 /* May be called on all geometries in GEOS 3.x, returns -1 on error and 1 01008 * for non-multi geometries. Older GEOS versions only accept 01009 * GeometryCollections or Multi* geometries here, and are likely to crash 01010 * when feeded simple geometries, so beware if you need compatibility with 01011 * old GEOS versions. 01012 */ 01013 extern int GEOS_DLL GEOSGetNumGeometries(const GEOSGeometry* g); 01014 01015 extern int GEOS_DLL GEOSGetNumGeometries_r(GEOSContextHandle_t handle, 01016 const GEOSGeometry* g); 01017 01018 /* 01019 * Return NULL on exception. 01020 * Returned object is a pointer to internal storage: 01021 * it must NOT be destroyed directly. 01022 * Up to GEOS 3.2.0 the input geometry must be a Collection, in 01023 * later version it doesn't matter (getGeometryN(0) for a single will 01024 * return the input). 01025 */ 01026 extern const GEOSGeometry GEOS_DLL *GEOSGetGeometryN(const GEOSGeometry* g, int n); 01027 01028 extern const GEOSGeometry GEOS_DLL *GEOSGetGeometryN_r( 01029 GEOSContextHandle_t handle, 01030 const GEOSGeometry* g, int n); 01031 01032 /* Return -1 on exception */ 01033 extern int GEOS_DLL GEOSNormalize(GEOSGeometry* g1); 01034 01035 extern int GEOS_DLL GEOSNormalize_r(GEOSContextHandle_t handle, 01036 GEOSGeometry* g1); 01037 01038 /* Return -1 on exception */ 01039 extern int GEOS_DLL GEOSGetNumInteriorRings(const GEOSGeometry* g1); 01040 01041 extern int GEOS_DLL GEOSGetNumInteriorRings_r(GEOSContextHandle_t handle, 01042 const GEOSGeometry* g1); 01043 01044 /* Return -1 on exception, Geometry must be a LineString. */ 01045 extern int GEOS_DLL GEOSGeomGetNumPoints(const GEOSGeometry* g1); 01046 01047 extern int GEOS_DLL GEOSGeomGetNumPoints_r(GEOSContextHandle_t handle, 01048 const GEOSGeometry* g1); 01049 01050 /* Return -1 on exception, Geometry must be a Point. */ 01051 extern int GEOS_DLL GEOSGeomGetX(const GEOSGeometry *g1, double *x); 01052 extern int GEOS_DLL GEOSGeomGetY(const GEOSGeometry *g1, double *y); 01053 01054 extern int GEOS_DLL GEOSGeomGetX_r(GEOSContextHandle_t handle, const GEOSGeometry *g1, double *x); 01055 extern int GEOS_DLL GEOSGeomGetY_r(GEOSContextHandle_t handle, const GEOSGeometry *g1, double *y); 01056 01057 /* 01058 * Return NULL on exception, Geometry must be a Polygon. 01059 * Returned object is a pointer to internal storage: 01060 * it must NOT be destroyed directly. 01061 */ 01062 extern const GEOSGeometry GEOS_DLL *GEOSGetInteriorRingN(const GEOSGeometry* g, int n); 01063 01064 extern const GEOSGeometry GEOS_DLL *GEOSGetInteriorRingN_r( 01065 GEOSContextHandle_t handle, 01066 const GEOSGeometry* g, int n); 01067 01068 /* 01069 * Return NULL on exception, Geometry must be a Polygon. 01070 * Returned object is a pointer to internal storage: 01071 * it must NOT be destroyed directly. 01072 */ 01073 extern const GEOSGeometry GEOS_DLL *GEOSGetExteriorRing(const GEOSGeometry* g); 01074 01075 extern const GEOSGeometry GEOS_DLL *GEOSGetExteriorRing_r( 01076 GEOSContextHandle_t handle, 01077 const GEOSGeometry* g); 01078 01079 /* Return -1 on exception */ 01080 extern int GEOS_DLL GEOSGetNumCoordinates(const GEOSGeometry* g1); 01081 01082 extern int GEOS_DLL GEOSGetNumCoordinates_r(GEOSContextHandle_t handle, 01083 const GEOSGeometry* g1); 01084 01085 /* 01086 * Return NULL on exception. 01087 * Geometry must be a LineString, LinearRing or Point. 01088 */ 01089 extern const GEOSCoordSequence GEOS_DLL *GEOSGeom_getCoordSeq(const GEOSGeometry* g); 01090 01091 extern const GEOSCoordSequence GEOS_DLL *GEOSGeom_getCoordSeq_r( 01092 GEOSContextHandle_t handle, 01093 const GEOSGeometry* g); 01094 01095 /* 01096 * Return 0 on exception (or empty geometry) 01097 */ 01098 extern int GEOS_DLL GEOSGeom_getDimensions(const GEOSGeometry* g); 01099 01100 extern int GEOS_DLL GEOSGeom_getDimensions_r(GEOSContextHandle_t handle, 01101 const GEOSGeometry* g); 01102 01103 /* 01104 * Return 2 or 3. 01105 */ 01106 extern int GEOS_DLL GEOSGeom_getCoordinateDimension(const GEOSGeometry* g); 01107 01108 extern int GEOS_DLL GEOSGeom_getCoordinateDimension_r(GEOSContextHandle_t handle, 01109 const GEOSGeometry* g); 01110 01111 /* 01112 * Return NULL on exception. 01113 * Must be LineString and must be freed by called. 01114 */ 01115 extern GEOSGeometry GEOS_DLL *GEOSGeomGetPointN(const GEOSGeometry *g1, int n); 01116 extern GEOSGeometry GEOS_DLL *GEOSGeomGetStartPoint(const GEOSGeometry *g1); 01117 extern GEOSGeometry GEOS_DLL *GEOSGeomGetEndPoint(const GEOSGeometry *g1); 01118 01119 extern GEOSGeometry GEOS_DLL *GEOSGeomGetPointN_r(GEOSContextHandle_t handle, const GEOSGeometry *g1, int n); 01120 extern GEOSGeometry GEOS_DLL *GEOSGeomGetStartPoint_r(GEOSContextHandle_t handle, const GEOSGeometry *g1); 01121 extern GEOSGeometry GEOS_DLL *GEOSGeomGetEndPoint_r(GEOSContextHandle_t handle, const GEOSGeometry *g1); 01122 01123 /************************************************************************ 01124 * 01125 * Misc functions 01126 * 01127 ***********************************************************************/ 01128 01129 /* Return 0 on exception, 1 otherwise */ 01130 extern int GEOS_DLL GEOSArea(const GEOSGeometry* g1, double *area); 01131 extern int GEOS_DLL GEOSLength(const GEOSGeometry* g1, double *length); 01132 extern int GEOS_DLL GEOSDistance(const GEOSGeometry* g1, const GEOSGeometry* g2, 01133 double *dist); 01134 extern int GEOS_DLL GEOSHausdorffDistance(const GEOSGeometry *g1, 01135 const GEOSGeometry *g2, double *dist); 01136 extern int GEOS_DLL GEOSHausdorffDistanceDensify(const GEOSGeometry *g1, 01137 const GEOSGeometry *g2, double densifyFrac, double *dist); 01138 extern int GEOS_DLL GEOSGeomGetLength(const GEOSGeometry *g1, double *length); 01139 extern int GEOS_DLL GEOSArea_r(GEOSContextHandle_t handle, 01140 const GEOSGeometry* g1, double *area); 01141 extern int GEOS_DLL GEOSLength_r(GEOSContextHandle_t handle, 01142 const GEOSGeometry* g1, double *length); 01143 extern int GEOS_DLL GEOSDistance_r(GEOSContextHandle_t handle, 01144 const GEOSGeometry* g1, 01145 const GEOSGeometry* g2, double *dist); 01146 extern int GEOS_DLL GEOSHausdorffDistance_r(GEOSContextHandle_t handle, 01147 const GEOSGeometry *g1, 01148 const GEOSGeometry *g2, 01149 double *dist); 01150 extern int GEOS_DLL GEOSHausdorffDistanceDensify_r(GEOSContextHandle_t handle, 01151 const GEOSGeometry *g1, 01152 const GEOSGeometry *g2, 01153 double densifyFrac, double *dist); 01154 extern int GEOS_DLL GEOSGeomGetLength_r(GEOSContextHandle_t handle, 01155 const GEOSGeometry *g1, double *length); 01156 01157 /************************************************************************ 01158 * 01159 * Algorithms 01160 * 01161 ***********************************************************************/ 01162 01163 /* Walking from A to B: 01164 * return -1 if reaching P takes a counter-clockwise (left) turn 01165 * return 1 if reaching P takes a clockwise (right) turn 01166 * return 0 if P is collinear with A-B 01167 * 01168 * On exceptions, return 2. 01169 * 01170 */ 01171 extern int GEOS_DLL GEOSOrientationIndex(double Ax, double Ay, double Bx, double By, 01172 double Px, double Py); 01173 extern int GEOS_DLL GEOSOrientationIndex_r(GEOSContextHandle_t handle, 01174 double Ax, double Ay, double Bx, double By, double Px, double Py); 01175 01176 01177 /************************************************************************ 01178 * 01179 * Reader and Writer APIs 01180 * 01181 ***********************************************************************/ 01182 01183 typedef struct GEOSWKTReader_t GEOSWKTReader; 01184 typedef struct GEOSWKTWriter_t GEOSWKTWriter; 01185 typedef struct GEOSWKBReader_t GEOSWKBReader; 01186 typedef struct GEOSWKBWriter_t GEOSWKBWriter; 01187 01188 01189 /* WKT Reader */ 01190 extern GEOSWKTReader GEOS_DLL *GEOSWKTReader_create(); 01191 extern void GEOS_DLL GEOSWKTReader_destroy(GEOSWKTReader* reader); 01192 extern GEOSGeometry GEOS_DLL *GEOSWKTReader_read(GEOSWKTReader* reader, const char *wkt); 01193 01194 extern GEOSWKTReader GEOS_DLL *GEOSWKTReader_create_r( 01195 GEOSContextHandle_t handle); 01196 extern void GEOS_DLL GEOSWKTReader_destroy_r(GEOSContextHandle_t handle, 01197 GEOSWKTReader* reader); 01198 extern GEOSGeometry GEOS_DLL *GEOSWKTReader_read_r(GEOSContextHandle_t handle, 01199 GEOSWKTReader* reader, 01200 const char *wkt); 01201 01202 /* WKT Writer */ 01203 extern GEOSWKTWriter GEOS_DLL *GEOSWKTWriter_create(); 01204 extern void GEOS_DLL GEOSWKTWriter_destroy(GEOSWKTWriter* writer); 01205 extern char GEOS_DLL *GEOSWKTWriter_write(GEOSWKTWriter* reader, const GEOSGeometry* g); 01206 extern void GEOS_DLL GEOSWKTWriter_setTrim(GEOSWKTWriter *writer, char trim); 01207 extern void GEOS_DLL GEOSWKTWriter_setRoundingPrecision(GEOSWKTWriter *writer, int precision); 01208 extern void GEOS_DLL GEOSWKTWriter_setOutputDimension(GEOSWKTWriter *writer, int dim); 01209 extern int GEOS_DLL GEOSWKTWriter_getOutputDimension(GEOSWKTWriter *writer); 01210 extern void GEOS_DLL GEOSWKTWriter_setOld3D(GEOSWKTWriter *writer, int useOld3D); 01211 01212 extern GEOSWKTWriter GEOS_DLL *GEOSWKTWriter_create_r( 01213 GEOSContextHandle_t handle); 01214 extern void GEOS_DLL GEOSWKTWriter_destroy_r(GEOSContextHandle_t handle, 01215 GEOSWKTWriter* writer); 01216 extern char GEOS_DLL *GEOSWKTWriter_write_r(GEOSContextHandle_t handle, 01217 GEOSWKTWriter* reader, 01218 const GEOSGeometry* g); 01219 extern void GEOS_DLL GEOSWKTWriter_setTrim_r(GEOSContextHandle_t handle, 01220 GEOSWKTWriter *writer, 01221 char trim); 01222 extern void GEOS_DLL GEOSWKTWriter_setRoundingPrecision_r(GEOSContextHandle_t handle, 01223 GEOSWKTWriter *writer, 01224 int precision); 01225 extern void GEOS_DLL GEOSWKTWriter_setOutputDimension_r(GEOSContextHandle_t handle, 01226 GEOSWKTWriter *writer, 01227 int dim); 01228 extern int GEOS_DLL GEOSWKTWriter_getOutputDimension_r(GEOSContextHandle_t handle, 01229 GEOSWKTWriter *writer); 01230 extern void GEOS_DLL GEOSWKTWriter_setOld3D_r(GEOSContextHandle_t handle, 01231 GEOSWKTWriter *writer, 01232 int useOld3D); 01233 01234 /* WKB Reader */ 01235 extern GEOSWKBReader GEOS_DLL *GEOSWKBReader_create(); 01236 extern void GEOS_DLL GEOSWKBReader_destroy(GEOSWKBReader* reader); 01237 extern GEOSGeometry GEOS_DLL *GEOSWKBReader_read(GEOSWKBReader* reader, const unsigned char *wkb, size_t size); 01238 extern GEOSGeometry GEOS_DLL *GEOSWKBReader_readHEX(GEOSWKBReader* reader, const unsigned char *hex, size_t size); 01239 01240 extern GEOSWKBReader GEOS_DLL *GEOSWKBReader_create_r( 01241 GEOSContextHandle_t handle); 01242 extern void GEOS_DLL GEOSWKBReader_destroy_r(GEOSContextHandle_t handle, 01243 GEOSWKBReader* reader); 01244 extern GEOSGeometry GEOS_DLL *GEOSWKBReader_read_r(GEOSContextHandle_t handle, 01245 GEOSWKBReader* reader, 01246 const unsigned char *wkb, 01247 size_t size); 01248 extern GEOSGeometry GEOS_DLL *GEOSWKBReader_readHEX_r( 01249 GEOSContextHandle_t handle, 01250 GEOSWKBReader* reader, 01251 const unsigned char *hex, 01252 size_t size); 01253 01254 /* WKB Writer */ 01255 extern GEOSWKBWriter GEOS_DLL *GEOSWKBWriter_create(); 01256 extern void GEOS_DLL GEOSWKBWriter_destroy(GEOSWKBWriter* writer); 01257 01258 extern GEOSWKBWriter GEOS_DLL *GEOSWKBWriter_create_r( 01259 GEOSContextHandle_t handle); 01260 extern void GEOS_DLL GEOSWKBWriter_destroy_r(GEOSContextHandle_t handle, 01261 GEOSWKBWriter* writer); 01262 01263 /* The caller owns the results for these two methods! */ 01264 extern unsigned char GEOS_DLL *GEOSWKBWriter_write(GEOSWKBWriter* writer, const GEOSGeometry* g, size_t *size); 01265 extern unsigned char GEOS_DLL *GEOSWKBWriter_writeHEX(GEOSWKBWriter* writer, const GEOSGeometry* g, size_t *size); 01266 01267 extern unsigned char GEOS_DLL *GEOSWKBWriter_write_r( 01268 GEOSContextHandle_t handle, 01269 GEOSWKBWriter* writer, 01270 const GEOSGeometry* g, 01271 size_t *size); 01272 extern unsigned char GEOS_DLL *GEOSWKBWriter_writeHEX_r( 01273 GEOSContextHandle_t handle, 01274 GEOSWKBWriter* writer, 01275 const GEOSGeometry* g, 01276 size_t *size); 01277 01278 /* 01279 * Specify whether output WKB should be 2d or 3d. 01280 * Return previously set number of dimensions. 01281 */ 01282 extern int GEOS_DLL GEOSWKBWriter_getOutputDimension(const GEOSWKBWriter* writer); 01283 extern void GEOS_DLL GEOSWKBWriter_setOutputDimension(GEOSWKBWriter* writer, int newDimension); 01284 01285 extern int GEOS_DLL GEOSWKBWriter_getOutputDimension_r( 01286 GEOSContextHandle_t handle, 01287 const GEOSWKBWriter* writer); 01288 extern void GEOS_DLL GEOSWKBWriter_setOutputDimension_r( 01289 GEOSContextHandle_t handle, 01290 GEOSWKBWriter* writer, int newDimension); 01291 01292 /* 01293 * Specify whether the WKB byte order is big or little endian. 01294 * The return value is the previous byte order. 01295 */ 01296 extern int GEOS_DLL GEOSWKBWriter_getByteOrder(const GEOSWKBWriter* writer); 01297 extern void GEOS_DLL GEOSWKBWriter_setByteOrder(GEOSWKBWriter* writer, int byteOrder); 01298 01299 extern int GEOS_DLL GEOSWKBWriter_getByteOrder_r(GEOSContextHandle_t handle, 01300 const GEOSWKBWriter* writer); 01301 extern void GEOS_DLL GEOSWKBWriter_setByteOrder_r(GEOSContextHandle_t handle, 01302 GEOSWKBWriter* writer, 01303 int byteOrder); 01304 01305 /* 01306 * Specify whether SRID values should be output. 01307 */ 01308 extern char GEOS_DLL GEOSWKBWriter_getIncludeSRID(const GEOSWKBWriter* writer); 01309 extern void GEOS_DLL GEOSWKBWriter_setIncludeSRID(GEOSWKBWriter* writer, const char writeSRID); 01310 01311 extern char GEOS_DLL GEOSWKBWriter_getIncludeSRID_r(GEOSContextHandle_t handle, 01312 const GEOSWKBWriter* writer); 01313 extern void GEOS_DLL GEOSWKBWriter_setIncludeSRID_r(GEOSContextHandle_t handle, 01314 GEOSWKBWriter* writer, const char writeSRID); 01315 01316 01317 /* 01318 * Free buffers returned by stuff like GEOSWKBWriter_write(), 01319 * GEOSWKBWriter_writeHEX() and GEOSWKTWriter_write(). 01320 */ 01321 extern void GEOS_DLL GEOSFree( void *buffer ); 01322 extern void GEOS_DLL GEOSFree_r( GEOSContextHandle_t handle, void *buffer ); 01323 01324 #ifdef __cplusplus 01325 } // extern "C" 01326 #endif 01327 01328 #endif /* #ifndef GEOS_C_H_INCLUDED */