Refs #32353, Refs #32352 -- Fixed GIS tests with PROJ 7.X.

Different PROJ versions use different transformations, all are correct
as having a 1 meter accuracy.

These are differences in PROJ versions that cannot and should not be
handled in Django itself.

Thanks Jani Tiainen and David Smith for reports.

See: https://github.com/OSGeo/gdal/issues/3377
This commit is contained in:
Mariusz Felisiak 2021-03-23 09:16:33 +01:00 committed by GitHub
parent 71ec102b01
commit 2cd4026334
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 8 deletions

View File

@ -350,7 +350,9 @@ class OGRGeomTest(SimpleTestCase, TestDataMixin):
self.assertEqual(k1, orig) self.assertEqual(k1, orig)
self.assertNotEqual(k1, k2) self.assertNotEqual(k1, k2)
prec = 3 # Different PROJ versions use different transformations, all are
# correct as having a 1 meter accuracy.
prec = -1
for p in (t1, t2, t3, k2): for p in (t1, t2, t3, k2):
self.assertAlmostEqual(trans.x, p.x, prec) self.assertAlmostEqual(trans.x, p.x, prec)
self.assertAlmostEqual(trans.y, p.y, prec) self.assertAlmostEqual(trans.y, p.y, prec)
@ -360,7 +362,9 @@ class OGRGeomTest(SimpleTestCase, TestDataMixin):
ls_orig = OGRGeometry('LINESTRING(-104.609 38.255)', 4326) ls_orig = OGRGeometry('LINESTRING(-104.609 38.255)', 4326)
ls_trans = OGRGeometry('LINESTRING(992385.4472045 481455.4944650)', 2774) ls_trans = OGRGeometry('LINESTRING(992385.4472045 481455.4944650)', 2774)
prec = 3 # Different PROJ versions use different transformations, all are
# correct as having a 1 meter accuracy.
prec = -1
ls_orig.transform(ls_trans.srs) ls_orig.transform(ls_trans.srs)
# Making sure the coordinate dimension is still 2D. # Making sure the coordinate dimension is still 2D.
self.assertEqual(2, ls_orig.coord_dim) self.assertEqual(2, ls_orig.coord_dim)

View File

@ -77,10 +77,11 @@ class GeoJSONSerializerTests(TestCase):
def test_srid_option(self): def test_srid_option(self):
geojson = serializers.serialize('geojson', City.objects.all().order_by('name'), srid=2847) geojson = serializers.serialize('geojson', City.objects.all().order_by('name'), srid=2847)
geodata = json.loads(geojson) geodata = json.loads(geojson)
self.assertEqual( coordinates = geodata['features'][0]['geometry']['coordinates']
[int(c) for c in geodata['features'][0]['geometry']['coordinates']], # Different PROJ versions use different transformations, all are
[1564802, 5613214] # correct as having a 1 meter accuracy.
) self.assertAlmostEqual(coordinates[0], 1564802, -1)
self.assertAlmostEqual(coordinates[1], 5613214, -1)
def test_deserialization_exception(self): def test_deserialization_exception(self):
""" """

View File

@ -1140,7 +1140,9 @@ class GEOSTest(SimpleTestCase, TestDataMixin):
self.assertEqual(k1, orig) self.assertEqual(k1, orig)
self.assertNotEqual(k1, k2) self.assertNotEqual(k1, k2)
prec = 3 # Different PROJ versions use different transformations, all are
# correct as having a 1 meter accuracy.
prec = -1
for p in (t1, t2, t3, k2): for p in (t1, t2, t3, k2):
self.assertAlmostEqual(trans.x, p.x, prec) self.assertAlmostEqual(trans.x, p.x, prec)
self.assertAlmostEqual(trans.y, p.y, prec) self.assertAlmostEqual(trans.y, p.y, prec)

View File

@ -28,7 +28,9 @@ class GeometryFieldTest(SimpleTestCase):
# Making the field in a different SRID from that of the geometry, and # Making the field in a different SRID from that of the geometry, and
# asserting it transforms. # asserting it transforms.
fld = forms.GeometryField(srid=32140) fld = forms.GeometryField(srid=32140)
tol = 0.0001 # Different PROJ versions use different transformations, all are
# correct as having a 1 meter accuracy.
tol = 1
xform_geom = GEOSGeometry('POINT (951640.547328465 4219369.26171664)', srid=32140) xform_geom = GEOSGeometry('POINT (951640.547328465 4219369.26171664)', srid=32140)
# The cleaned geometry is transformed to 32140 (the widget map_srid is 3857). # The cleaned geometry is transformed to 32140 (the widget map_srid is 3857).
cleaned_geom = fld.clean('SRID=3857;POINT (-10615777.40976205 3473169.895707852)') cleaned_geom = fld.clean('SRID=3857;POINT (-10615777.40976205 3473169.895707852)')