Ticket #11948: contrib-gis-linearref.patch
File contrib-gis-linearref.patch, 5.5 KB (added by , 15 years ago) |
---|
-
django/contrib/gis/geos/geometry.py
600 600 "Clones this Geometry." 601 601 return GEOSGeometry(capi.geom_clone(self.ptr), srid=self.srid) 602 602 603 def project(self, point): 604 if not isinstance(point, Point): 605 raise TypeError('locate_point argument must be a Point') 606 if not isinstance(self, (LineString, MultiLineString)): 607 raise TypeError('locate_point only works on LineString and MultiLineString geometries') 608 return capi.geos_project(self.ptr, point.ptr) 609 610 611 def interpolate(self, distance): 612 if not isinstance(self, (LineString, MultiLineString)): 613 raise TypeError('interpolate only works on LineString and MultiLineString geometries') 614 return self._topology(capi.geos_interpolate(self.ptr, distance)) 615 616 def project_normalized(self, point): 617 if not isinstance(point, Point): 618 raise TypeError('locate_point argument must be a Point') 619 if not isinstance(self, (LineString, MultiLineString)): 620 raise TypeError('locate_point only works on LineString and MultiLineString geometries') 621 return capi.geos_project_normalized(self.ptr, point.ptr) 622 623 624 def interpolate_normalized(self, distance): 625 if not isinstance(self, (LineString, MultiLineString)): 626 raise TypeError('interpolate only works on LineString and MultiLineString geometries') 627 return self._topology(capi.geos_interpolate_normalized(self.ptr, distance)) 628 629 603 630 # Class mapping dictionary. Has to be at the end to avoid import 604 631 # conflicts with GEOSGeometry. 605 632 from django.contrib.gis.geos.linestring import LineString, LinearRing -
django/contrib/gis/geos/prototypes/__init__.py
13 13 from django.contrib.gis.geos.prototypes.geom import from_hex, from_wkb, from_wkt, \ 14 14 create_point, create_linestring, create_linearring, create_polygon, create_collection, \ 15 15 destroy_geom, get_extring, get_intring, get_nrings, get_geomn, geom_clone, \ 16 geos_normalize, geos_ type, geos_typeid, geos_get_srid, geos_set_srid, \17 ge t_dims, get_num_coords, get_num_geoms, \18 to_hex, to_wkb, to_wkt16 geos_normalize, geos_interpolate, geos_interpolate_normalized, geos_project, \ 17 geos_project_normalized, geos_type, geos_typeid, geos_get_srid, geos_set_srid, \ 18 get_dims, get_num_coords, get_num_geoms, to_hex, to_wkb, to_wkt 19 19 20 20 # Miscellaneous routines. 21 21 from django.contrib.gis.geos.prototypes.misc import geos_area, geos_distance, geos_length -
django/contrib/gis/geos/prototypes/geom.py
1 from ctypes import c_char_p, c_int, c_size_t, c_ubyte, c_uint, POINTER 2 from django.contrib.gis.geos.libgeos import lgeos, CS_PTR, GEOM_PTR, PREPGEOM_PTR, GEOS_PREPARE 1 from ctypes import c_char_p, c_int, c_double, c_size_t, c_ubyte, c_uint, POINTER 2 from django.contrib.gis.geos.libgeos import geos_version_info, lgeos, CS_PTR, GEOM_PTR, PREPGEOM_PTR, GEOS_PREPARE 3 3 4 from django.contrib.gis.geos.prototypes.errcheck import \ 4 5 check_geom, check_minus_one, check_sized_string, check_string, check_zero 5 6 … … 116 117 geos_set_srid = lgeos.GEOSSetSRID 117 118 geos_set_srid.argtypes = [GEOM_PTR, c_int] 118 119 geos_set_srid.restype = None 120 121 122 # Linear referencing routines 123 124 info = geos_version_info() 125 if info['version'] >= '3.2.0': 126 geos_project = lgeos.GEOSProject 127 geos_project.argtypes = [GEOM_PTR, GEOM_PTR] 128 geos_project.restype = c_double 129 geos_interpolate = geom_output(lgeos.GEOSInterpolate, [GEOM_PTR, c_double]) 130 131 geos_project_normalized = lgeos.GEOSProjectNormalized 132 geos_project_normalized.argtypes = [GEOM_PTR, GEOM_PTR] 133 geos_project_normalized.restype = c_double 134 geos_interpolate_normalized = geom_output(lgeos.GEOSInterpolateNormalized, [GEOM_PTR, c_double]) 135 -
django/contrib/gis/geos/tests/test_geos.py
876 876 for geom, merged in zip(ref_geoms, ref_merged): 877 877 self.assertEqual(merged, geom.merged) 878 878 879 def test27_linearref(self): 880 "Testing linear referencing" 881 882 info = geos_version_info() 883 if info['version'] < '3.2.0': 884 return #no linear referencing yet 885 886 ls = fromstr('LINESTRING(0 0, 0 10, 10 10, 10 0)') 887 mls = fromstr('MULTILINESTRING((0 0, 0 10), (10 0, 10 10))') 888 889 self.assertEqual(ls.project(Point(0, 20)), 10.0) 890 self.assertEqual(ls.project(Point(7, 6)), 24) 891 892 self.assertEqual(ls.interpolate(10), Point(0, 10)) 893 self.assertEqual(ls.interpolate(24), Point(10, 6)) 894 895 self.assertEqual(mls.project(Point(0, 20)), 10) 896 self.assertEqual(mls.project(Point(7, 6)), 16) 897 898 self.assertEqual(mls.interpolate(9), Point(0, 9)) 899 self.assertEqual(mls.interpolate(17), Point(10, 7)) 900 901 879 902 def suite(): 880 903 s = unittest.TestSuite() 881 904 s.addTest(unittest.makeSuite(GEOSTest))