|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- """
- This module houses the GEOS ctypes prototype functions for the
- topological operations on geometries.
- """
- from ctypes import c_double, c_int
-
- from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOSFuncFactory
- from django.contrib.gis.geos.prototypes.errcheck import (
- check_geom, check_minus_one, check_string,
- )
- from django.contrib.gis.geos.prototypes.geom import geos_char_p
-
-
- class Topology(GEOSFuncFactory):
- "For GEOS unary topology functions."
- argtypes = [GEOM_PTR]
- restype = GEOM_PTR
- errcheck = staticmethod(check_geom)
-
-
- # Topology Routines
- geos_boundary = Topology('GEOSBoundary')
- geos_buffer = Topology('GEOSBuffer', argtypes=[GEOM_PTR, c_double, c_int])
- geos_bufferwithstyle = Topology('GEOSBufferWithStyle', argtypes=[GEOM_PTR, c_double, c_int, c_int, c_int, c_double])
- geos_centroid = Topology('GEOSGetCentroid')
- geos_convexhull = Topology('GEOSConvexHull')
- geos_difference = Topology('GEOSDifference', argtypes=[GEOM_PTR, GEOM_PTR])
- geos_envelope = Topology('GEOSEnvelope')
- geos_intersection = Topology('GEOSIntersection', argtypes=[GEOM_PTR, GEOM_PTR])
- geos_linemerge = Topology('GEOSLineMerge')
- geos_pointonsurface = Topology('GEOSPointOnSurface')
- geos_preservesimplify = Topology('GEOSTopologyPreserveSimplify', argtypes=[GEOM_PTR, c_double])
- geos_simplify = Topology('GEOSSimplify', argtypes=[GEOM_PTR, c_double])
- geos_symdifference = Topology('GEOSSymDifference', argtypes=[GEOM_PTR, GEOM_PTR])
- geos_union = Topology('GEOSUnion', argtypes=[GEOM_PTR, GEOM_PTR])
-
- geos_unary_union = GEOSFuncFactory('GEOSUnaryUnion', argtypes=[GEOM_PTR], restype=GEOM_PTR)
-
- # GEOSRelate returns a string, not a geometry.
- geos_relate = GEOSFuncFactory(
- 'GEOSRelate', argtypes=[GEOM_PTR, GEOM_PTR], restype=geos_char_p, errcheck=check_string
- )
-
- # Linear referencing routines
- geos_project = GEOSFuncFactory(
- 'GEOSProject', argtypes=[GEOM_PTR, GEOM_PTR], restype=c_double, errcheck=check_minus_one
- )
- geos_interpolate = Topology('GEOSInterpolate', argtypes=[GEOM_PTR, c_double])
-
- geos_project_normalized = GEOSFuncFactory(
- 'GEOSProjectNormalized', argtypes=[GEOM_PTR, GEOM_PTR], restype=c_double, errcheck=check_minus_one
- )
- geos_interpolate_normalized = Topology('GEOSInterpolateNormalized', argtypes=[GEOM_PTR, c_double])
|