SpatiaLite  4.0.0-RC1
 All Data Structures Files Functions Variables Typedefs Macros Pages
gg_core.h
Go to the documentation of this file.
1 /*
2  gg_core.h -- Gaia common support for geometries: core functions
3 
4  version 4.0, 2012 August 6
5 
6  Author: Sandro Furieri a.furieri@lqt.it
7 
8  ------------------------------------------------------------------------------
9 
10  Version: MPL 1.1/GPL 2.0/LGPL 2.1
11 
12  The contents of this file are subject to the Mozilla Public License Version
13  1.1 (the "License"); you may not use this file except in compliance with
14  the License. You may obtain a copy of the License at
15  http://www.mozilla.org/MPL/
16 
17 Software distributed under the License is distributed on an "AS IS" basis,
18 WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
19 for the specific language governing rights and limitations under the
20 License.
21 
22 The Original Code is the SpatiaLite library
23 
24 The Initial Developer of the Original Code is Alessandro Furieri
25 
26 Portions created by the Initial Developer are Copyright (C) 2008-2012
27 the Initial Developer. All Rights Reserved.
28 
29 Contributor(s):
30 
31 
32 Alternatively, the contents of this file may be used under the terms of
33 either the GNU General Public License Version 2 or later (the "GPL"), or
34 the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
35 in which case the provisions of the GPL or the LGPL are applicable instead
36 of those above. If you wish to allow use of your version of this file only
37 under the terms of either the GPL or the LGPL, and not to allow others to
38 use your version of this file under the terms of the MPL, indicate your
39 decision by deleting the provisions above and replace them with the notice
40 and other provisions required by the GPL or the LGPL. If you do not delete
41 the provisions above, a recipient may use your version of this file under
42 the terms of any one of the MPL, the GPL or the LGPL.
43 
44 */
45 
46 
53 #ifndef _GG_CORE_H
54 #ifndef DOXYGEN_SHOULD_SKIP_THIS
55 #define _GG_CORE_H
56 #endif
57 
58 #ifdef __cplusplus
59 extern "C"
60 {
61 #endif
62 
63 /* function prototypes */
64 
75  GAIAGEO_DECLARE void gaiaFree (void *ptr);
76 
92  GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPoint (double x, double y);
93 
110  GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYZ (double x, double y,
111  double z);
112 
129  GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYM (double x, double y,
130  double m);
131 
149  GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYZM (double x, double y,
150  double z, double m);
151 
163  GAIAGEO_DECLARE void gaiaFreePoint (gaiaPointPtr ptr);
164 
180  GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestring (int vert);
181 
197  GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYZ (int vert);
198 
214  GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYM (int vert);
215 
231  GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYZM (int vert);
232 
245  GAIAGEO_DECLARE void gaiaFreeLinestring (gaiaLinestringPtr ptr);
246 
259  GAIAGEO_DECLARE void gaiaCopyLinestringCoords (gaiaLinestringPtr dst,
260  gaiaLinestringPtr src);
261 
274  GAIAGEO_DECLARE void gaiaCopyLinestringCoordsReverse (gaiaLinestringPtr dst,
276  src);
277 
293  GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRing (int vert);
294 
310  GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYZ (int vert);
311 
327  GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYM (int vert);
328 
344  GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYZM (int vert);
345 
358  GAIAGEO_DECLARE void gaiaFreeRing (gaiaRingPtr ptr);
359 
372  GAIAGEO_DECLARE void gaiaCopyRingCoords (gaiaRingPtr dst, gaiaRingPtr src);
373 
386  GAIAGEO_DECLARE void gaiaCopyRingCoordsReverse (gaiaRingPtr dst,
387  gaiaRingPtr src);
388 
404  GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygon (int vert, int holes);
405 
421  GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYZ (int vert, int holes);
422 
438  GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYM (int vert, int holes);
439 
455  GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYZM (int vert, int holes);
456 
475  GAIAGEO_DECLARE gaiaPolygonPtr gaiaCreatePolygon (gaiaRingPtr ring);
476 
492  GAIAGEO_DECLARE void gaiaFreePolygon (gaiaPolygonPtr polyg);
493 
506  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomColl (void);
507 
520  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYZ (void);
521 
534  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYM (void);
535 
548  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYZM (void);
549 
565  GAIAGEO_DECLARE void gaiaFreeGeomColl (gaiaGeomCollPtr geom);
566 
577  GAIAGEO_DECLARE void gaiaAddPointToGeomColl (gaiaGeomCollPtr p, double x,
578  double y);
579 
591  GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYZ (gaiaGeomCollPtr p, double x,
592  double y, double z);
593 
605  GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYM (gaiaGeomCollPtr p, double x,
606  double y, double m);
607 
620  GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYZM (gaiaGeomCollPtr p,
621  double x, double y,
622  double z, double m);
623 
635  GAIAGEO_DECLARE gaiaLinestringPtr
637 
647  GAIAGEO_DECLARE void gaiaInsertLinestringInGeomColl (gaiaGeomCollPtr p,
649  line);
650 
664  int vert,
665  int interiors);
666 
682  p,
684  ring);
685 
701  GAIAGEO_DECLARE gaiaRingPtr gaiaAddInteriorRing (gaiaPolygonPtr p, int pos,
702  int vert);
703 
717  GAIAGEO_DECLARE void gaiaInsertInteriorRing (gaiaPolygonPtr p,
718  gaiaRingPtr ring);
719 
732  GAIAGEO_DECLARE void gaiaAddRingToPolyg (gaiaPolygonPtr polyg,
733  gaiaRingPtr ring);
734 
749  line);
765  GAIAGEO_DECLARE gaiaLinestringPtr
767 
781  GAIAGEO_DECLARE gaiaRingPtr gaiaCloneRing (gaiaRingPtr ring);
782 
798  GAIAGEO_DECLARE gaiaRingPtr gaiaCloneRingSpecial (gaiaRingPtr ring,
799  int mode);
800 
814  GAIAGEO_DECLARE gaiaPolygonPtr gaiaClonePolygon (gaiaPolygonPtr polyg);
815 
833  polyg, int mode);
834 
851  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomColl (gaiaGeomCollPtr geom);
852 
871  geom, int mode);
872 
889  geom);
890 
905  GAIAGEO_DECLARE gaiaGeomCollPtr
907 
923  geom);
924 
939 
954  geom);
955 
970  geom);
971 
986  geom);
987 
1012  GAIAGEO_DECLARE int gaiaLineGetPoint (gaiaLinestringPtr ln, int v,
1013  double *x, double *y, double *z,
1014  double *m);
1015 
1040  GAIAGEO_DECLARE int gaiaLineSetPoint (gaiaLinestringPtr ln, int v, double x,
1041  double y, double z, double m);
1042 
1067  GAIAGEO_DECLARE int gaiaRingGetPoint (gaiaRingPtr rng, int v, double *x,
1068  double *y, double *z, double *m);
1069 
1094  GAIAGEO_DECLARE int gaiaRingSetPoint (gaiaRingPtr rng, int v, double x,
1095  double y, double z, double m);
1096 
1110  GAIAGEO_DECLARE int gaiaDimension (gaiaGeomCollPtr geom);
1111 
1130  GAIAGEO_DECLARE int gaiaGeometryType (gaiaGeomCollPtr geom);
1131 
1148  GAIAGEO_DECLARE int gaiaGeometryAliasType (gaiaGeomCollPtr geom);
1149 
1160  GAIAGEO_DECLARE int gaiaIsEmpty (gaiaGeomCollPtr geom);
1161 
1178  GAIAGEO_DECLARE int gaiaIsToxic (gaiaGeomCollPtr geom);
1179 
1195  GAIAGEO_DECLARE int gaiaIsNotClosedRing (gaiaRingPtr ring);
1196 
1209  GAIAGEO_DECLARE int gaiaIsNotClosedGeomColl (gaiaGeomCollPtr geom);
1210 
1229  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaSanitize (gaiaGeomCollPtr org);
1230 
1231 
1248  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLinearize (gaiaGeomCollPtr geom,
1249  int force_multi);
1250 
1267  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaDissolveSegments (gaiaGeomCollPtr geom);
1268 
1285  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaDissolvePoints (gaiaGeomCollPtr geom);
1286 
1303  GAIAGEO_DECLARE gaiaGeomCollPtr
1305 
1322  GAIAGEO_DECLARE gaiaGeomCollPtr
1324 
1341  GAIAGEO_DECLARE gaiaGeomCollPtr
1343 
1359  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMergeGeometries (gaiaGeomCollPtr geom1,
1360  gaiaGeomCollPtr geom2);
1361 
1380  GAIAGEO_DECLARE gaiaGeomCollPtr
1381  gaiaLocateBetweenMeasures (gaiaGeomCollPtr geom, double m_start,
1382  double m_end);
1383 
1401  GAIAGEO_DECLARE double gaiaMeasureLength (int dims, double *coords,
1402  int vert);
1403 
1415  GAIAGEO_DECLARE double gaiaMeasureArea (gaiaRingPtr ring);
1416 
1428  GAIAGEO_DECLARE void gaiaRingCentroid (gaiaRingPtr ring, double *rx,
1429  double *ry);
1430 
1439  GAIAGEO_DECLARE void gaiaClockwise (gaiaRingPtr p);
1440 
1450  GAIAGEO_DECLARE int gaiaIsPointOnRingSurface (gaiaRingPtr ring, double pt_x,
1451  double pt_y);
1452 
1462  GAIAGEO_DECLARE int gaiaIsPointOnPolygonSurface (gaiaPolygonPtr polyg,
1463  double x, double y);
1464 
1480  GAIAGEO_DECLARE double gaiaMinDistance (double x0, double y0,
1481  int dims, double *coords, int vert);
1482 
1500  GAIAGEO_DECLARE int gaiaIntersect (double *x0, double *y0, double x1,
1501  double y1, double x2, double y2,
1502  double x3, double y3, double x4,
1503  double y4);
1504 
1515  GAIAGEO_DECLARE void gaiaShiftCoords (gaiaGeomCollPtr geom, double shift_x,
1516  double shift_y);
1517 
1529  GAIAGEO_DECLARE void gaiaShiftCoords3D (gaiaGeomCollPtr geom,
1530  double shift_x, double shift_y,
1531  double shift_z);
1532 
1546  GAIAGEO_DECLARE void gaiaShiftLongitude (gaiaGeomCollPtr geom);
1547 
1559  GAIAGEO_DECLARE void gaiaNormalizeLonLat (gaiaGeomCollPtr geom);
1560 
1561 
1571  GAIAGEO_DECLARE void gaiaScaleCoords (gaiaGeomCollPtr geom, double scale_x,
1572  double scale_y);
1573 
1582  GAIAGEO_DECLARE void gaiaRotateCoords (gaiaGeomCollPtr geom, double angle);
1583 
1595  GAIAGEO_DECLARE void gaiaReflectCoords (gaiaGeomCollPtr geom, int x_axis,
1596  int y_axis);
1597 
1607  GAIAGEO_DECLARE void gaiaSwapCoords (gaiaGeomCollPtr geom);
1608 
1623  GAIAGEO_DECLARE int gaiaLinestringEquals (gaiaLinestringPtr line1,
1624  gaiaLinestringPtr line2);
1625 
1641  GAIAGEO_DECLARE int gaiaPolygonEquals (gaiaPolygonPtr polyg1,
1642  gaiaPolygonPtr polyg2);
1643 
1663  GAIAGEO_DECLARE int gaiaEllipseParams (const char *name, double *a,
1664  double *b, double *rf);
1665 
1684  GAIAGEO_DECLARE double gaiaGreatCircleDistance (double a, double b,
1685  double lat1, double lon1,
1686  double lat2, double lon2);
1687 
1707  GAIAGEO_DECLARE double gaiaGeodesicDistance (double a, double b, double rf,
1708  double lat1, double lon1,
1709  double lat2, double lon2);
1710 
1731  GAIAGEO_DECLARE double gaiaGreatCircleTotalLength (double a, double b,
1732  int dims, double *coords,
1733  int vert);
1734 
1756  GAIAGEO_DECLARE double gaiaGeodesicTotalLength (double a, double b,
1757  double rf, int dims,
1758  double *coords, int vert);
1759 
1774  GAIAGEO_DECLARE int gaiaConvertLength (double value, int unit_from,
1775  int unit_to, double *cvt);
1776 
1777 #ifdef __cplusplus
1778 }
1779 #endif
1780 
1781 #endif /* _GG_CORE_H */