/django/contrib/gis/geos/prototypes/topology.py
Python | 51 lines | 39 code | 5 blank | 7 comment | 2 complexity | 7027fe3ad6f9574f02e01d7f7b6987df MD5 | raw file
Possible License(s): BSD-3-Clause
- """
- This module houses the GEOS ctypes prototype functions for the
- topological operations on geometries.
- """
- __all__ = ['geos_boundary', 'geos_buffer', 'geos_centroid', 'geos_convexhull',
- 'geos_difference', 'geos_envelope', 'geos_intersection',
- 'geos_linemerge', 'geos_pointonsurface', 'geos_preservesimplify',
- 'geos_simplify', 'geos_symdifference', 'geos_union', 'geos_relate']
- from ctypes import c_char_p, c_double, c_int
- from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOS_PREPARE
- from django.contrib.gis.geos.prototypes.errcheck import check_geom, check_string
- from django.contrib.gis.geos.prototypes.geom import geos_char_p
- from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
- def topology(func, *args):
- "For GEOS unary topology functions."
- argtypes = [GEOM_PTR]
- if args: argtypes += args
- func.argtypes = argtypes
- func.restype = GEOM_PTR
- func.errcheck = check_geom
- return func
- ### Topology Routines ###
- geos_boundary = topology(GEOSFunc('GEOSBoundary'))
- geos_buffer = topology(GEOSFunc('GEOSBuffer'), c_double, c_int)
- geos_centroid = topology(GEOSFunc('GEOSGetCentroid'))
- geos_convexhull = topology(GEOSFunc('GEOSConvexHull'))
- geos_difference = topology(GEOSFunc('GEOSDifference'), GEOM_PTR)
- geos_envelope = topology(GEOSFunc('GEOSEnvelope'))
- geos_intersection = topology(GEOSFunc('GEOSIntersection'), GEOM_PTR)
- geos_linemerge = topology(GEOSFunc('GEOSLineMerge'))
- geos_pointonsurface = topology(GEOSFunc('GEOSPointOnSurface'))
- geos_preservesimplify = topology(GEOSFunc('GEOSTopologyPreserveSimplify'), c_double)
- geos_simplify = topology(GEOSFunc('GEOSSimplify'), c_double)
- geos_symdifference = topology(GEOSFunc('GEOSSymDifference'), GEOM_PTR)
- geos_union = topology(GEOSFunc('GEOSUnion'), GEOM_PTR)
- # GEOSRelate returns a string, not a geometry.
- geos_relate = GEOSFunc('GEOSRelate')
- geos_relate.argtypes = [GEOM_PTR, GEOM_PTR]
- geos_relate.restype = geos_char_p
- geos_relate.errcheck = check_string
- # Routines only in GEOS 3.1+
- if GEOS_PREPARE:
- geos_cascaded_union = GEOSFunc('GEOSUnionCascaded')
- geos_cascaded_union.argtypes = [GEOM_PTR]
- geos_cascaded_union.restype = GEOM_PTR
- __all__.append('geos_cascaded_union')