mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	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
Backport of 2cd4026334 from main
			
			
This commit is contained in:
		| @@ -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) | ||||||
|   | |||||||
| @@ -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): | ||||||
|         """ |         """ | ||||||
|   | |||||||
| @@ -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) | ||||||
|   | |||||||
| @@ -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)') | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user