diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-03-14 15:53:32 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-04-24 19:41:37 +0200 |
commit | 38e527b7695bfef471e5517edce90566b13583b4 (patch) | |
tree | d78744c7f581b5bde98906db2f116b118e0db323 /archaeological_finds/tests.py | |
parent | 9858cf3f3201dbb08d5733e263e56e0675fff1c8 (diff) | |
download | Ishtar-38e527b7695bfef471e5517edce90566b13583b4.tar.bz2 Ishtar-38e527b7695bfef471e5517edce90566b13583b4.zip |
GIS: deduce precise point from polygon
Diffstat (limited to 'archaeological_finds/tests.py')
-rw-r--r-- | archaeological_finds/tests.py | 90 |
1 files changed, 89 insertions, 1 deletions
diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index a56c997eb..00a45ba6a 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -1596,6 +1596,18 @@ class GeomaticTest(FindInit, TestCase): self.assertEqual(base_find.point_source_item, unicode(models.BaseFind._meta.verbose_name)) + # re-save do not change sources + base_find.save() + base_find = models.BaseFind.objects.get(pk=base_find.pk) + self.assertIsNotNone(base_find.point) + self.assertIsNotNone(base_find.point_2d) + self.assertIsNotNone(base_find.x) + self.assertIsNotNone(base_find.y) + self.assertIsNotNone(base_find.z) + self.assertEqual(base_find.point_source, 'P') # precise + self.assertEqual(base_find.point_source_item, + unicode(models.BaseFind._meta.verbose_name)) + # form input base_find.x = 2 base_find.y = 3 @@ -1608,6 +1620,14 @@ class GeomaticTest(FindInit, TestCase): self.assertEqual(base_find.point_source, 'P') # precise self.assertEqual(base_find.point_source_item, unicode(models.BaseFind._meta.verbose_name)) + # re-save do not change sources + base_find.save() + base_find = models.BaseFind.objects.get(pk=base_find.pk) + self.assertIsNotNone(base_find.point_2d) + self.assertIsNotNone(base_find.point) + self.assertEqual(base_find.point_source, 'P') # precise + self.assertEqual(base_find.point_source_item, + unicode(models.BaseFind._meta.verbose_name)) # reinit base_find.x = None @@ -1637,7 +1657,24 @@ class GeomaticTest(FindInit, TestCase): cr = ContextRecord.objects.get(pk=base_find.context_record.pk) base_find = models.BaseFind.objects.get(pk=base_find.pk) base_find.save() - self.assertEqual(base_find.point_2d, cr.town.center) + base_find = models.BaseFind.objects.get(pk=base_find.pk) + bfp = GEOSGeometry(base_find.point_2d.ewkt) + bfp.transform(4326) + tp = GEOSGeometry(cr.town.center.ewkt) + tp.transform(4326) + self.assertTrue(bfp.distance(tp) < 0.0001) + self.assertEqual(base_find.multi_polygon, cr.town.limit) + self.assertEqual(base_find.point_source, 'T') # town + self.assertEqual(base_find.point_source_item, + unicode(ContextRecord._meta.verbose_name)) + # re-save do not change sources + base_find.save() + base_find = models.BaseFind.objects.get(pk=base_find.pk) + bfp = GEOSGeometry(base_find.point_2d.ewkt) + bfp.transform(4326) + tp = GEOSGeometry(cr.town.center.ewkt) + tp.transform(4326) + self.assertTrue(bfp.distance(tp) < 0.0001) self.assertEqual(base_find.multi_polygon, cr.town.limit) self.assertEqual(base_find.point_source, 'T') # town self.assertEqual(base_find.point_source_item, @@ -1658,4 +1695,55 @@ class GeomaticTest(FindInit, TestCase): self.assertEqual(base_find.point_source, 'P') # precise self.assertEqual(base_find.point_source_item, unicode(models.BaseFind._meta.verbose_name)) + # re-save do not change sources + base_find.save() + base_find = models.BaseFind.objects.get(pk=base_find.pk) + self.assertIsNotNone(base_find.point_2d) + self.assertIsNotNone(base_find.point) + self.assertEqual(base_find.point_2d.wkt, 'POINT (5 6)') + self.assertEqual(base_find.point_source, 'P') # precise + self.assertEqual(base_find.point_source_item, + unicode(models.BaseFind._meta.verbose_name)) + + def test_post_save_polygon(self): + find = self.finds[0] + base_find = find.base_finds.all()[0] + srs, __ = SpatialReferenceSystem.objects.get_or_create( + txt_idx='wgs84', defaults={"srid": 4326, "label": 'WGS84', + 'auth_name': 'EPSG'} + ) + + base_find = models.BaseFind.objects.get(pk=base_find.pk) + + # get centroid geom from poly + limit = 'MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),' \ + '((6 3,9 2,9 4,6 3)))' + base_find.multi_polygon = 'SRID=4326;' + limit + base_find.point_source = None + base_find.point_2d = None + base_find.point = None + base_find.save() + + base_find = models.BaseFind.objects.get(pk=base_find.pk) + self.assertIsNotNone(base_find.point_2d) + self.assertEqual(base_find.point_source, 'M') # from multi polygon + # resaving do not change source + base_find.save() + base_find = models.BaseFind.objects.get(pk=base_find.pk) + self.assertIsNotNone(base_find.point_2d) + self.assertEqual(base_find.point_source, 'M') # from multi polygon + base_find = models.BaseFind.objects.get(pk=base_find.pk) + base_find.point_source = None + base_find.spatial_reference_system = srs + base_find.x = "42" + base_find.y = "3" + base_find.save() + base_find = models.BaseFind.objects.get(pk=base_find.pk) + self.assertEqual(base_find.point_2d.ewkt, "SRID=4326;POINT (42 3)") + self.assertEqual(base_find.point_source, 'P') + # resaving do not change source + base_find.save() + base_find = models.BaseFind.objects.get(pk=base_find.pk) + self.assertEqual(base_find.point_2d.ewkt, "SRID=4326;POINT (42 3)") + self.assertEqual(base_find.point_source, 'P') |