2
This module houses the GEOS ctypes prototype functions for the
3
unary and binary predicate operations on geometries.
5
from ctypes import c_char, c_char_p, c_double
6
from django.contrib.gis.geos.libgeos import lgeos, GEOM_PTR
7
from django.contrib.gis.geos.prototypes.errcheck import check_predicate
9
## Binary & unary predicate functions ##
10
def binary_predicate(func, *args):
11
"For GEOS binary predicate functions."
12
argtypes = [GEOM_PTR, GEOM_PTR]
13
if args: argtypes += args
14
func.argtypes = argtypes
16
func.errcheck = check_predicate
19
def unary_predicate(func):
20
"For GEOS unary predicate functions."
21
func.argtypes = [GEOM_PTR]
23
func.errcheck = check_predicate
26
## Unary Predicates ##
27
geos_hasz = unary_predicate(lgeos.GEOSHasZ)
28
geos_isempty = unary_predicate(lgeos.GEOSisEmpty)
29
geos_isring = unary_predicate(lgeos.GEOSisRing)
30
geos_issimple = unary_predicate(lgeos.GEOSisSimple)
31
geos_isvalid = unary_predicate(lgeos.GEOSisValid)
33
## Binary Predicates ##
34
geos_contains = binary_predicate(lgeos.GEOSContains)
35
geos_crosses = binary_predicate(lgeos.GEOSCrosses)
36
geos_disjoint = binary_predicate(lgeos.GEOSDisjoint)
37
geos_equals = binary_predicate(lgeos.GEOSEquals)
38
geos_equalsexact = binary_predicate(lgeos.GEOSEqualsExact, c_double)
39
geos_intersects = binary_predicate(lgeos.GEOSIntersects)
40
geos_overlaps = binary_predicate(lgeos.GEOSOverlaps)
41
geos_relatepattern = binary_predicate(lgeos.GEOSRelatePattern, c_char_p)
42
geos_touches = binary_predicate(lgeos.GEOSTouches)
43
geos_within = binary_predicate(lgeos.GEOSWithin)