SpatiaLite  5.0.0
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 5.0, 2020 August 1
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-2020
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 /* constant values for gaiaGeodesicArcLength return_type */
64 
66 #define GAIA_GEODESIC_ARC_LENGTH_DEGREES 0
67 
69 #define GAIA_GEODESIC_ARC_LENGTH_METERS 1
70 
72 #define GAIA_GEODESIC_CHORD_LENGTH_DEGREES 2
73 
75 #define GAIA_GEODESIC_CHORD_LENGTH_METERS 3
76 
78 #define GAIA_GEODESIC_CENTRAL_ANGLE_RADIANS 4
79 
81 #define GAIA_GEODESIC_CENTRAL_ANGLE_DEGREES 5
82 
84 #define GAIA_GEODESIC_ARC_AREA_METERS 6
85 
87 #define GAIA_GEODESIC_ARC_HEIGHT_METERS 7
88 
89 
90 /* function prototypes */
91 
102  GAIAGEO_DECLARE void gaiaFree (void *ptr);
103 
119  GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPoint (double x, double y);
120 
137  GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYZ (double x, double y,
138  double z);
139 
156  GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYM (double x, double y,
157  double m);
158 
176  GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYZM (double x, double y,
177  double z, double m);
178 
190  GAIAGEO_DECLARE void gaiaFreePoint (gaiaPointPtr ptr);
191 
207  GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestring (int vert);
208 
224  GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYZ (int vert);
225 
241  GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYM (int vert);
242 
258  GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYZM (int vert);
259 
272  GAIAGEO_DECLARE void gaiaFreeLinestring (gaiaLinestringPtr ptr);
273 
286  GAIAGEO_DECLARE void gaiaCopyLinestringCoords (gaiaLinestringPtr dst,
287  gaiaLinestringPtr src);
288 
303  GAIAGEO_DECLARE void gaiaCopyLinestringCoordsEx (gaiaLinestringPtr dst,
304  gaiaLinestringPtr src,
305  double z_no_data,
306  double m_no_data);
307 
321  dst,
323  src);
324 
340  GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRing (int vert);
341 
357  GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYZ (int vert);
358 
374  GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYM (int vert);
375 
391  GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYZM (int vert);
392 
405  GAIAGEO_DECLARE void gaiaFreeRing (gaiaRingPtr ptr);
406 
419  GAIAGEO_DECLARE void gaiaCopyRingCoords (gaiaRingPtr dst, gaiaRingPtr src);
420 
435  GAIAGEO_DECLARE void gaiaCopyRingCoordsEx (gaiaRingPtr dst, gaiaRingPtr src,
436  double z_no_data,
437  double m_no_data);
438 
451  GAIAGEO_DECLARE void gaiaCopyRingCoordsReverse (gaiaRingPtr dst,
452  gaiaRingPtr src);
453 
469  GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygon (int vert, int holes);
470 
486  GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYZ (int vert, int holes);
487 
503  GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYM (int vert, int holes);
504 
520  GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYZM (int vert, int holes);
521 
540  GAIAGEO_DECLARE gaiaPolygonPtr gaiaCreatePolygon (gaiaRingPtr ring);
541 
557  GAIAGEO_DECLARE void gaiaFreePolygon (gaiaPolygonPtr polyg);
558 
571  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomColl (void);
572 
585  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYZ (void);
586 
599  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYM (void);
600 
613  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYZM (void);
614 
630  GAIAGEO_DECLARE void gaiaFreeGeomColl (gaiaGeomCollPtr geom);
631 
642  GAIAGEO_DECLARE void gaiaAddPointToGeomColl (gaiaGeomCollPtr p, double x,
643  double y);
644 
656  GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYZ (gaiaGeomCollPtr p,
657  double x, double y,
658  double z);
659 
671  GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYM (gaiaGeomCollPtr p,
672  double x, double y,
673  double m);
674 
687  GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYZM (gaiaGeomCollPtr p,
688  double x, double y,
689  double z, double m);
690 
702  GAIAGEO_DECLARE gaiaLinestringPtr
704 
714  GAIAGEO_DECLARE void gaiaInsertLinestringInGeomColl (gaiaGeomCollPtr p,
716  line);
717 
731  p, int vert,
732  int interiors);
733 
748  GAIAGEO_DECLARE gaiaPolygonPtr
750 
767  int pos, int vert);
768 
782  GAIAGEO_DECLARE void gaiaInsertInteriorRing (gaiaPolygonPtr p,
783  gaiaRingPtr ring);
784 
797  GAIAGEO_DECLARE void gaiaAddRingToPolyg (gaiaPolygonPtr polyg,
798  gaiaRingPtr ring);
799 
814  line);
830  GAIAGEO_DECLARE gaiaLinestringPtr
832 
846  GAIAGEO_DECLARE gaiaRingPtr gaiaCloneRing (gaiaRingPtr ring);
847 
863  GAIAGEO_DECLARE gaiaRingPtr gaiaCloneRingSpecial (gaiaRingPtr ring,
864  int mode);
865 
879  GAIAGEO_DECLARE gaiaPolygonPtr gaiaClonePolygon (gaiaPolygonPtr polyg);
880 
900  polyg, int mode);
901 
918  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomColl (gaiaGeomCollPtr geom);
919 
938  geom, int mode);
939 
956  geom);
957 
972  GAIAGEO_DECLARE gaiaGeomCollPtr
974 
990  geom);
991 
1005  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXY (gaiaGeomCollPtr geom);
1006 
1022  geom);
1023 
1038  geom);
1039 
1054  geom);
1055 
1070  geom,
1071  double
1072  no_data);
1073 
1088  geom,
1089  double
1090  no_data);
1091 
1106  GAIAGEO_DECLARE gaiaGeomCollPtr
1107  gaiaCastGeomCollToXYZMnoData (gaiaGeomCollPtr geom, double z_no_data,
1108  double m_no_data);
1109 
1134  GAIAGEO_DECLARE int gaiaLineGetPoint (gaiaLinestringPtr ln, int v,
1135  double *x, double *y, double *z,
1136  double *m);
1137 
1162  GAIAGEO_DECLARE int gaiaLineSetPoint (gaiaLinestringPtr ln, int v,
1163  double x, double y, double z,
1164  double m);
1165 
1190  GAIAGEO_DECLARE int gaiaRingGetPoint (gaiaRingPtr rng, int v, double *x,
1191  double *y, double *z, double *m);
1192 
1217  GAIAGEO_DECLARE int gaiaRingSetPoint (gaiaRingPtr rng, int v, double x,
1218  double y, double z, double m);
1219 
1233  GAIAGEO_DECLARE int gaiaDimension (gaiaGeomCollPtr geom);
1234 
1253  GAIAGEO_DECLARE int gaiaGeometryType (gaiaGeomCollPtr geom);
1254 
1271  GAIAGEO_DECLARE int gaiaGeometryAliasType (gaiaGeomCollPtr geom);
1272 
1283  GAIAGEO_DECLARE int gaiaIsEmpty (gaiaGeomCollPtr geom);
1284 
1297  GAIAGEO_DECLARE int gaiaCheckClockwise (gaiaGeomCollPtr geom);
1298 
1311  GAIAGEO_DECLARE int gaiaCheckCounterClockwise (gaiaGeomCollPtr geom);
1312 
1330  GAIAGEO_DECLARE int gaiaIsToxic (gaiaGeomCollPtr geom);
1331 
1350  GAIAGEO_DECLARE int gaiaIsToxic_r (const void *p_cache,
1351  gaiaGeomCollPtr geom);
1352 
1369  GAIAGEO_DECLARE int gaiaIsNotClosedRing (gaiaRingPtr ring);
1370 
1388  GAIAGEO_DECLARE int gaiaIsNotClosedRing_r (const void *p_data,
1389  gaiaRingPtr ring);
1390 
1404  GAIAGEO_DECLARE int gaiaIsNotClosedGeomColl (gaiaGeomCollPtr geom);
1405 
1420  GAIAGEO_DECLARE int gaiaIsNotClosedGeomColl_r (const void *p_data,
1421  gaiaGeomCollPtr geom);
1422 
1441  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaSanitize (gaiaGeomCollPtr org);
1442 
1458 
1477  org,
1478  double tolerance);
1479 
1496  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLinearize (gaiaGeomCollPtr geom,
1497  int force_multi);
1498 
1515  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaDissolveSegments (gaiaGeomCollPtr geom);
1516 
1533  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaDissolvePoints (gaiaGeomCollPtr geom);
1534 
1551  GAIAGEO_DECLARE gaiaGeomCollPtr
1553 
1570  GAIAGEO_DECLARE gaiaGeomCollPtr
1572 
1589  GAIAGEO_DECLARE gaiaGeomCollPtr
1591 
1609  geom1,
1610  gaiaGeomCollPtr geom2);
1611 
1629  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMergeGeometries_r (const void
1630  *p_cache,
1632  geom1,
1634  geom2);
1635 
1653  GAIAGEO_DECLARE gaiaGeomCollPtr
1654  gaiaAddMeasure (gaiaGeomCollPtr geom, double m_start, double m_end);
1655 
1669  GAIAGEO_DECLARE int
1670  gaiaInterpolatePoint (const void *p_cache, gaiaGeomCollPtr line,
1671  gaiaGeomCollPtr point, double *m_value);
1672 
1691  GAIAGEO_DECLARE gaiaGeomCollPtr
1692  gaiaLocateBetweenMeasures (gaiaGeomCollPtr geom, double m_start,
1693  double m_end);
1694 
1707  GAIAGEO_DECLARE int gaiaIsValidTrajectory (gaiaGeomCollPtr geom);
1708 
1728  GAIAGEO_DECLARE gaiaGeomCollPtr
1730 
1748  GAIAGEO_DECLARE double gaiaMeasureLength (int dims, double *coords,
1749  int vert);
1750 
1762  GAIAGEO_DECLARE double gaiaMeasureArea (gaiaRingPtr ring);
1763 
1775  GAIAGEO_DECLARE void gaiaRingCentroid (gaiaRingPtr ring, double *rx,
1776  double *ry);
1777 
1786  GAIAGEO_DECLARE void gaiaClockwise (gaiaRingPtr p);
1787 
1797  GAIAGEO_DECLARE int gaiaIsPointOnRingSurface (gaiaRingPtr ring,
1798  double pt_x, double pt_y);
1799 
1809  GAIAGEO_DECLARE int gaiaIsPointOnPolygonSurface (gaiaPolygonPtr polyg,
1810  double x, double y);
1811 
1827  GAIAGEO_DECLARE double gaiaMinDistance (double x0, double y0,
1828  int dims, double *coords, int vert);
1829 
1847  GAIAGEO_DECLARE int gaiaIntersect (double *x0, double *y0, double x1,
1848  double y1, double x2, double y2,
1849  double x3, double y3, double x4,
1850  double y4);
1851 
1862  GAIAGEO_DECLARE void gaiaShiftCoords (gaiaGeomCollPtr geom,
1863  double shift_x, double shift_y);
1864 
1876  GAIAGEO_DECLARE void gaiaShiftCoords3D (gaiaGeomCollPtr geom,
1877  double shift_x, double shift_y,
1878  double shift_z);
1879 
1893  GAIAGEO_DECLARE void gaiaShiftLongitude (gaiaGeomCollPtr geom);
1894 
1904  GAIAGEO_DECLARE void gaiaNormalizeLonLat (gaiaGeomCollPtr geom);
1905 
1906 
1916  GAIAGEO_DECLARE void gaiaScaleCoords (gaiaGeomCollPtr geom,
1917  double scale_x, double scale_y);
1918 
1927  GAIAGEO_DECLARE void gaiaRotateCoords (gaiaGeomCollPtr geom, double angle);
1928 
1940  GAIAGEO_DECLARE void gaiaReflectCoords (gaiaGeomCollPtr geom, int x_axis,
1941  int y_axis);
1942 
1952  GAIAGEO_DECLARE void gaiaSwapCoords (gaiaGeomCollPtr geom);
1953 
1968  GAIAGEO_DECLARE int gaiaLinestringEquals (gaiaLinestringPtr line1,
1969  gaiaLinestringPtr line2);
1970 
1986  GAIAGEO_DECLARE int gaiaPolygonEquals (gaiaPolygonPtr polyg1,
1987  gaiaPolygonPtr polyg2);
1988 
2008  GAIAGEO_DECLARE int gaiaEllipseParams (const char *name, double *a,
2009  double *b, double *rf);
2010 
2029  GAIAGEO_DECLARE double gaiaGreatCircleDistance (double a, double b,
2030  double lat1, double lon1,
2031  double lat2, double lon2);
2032 
2052  GAIAGEO_DECLARE double gaiaGeodesicDistance (double a, double b,
2053  double rf, double lat1,
2054  double lon1, double lat2,
2055  double lon2);
2056 
2077  GAIAGEO_DECLARE double gaiaGreatCircleTotalLength (double a, double b,
2078  int dims,
2079  double *coords,
2080  int vert);
2081 
2103  GAIAGEO_DECLARE double gaiaGeodesicTotalLength (double a, double b,
2104  double rf, int dims,
2105  double *coords, int vert);
2106 
2121  GAIAGEO_DECLARE int gaiaConvertLength (double value, int unit_from,
2122  int unit_to, double *cvt);
2123 
2150  GAIAGEO_DECLARE int gaiaGeodesicArcLength (sqlite3 * sqlite,
2151  const void *cache,
2152  gaiaGeomCollPtr geom1,
2153  gaiaGeomCollPtr geom2,
2154  int return_type, double *retval);
2155 
2169  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMakeCircle (double center_x,
2170  double center_y,
2171  double radius, double step);
2172 
2184  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMakeEllipse (double center_x,
2185  double center_y,
2186  double x_axis,
2187  double y_axis,
2188  double step);
2189 
2205  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMakeArc (double center_x,
2206  double center_y,
2207  double radius, double start,
2208  double stop, double step);
2209 
2223  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMakeEllipticArc (double center_x,
2224  double center_y,
2225  double x_axis,
2226  double y_axis,
2227  double start,
2228  double stop,
2229  double step);
2230 
2248  GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMakePolygon (gaiaGeomCollPtr exterior,
2249  gaiaGeomCollPtr interiors);
2250 
2261  GAIAGEO_DECLARE double gaiaCurvosityIndex (const void *p_cache,
2262  gaiaLinestringPtr line,
2263  int extra_points);
2264 
2275  GAIAGEO_DECLARE void gaiaUpDownHeight (gaiaLinestringPtr line, double *up,
2276  double *down);
2277 
2278 #ifdef __cplusplus
2279 }
2280 #endif
2281 
2282 #endif /* _GG_CORE_H */
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYZMnoData(gaiaGeomCollPtr geom, double z_no_data, double m_no_data)
Duplicates a Geometry object [casting dimensions to 3D XYZM - noData].
GAIAGEO_DECLARE double gaiaMeasureLength(int dims, double *coords, int vert)
Measures the geometric length for a Linestring or Ring.
GAIAGEO_DECLARE int gaiaIsNotClosedGeomColl(gaiaGeomCollPtr geom)
Checks for not-closed Rings in a Geometry object.
GAIAGEO_DECLARE void gaiaFreeGeomColl(gaiaGeomCollPtr geom)
Destroys a Geometry object.
GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYM(int vert, int holes)
Allocates a 2D POLYGON [XYM].
GAIAGEO_DECLARE void gaiaCopyRingCoords(gaiaRingPtr dst, gaiaRingPtr src)
Copies coordinates between two RING objects.
GAIAGEO_DECLARE double gaiaGreatCircleTotalLength(double a, double b, int dims, double *coords, int vert)
Calculates the Great Circle Total Length for a Linestring / Ring.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYZM(void)
Allocates a 3D Geometry [XYZM].
GAIAGEO_DECLARE int gaiaIsToxic_r(const void *p_cache, gaiaGeomCollPtr geom)
Checks for toxic Geometry object.
GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYZM(int vert)
Allocates a 3D RING [XYZM].
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaExtractLinestringsFromGeomColl(gaiaGeomCollPtr geom)
Extracts any Linestring from a Geometry object.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaEnsureClosedRings(gaiaGeomCollPtr org)
Attempts to sanitize a possibly malformed Geometry object.
GAIAGEO_DECLARE gaiaLinestringPtr gaiaCloneLinestringSpecial(gaiaLinestringPtr line, int mode)
Duplicates a Linestring object (special)
GAIAGEO_DECLARE void gaiaUpDownHeight(gaiaLinestringPtr line, double *up, double *down)
Computes the Uphill and Downhill total Height for some 3D Linestrings.
GAIAGEO_DECLARE int gaiaRingSetPoint(gaiaRingPtr rng, int v, double x, double y, double z, double m)
Sets coodinates for a Ring's Point.
GAIAGEO_DECLARE void gaiaFreePolygon(gaiaPolygonPtr polyg)
Destroys a POLYGON object.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMakeEllipticArc(double center_x, double center_y, double x_axis, double y_axis, double start, double stop, double step)
Creates an Elliptic Arc (Linestring) Geometry.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaExtractPointsFromGeomColl(gaiaGeomCollPtr geom)
Extracts any Point from a Geometry object.
GAIAGEO_DECLARE int gaiaIsNotClosedGeomColl_r(const void *p_data, gaiaGeomCollPtr geom)
Checks for not-closed Rings in a Geometry object.
GAIAGEO_DECLARE int gaiaIsNotClosedRing_r(const void *p_data, gaiaRingPtr ring)
Checks for not-closed Rings.
GAIAGEO_DECLARE double gaiaGeodesicDistance(double a, double b, double rf, double lat1, double lon1, double lat2, double lon2)
Calculates the Geodesic Distance between two Points.
GAIAGEO_DECLARE void gaiaCopyRingCoordsEx(gaiaRingPtr dst, gaiaRingPtr src, double z_no_data, double m_no_data)
Copies coordinates between two RING objects.
Container for OGC POINT Geometry.
Definition: gg_structs.h:78
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMergeGeometries_r(const void *p_cache, gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
Merges two Geometry objects into a single one.
Container for OGC POLYGON Geometry.
Definition: gg_structs.h:192
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaRemoveRepeatedPoints(gaiaGeomCollPtr org, double tolerance)
Attempts to sanitize a possibly malformed Geometry object.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaDissolvePoints(gaiaGeomCollPtr geom)
Attempts to resolve a collection of Points from a Geometry object.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomCollPoints(gaiaGeomCollPtr geom)
Duplicates a Geometry object [Points only].
GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestring(int vert)
Allocates a 2D LINESTRING [XY].
GAIAGEO_DECLARE int gaiaIsNotClosedRing(gaiaRingPtr ring)
Checks for not-closed Rings.
GAIAGEO_DECLARE void gaiaFree(void *ptr)
Safely frees any dynamic memory block allocated by the library itself.
GAIAGEO_DECLARE void gaiaFreeRing(gaiaRingPtr ptr)
Destroys a RING object.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYZM(gaiaGeomCollPtr geom)
Duplicates a Geometry object [casting dimensions to 3D XYZM].
GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYZM(double x, double y, double z, double m)
Allocates a 3D POINT [XYZM].
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMakeArc(double center_x, double center_y, double radius, double start, double stop, double step)
Creates a Circular Arc (Linestring) Geometry.
GAIAGEO_DECLARE int gaiaIsValidTrajectory(gaiaGeomCollPtr geom)
Checks if a Geometry object is valid Trajectory.
GAIAGEO_DECLARE int gaiaLineSetPoint(gaiaLinestringPtr ln, int v, double x, double y, double z, double m)
Sets coordinates for a Linestring's Point.
GAIAGEO_DECLARE int gaiaIsPointOnRingSurface(gaiaRingPtr ring, double pt_x, double pt_y)
Check if a Point lays on a Ring surface.
GAIAGEO_DECLARE int gaiaInterpolatePoint(const void *p_cache, gaiaGeomCollPtr line, gaiaGeomCollPtr point, double *m_value)
Will interpolate the M-value for a LinestringM at the point closest to the given Point.
GAIAGEO_DECLARE int gaiaPolygonEquals(gaiaPolygonPtr polyg1, gaiaPolygonPtr polyg2)
Checks if two Polygons objects are equivalent.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMakePolygon(gaiaGeomCollPtr exterior, gaiaGeomCollPtr interiors)
Creates a Polygon from closed Linestrings.
GAIAGEO_DECLARE void gaiaCopyLinestringCoordsEx(gaiaLinestringPtr dst, gaiaLinestringPtr src, double z_no_data, double m_no_data)
Copies coordinates between two LINESTRING objects.
GAIAGEO_DECLARE void gaiaNormalizeLonLat(gaiaGeomCollPtr geom)
Shifts any coordinate to within the "normal range" of longitude and latitude values (-180....
GAIAGEO_DECLARE void gaiaAddPointToGeomColl(gaiaGeomCollPtr p, double x, double y)
Creates a new 2D Point [XY] object into a Geometry object.
GAIAGEO_DECLARE int gaiaGeodesicArcLength(sqlite3 *sqlite, const void *cache, gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2, int return_type, double *retval)
Computes several Geodesic values based on the Distance between two Geometries.
GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYM(int vert)
Allocates a 2D LINESTRING [XYM].
GAIAGEO_DECLARE gaiaRingPtr gaiaAddInteriorRing(gaiaPolygonPtr p, int pos, int vert)
Creates a new Interior Ring object into a Polygon object.
GAIAGEO_DECLARE int gaiaGeometryAliasType(gaiaGeomCollPtr geom)
Determines the corresponding Type for a Geometry object.
GAIAGEO_DECLARE gaiaPolygonPtr gaiaInsertPolygonInGeomColl(gaiaGeomCollPtr p, gaiaRingPtr ring)
Creates a new Polygon object into a Geometry object starting from an already existing Ring object.
GAIAGEO_DECLARE void gaiaCopyLinestringCoords(gaiaLinestringPtr dst, gaiaLinestringPtr src)
Copies coordinates between two LINESTRING objects.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYM(void)
Allocates a 2D Geometry [XYM].
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMakeCircle(double center_x, double center_y, double radius, double step)
Creates a Circle (Linestring) Geometry.
GAIAGEO_DECLARE int gaiaIsToxic(gaiaGeomCollPtr geom)
Checks for toxic Geometry object.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYZ(gaiaGeomCollPtr geom)
Duplicates a Geometry object [casting dimensions to 3D XYZ].
Container for OGC RING Geometry.
Definition: gg_structs.h:158
GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYZ(gaiaGeomCollPtr p, double x, double y, double z)
Creates a new 3D Point [XYZ] object into a Geometry object.
GAIAGEO_DECLARE gaiaRingPtr gaiaCloneRingSpecial(gaiaRingPtr ring, int mode)
Duplicates a Ring object (special)
GAIAGEO_DECLARE double gaiaGreatCircleDistance(double a, double b, double lat1, double lon1, double lat2, double lon2)
Calculates the Great Circle Distance between between two Points.
GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYZM(int vert)
Allocates a 3D LINESTRING [XYZM].
GAIAGEO_DECLARE int gaiaDimension(gaiaGeomCollPtr geom)
Determines OGC dimensions for a Geometry object.
GAIAGEO_DECLARE gaiaPolygonPtr gaiaClonePolygonSpecial(gaiaPolygonPtr polyg, int mode)
Duplicates a Polygon object (special)
GAIAGEO_DECLARE int gaiaIsEmpty(gaiaGeomCollPtr geom)
Checks for empty Geometry object.
GAIAGEO_DECLARE double gaiaCurvosityIndex(const void *p_cache, gaiaLinestringPtr line, int extra_points)
Computes the Curvosity Index for some Linestrings.
GAIAGEO_DECLARE void gaiaRingCentroid(gaiaRingPtr ring, double *rx, double *ry)
Determines the Centroid for a Ring object.
GAIAGEO_DECLARE void gaiaInsertLinestringInGeomColl(gaiaGeomCollPtr p, gaiaLinestringPtr line)
Inserts an already existing Linestring object into a Geometry object.
GAIAGEO_DECLARE int gaiaLinestringEquals(gaiaLinestringPtr line1, gaiaLinestringPtr line2)
Checks if two Linestring objects are equivalent.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomCollLinestrings(gaiaGeomCollPtr geom)
Duplicates a Geometry object [Linestrings only].
Container for OGC LINESTRING Geometry.
Definition: gg_structs.h:128
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLocateBetweenMeasures(gaiaGeomCollPtr geom, double m_start, double m_end)
Return a GeometryCollection containing elements matching the specified range of measures.
GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYM(gaiaGeomCollPtr p, double x, double y, double m)
Creates a new 2D Point [XYM] object into a Geometry object.
GAIAGEO_DECLARE void gaiaCopyLinestringCoordsReverse(gaiaLinestringPtr dst, gaiaLinestringPtr src)
Copies coordinates between two LINESTRING objects in reverse order.
GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRing(int vert)
Allocates a 2D RING [XY].
GAIAGEO_DECLARE void gaiaCopyRingCoordsReverse(gaiaRingPtr dst, gaiaRingPtr src)
Copies coordinates between two RING objects in reverse order.
GAIAGEO_DECLARE void gaiaFreePoint(gaiaPointPtr ptr)
Destroys a POINT object.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaSanitize(gaiaGeomCollPtr org)
Attempts to sanitize a possibly malformed Geometry object.
GAIAGEO_DECLARE int gaiaIntersect(double *x0, double *y0, double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)
Determines the intesection Point between two Segments.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYM(gaiaGeomCollPtr geom)
Duplicates a Geometry object [casting dimensions to 2D XYM].
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomColl(gaiaGeomCollPtr geom)
Duplicates a Geometry object.
GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYZ(int vert)
Allocates a 3D RING [XYZ].
GAIAGEO_DECLARE double gaiaMeasureArea(gaiaRingPtr ring)
Measures the geometric area for a Ring object.
GAIAGEO_DECLARE gaiaRingPtr gaiaCloneRing(gaiaRingPtr ring)
Duplicates a Ring object.
GAIAGEO_DECLARE int gaiaConvertLength(double value, int unit_from, int unit_to, double *cvt)
Convert a Length from a Measure Unit to another.
GAIAGEO_DECLARE gaiaLinestringPtr gaiaCloneLinestring(gaiaLinestringPtr line)
Duplicates a Linestring object.
GAIAGEO_DECLARE void gaiaAddRingToPolyg(gaiaPolygonPtr polyg, gaiaRingPtr ring)
Inserts an already existing Ring object into a Polygon object.
GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYM(double x, double y, double m)
Allocates a 2D POINT [XYM].
GAIAGEO_DECLARE void gaiaInsertInteriorRing(gaiaPolygonPtr p, gaiaRingPtr ring)
Inserts an already existing Ring object into a Polygon object.
GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPoint(double x, double y)
Allocates a 2D POINT [XY].
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAddMeasure(gaiaGeomCollPtr geom, double m_start, double m_end)
Will return a new GEOMETRY (supporting M) with measures linearly interpolated between the start and e...
GAIAGEO_DECLARE int gaiaRingGetPoint(gaiaRingPtr rng, int v, double *x, double *y, double *z, double *m)
Gets coordinates from a Ring's Point.
GAIAGEO_DECLARE double gaiaMinDistance(double x0, double y0, int dims, double *coords, int vert)
Computes the minimum distance between a Point and a Linestring or Ring.
GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYZM(int vert, int holes)
Allocates a 3D POLYGON [XYZM].
GAIAGEO_DECLARE void gaiaShiftCoords(gaiaGeomCollPtr geom, double shift_x, double shift_y)
Shifts any coordinate within a Geometry object.
GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygonXYZ(int vert, int holes)
Allocates a 3D POLYGON [XYZ].
GAIAGEO_DECLARE void gaiaShiftCoords3D(gaiaGeomCollPtr geom, double shift_x, double shift_y, double shift_z)
Shifts any coordinate within a 3D Geometry object.
GAIAGEO_DECLARE void gaiaReflectCoords(gaiaGeomCollPtr geom, int x_axis, int y_axis)
Reflects any coordinate within a Geometry object.
GAIAGEO_DECLARE int gaiaGeometryType(gaiaGeomCollPtr geom)
Determines the corresponding Type for a Geometry object.
GAIAGEO_DECLARE gaiaPointPtr gaiaAllocPointXYZ(double x, double y, double z)
Allocates a 3D POINT [XYZ].
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYMnoData(gaiaGeomCollPtr geom, double no_data)
Duplicates a Geometry object [casting dimensions to 2D XYM - noData].
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaLinearize(gaiaGeomCollPtr geom, int force_multi)
Attempts to resolve a (Multi)Linestring from a Geometry object.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXYZnoData(gaiaGeomCollPtr geom, double no_data)
Duplicates a Geometry object [casting dimensions to 3D XYZ - noData].
GAIAGEO_DECLARE void gaiaSwapCoords(gaiaGeomCollPtr geom)
Swaps any coordinate within a Geometry object.
GAIAGEO_DECLARE int gaiaCheckCounterClockwise(gaiaGeomCollPtr geom)
Checks for CounterClockwise Geometry object.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomColl(void)
Allocates a 2D Geometry [XY].
GAIAGEO_DECLARE gaiaPolygonPtr gaiaCreatePolygon(gaiaRingPtr ring)
Allocates a POLYGON.
GAIAGEO_DECLARE void gaiaClockwise(gaiaRingPtr p)
Determines the direction for a Ring object.
GAIAGEO_DECLARE void gaiaShiftLongitude(gaiaGeomCollPtr geom)
Shifts negative longitudes.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaAllocGeomCollXYZ(void)
Allocates a 3D Geometry [XYZ].
GAIAGEO_DECLARE void gaiaFreeLinestring(gaiaLinestringPtr ptr)
Destroys a LINESTRING object.
GAIAGEO_DECLARE gaiaLinestringPtr gaiaAddLinestringToGeomColl(gaiaGeomCollPtr p, int vert)
Creates a new Linestring object into a Geometry object.
GAIAGEO_DECLARE gaiaPolygonPtr gaiaClonePolygon(gaiaPolygonPtr polyg)
Duplicates a Polygon object.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomCollPolygons(gaiaGeomCollPtr geom)
Duplicates a Geometry object [Polygons only].
GAIAGEO_DECLARE gaiaLinestringPtr gaiaAllocLinestringXYZ(int vert)
Allocates a 3D LINESTRING [XYZ].
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMakeEllipse(double center_x, double center_y, double x_axis, double y_axis, double step)
Creates an Ellipse (Linestring) Geometry.
GAIAGEO_DECLARE int gaiaIsPointOnPolygonSurface(gaiaPolygonPtr polyg, double x, double y)
Checks if a Point lays on a Polygon surface.
Container for OGC GEOMETRYCOLLECTION Geometry.
Definition: gg_structs.h:226
GAIAGEO_DECLARE void gaiaRotateCoords(gaiaGeomCollPtr geom, double angle)
Rotates any coordinate within a Geometry object.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaMergeGeometries(gaiaGeomCollPtr geom1, gaiaGeomCollPtr geom2)
Merges two Geometry objects into a single one.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaDissolveSegments(gaiaGeomCollPtr geom)
Attempts to resolve a collection of Segments from a Geometry object.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCastGeomCollToXY(gaiaGeomCollPtr geom)
Duplicates a Geometry object [casting dimensions to 2D XY].
GAIAGEO_DECLARE int gaiaEllipseParams(const char *name, double *a, double *b, double *rf)
Retrieves Geodesic params for an Ellipsoid definition.
GAIAGEO_DECLARE void gaiaAddPointToGeomCollXYZM(gaiaGeomCollPtr p, double x, double y, double z, double m)
Creates a new 3D Point [XYZM] object into a Geometry object.
GAIAGEO_DECLARE int gaiaLineGetPoint(gaiaLinestringPtr ln, int v, double *x, double *y, double *z, double *m)
Gets coodinates from a Linestring's Point.
GAIAGEO_DECLARE gaiaPolygonPtr gaiaAllocPolygon(int vert, int holes)
Allocates a 2D POLYGON [XY].
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaExtractPolygonsFromGeomColl(gaiaGeomCollPtr geom)
Extracts any Polygon from a Geometry object.
GAIAGEO_DECLARE double gaiaGeodesicTotalLength(double a, double b, double rf, int dims, double *coords, int vert)
Calculates the Geodesic Total Length for a Linestring / Ring.
GAIAGEO_DECLARE void gaiaScaleCoords(gaiaGeomCollPtr geom, double scale_x, double scale_y)
Scales any coordinate within a Geometry object.
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaCloneGeomCollSpecial(gaiaGeomCollPtr geom, int mode)
Duplicates a Geometry object (special)
GAIAGEO_DECLARE gaiaGeomCollPtr gaiaTrajectoryInterpolatePoint(gaiaGeomCollPtr geom, double m)
Attempts to interpolate a Point along a Trajectory accordingly to given M-Value.
GAIAGEO_DECLARE gaiaPolygonPtr gaiaAddPolygonToGeomColl(gaiaGeomCollPtr p, int vert, int interiors)
Creates a new Polygon object into a Geometry object.
GAIAGEO_DECLARE gaiaRingPtr gaiaAllocRingXYM(int vert)
Allocates 2D RING [XYM].
GAIAGEO_DECLARE int gaiaCheckClockwise(gaiaGeomCollPtr geom)
Checks for Clockwise Geometry object.