diff options
author | QuentinAndre <quentin.andre@imt-atlantique.net> | 2021-08-19 00:46:25 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-11-16 17:04:41 +0100 |
commit | b96e22202a918fefb8677543dd5150b7534bf3f9 (patch) | |
tree | a95e79d0e70f44a1caf6f27eaad84f464b032cfb | |
parent | e7a44c96740194e443bf3f8cca98bfb1d03e012e (diff) | |
download | Ishtar-b96e22202a918fefb8677543dd5150b7534bf3f9.tar.bz2 Ishtar-b96e22202a918fefb8677543dd5150b7534bf3f9.zip |
create_cr_with_bfs returns pks
-rw-r--r-- | archaeological_context_records/tests.py | 2 | ||||
-rw-r--r-- | archaeological_finds/tests.py | 34 | ||||
-rw-r--r-- | archaeological_operations/tests.py | 73 | ||||
-rw-r--r-- | ishtar_common/static/js/ishtar-map.js | 59 | ||||
-rw-r--r-- | ishtar_common/tests.py | 24 |
5 files changed, 138 insertions, 54 deletions
diff --git a/archaeological_context_records/tests.py b/archaeological_context_records/tests.py index 16bf6d303..daa38c26b 100644 --- a/archaeological_context_records/tests.py +++ b/archaeological_context_records/tests.py @@ -1441,7 +1441,7 @@ class SeleniumTestsContextRecords(SeleniumTests): self.assertMap(dic_base) def test_geo_items(self): - geo_elements = self.setUpDefaultGeoItems() + geo_elements, ope_pks = self.setUpDefaultGeoItems() poly_cr, centr_cr, pt_cr = geo_elements[1] dic_polygon = { diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index a692cfc9f..688699d3e 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -2539,16 +2539,20 @@ class GeomaticTest(FindInit, TestCase): point_2d_bf = GEOSGeometry("POINT({} {})".format(3.9, 2.9), srid=4326) xy_bf = 3.9, 2.9 + pks = {'cr': {}, 'bf': {}} + ope.multi_polygon = "SRID=4326;" + poly_ope ope.multi_polygon_source = "P" ope.multi_polygon_source_item = str(ope._meta.verbose_name) ope.spatial_reference_system = wgs84 if geom_ope == "Point": ope.point = point_ope + ope.point_source = "P" + ope.point_source_item = str(ope._meta.verbose_name) ope.x, ope.y = xy_ope ope.point_2d = point_2d_ope - ope.save() # needs 2 saves because point_2d is none for multi_polygon - ope = Operation.objects.get(pk=ope.pk) + ope.save() # needs 2 saves because point_2d is none for multi_polygon + ope = Operation.objects.get(pk=ope.pk) ope.save() ope = Operation.objects.get(pk=ope.pk) @@ -2557,21 +2561,25 @@ class GeomaticTest(FindInit, TestCase): "operation": ope, } cr = ContextRecord.objects.create(**default) + cr = ContextRecord.objects.get(pk=cr.pk) cr.multi_polygon = "SRID=4326;" + poly_cr cr.multi_polygon_source = "P" - cr.multi_polygon_source_item = str(ContextRecord._meta.verbose_name) + cr.multi_polygon_source_item = str(cr._meta.verbose_name) cr.spatial_reference_system = wgs84 if geom_cr == "Point": cr.point = point_cr + cr.point_source = "P" + cr.point_source_item = str(cr._meta.verbose_name) cr.x, cr.y = xy_cr cr.point_2d = point_2d_cr cr.save() cr = ContextRecord.objects.get(pk=cr.pk) + pks['cr'][label_cr] = cr.pk bfs = [] - for i in range(len(list_geom_bf)): + for bf_geom in list_geom_bf: default = { - "label": "Find " + str(i + 1) + " from " + label_cr, + "label": "Find " + bf_geom + " from " + label_cr, "context_record": cr, } bf = models.BaseFind.objects.create(**default) @@ -2579,23 +2587,21 @@ class GeomaticTest(FindInit, TestCase): bf.multi_polygon_source = "P" bf.multi_polygon_source_item = str(bf._meta.verbose_name) bf.spatial_reference_system = wgs84 - if list_geom_bf[i] == "Point": + if bf_geom == "Point": bf.point = point_bf + bf.point_source = "P" + bf.point_source_item = str(bf._meta.verbose_name) bf.x, bf.y = xy_bf bf.point_2d = point_2d_bf bf.save() bf = models.BaseFind.objects.get(pk=bf.pk) - bf.save() - bf = models.BaseFind.objects.get(pk=bf.pk) - bf.save() - bf = models.BaseFind.objects.get(pk=bf.pk) bfs.append(bf) + pks['bf'][default['label']] = bf.pk - data = {} - find = models.Find.objects.create(**data) + find = models.Find.objects.create() find.base_finds.add(bf) find.save() - return cr, bfs + return pks def test_get_geo_items(self): wgs84 = SpatialReferenceSystem.objects.get(srid=4326) @@ -3301,7 +3307,7 @@ class SeleniumTestsBaseFinds(SeleniumTests): def test_geo_items(self): self.selenium.implicitly_wait(5) - geo_elements = self.setUpDefaultGeoItems() + geo_elements, ope_pks = self.setUpDefaultGeoItems() poly_bf, centr_bf, pt_bf = geo_elements[2] dic_polygon = { diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py index a5f1de328..ca0cce5da 100644 --- a/archaeological_operations/tests.py +++ b/archaeological_operations/tests.py @@ -4340,7 +4340,7 @@ class SeleniumTestsOperations(SeleniumTests): self.assertMap(dic_base) def test_geo_items(self): - geo_elements = self.setUpDefaultGeoItems() + geo_elements, ope_pks = self.setUpDefaultGeoItems() poly_ope, centr_ope, pt_ope = geo_elements[0] dic_poly = { @@ -4370,3 +4370,74 @@ class SeleniumTestsOperations(SeleniumTests): dropdown.click() self.selenium.find_element_by_xpath('//div[@class="dropdown-menu show"]/a[@href="/operation_search/"]').click() self._test_operation(2, dic_pt, geo_elements[1], geo_elements[2]) # point based operation + + def assertPt(self, item, geom): + #self.assertEqual(item.multi_polygon.coords, geom[0].coords) + #self.assertEqual(item.point_2d.coords, geom[2].coords) + print(item, " multi_poly:") + print(item.multi_polygon.coords) + print("geom:") + print(geom[0].coords) + print('result: ', item.multi_polygon.coords == geom[0].coords) + print("point_2d:") + print((round(item.x, 5), round(item.y, 5))) + print("geom:") + print(geom[2].coords) + print('result: ', (round(item.x, 5), round(item.y, 5)) == geom[2].coords) + print('\n') + + def assertPoly(self, item, geom, real_point=None): + #self.assertEqual(item.multi_polygon.coords, geom[0].coords) + #if real_point: + # self.assertEqual((round(item.x, 5), round(item.y, 5)), geom[1].coords) + # else: + # self.assertEqual((round(item.x, 5), round(item.y, 5)), real_point.coords) + print(item, " multi_poly:") + print(item.multi_polygon.coords) + print("geom:") + print(geom[0].coords) + print('result: ', item.multi_polygon.coords==geom[0].coords) + print("point_2d:") + print((round(item.x, 5), round(item.y, 5))) + print("geom:") + point = geom[1].coords + if real_point: + point = real_point.coords + print(point) + print('result: ', (round(item.x, 5), round(item.y, 5)) == point) + print('\n') + + def test_setUpDefaultItems(self): + from django.contrib.gis.geos import GEOSGeometry + from archaeological_operations.models import Operation + base_geoms, ope_pks = self.setUpDefaultGeoItems() + geoms = [] + for geom in base_geoms: + poly = GEOSGeometry(json.dumps({'type': 'MultiPolygon', 'coordinates': geom[0]})) + centr = GEOSGeometry(json.dumps({'type': 'Point', 'coordinates': geom[1]})) + pt = GEOSGeometry(json.dumps({'type': 'Point', 'coordinates': geom[2]})) + geoms.append([poly, centr, pt]) + ope_pt = Operation.objects.get(pk=ope_pks[0]) + self.assertPt(ope_pt, geoms[0]) + ope_poly = Operation.objects.get(pk=ope_pks[1]) + self.assertPoly(ope_poly, geoms[0]) + + cr_poly_poly = ope_poly.context_record.all()[0] + self.assertPoly(cr_poly_poly, geoms[1]) + cr_poly_pt = ope_poly.context_record.all()[1] + self.assertPt(cr_poly_pt, geoms[1]) + cr_pt_poly = ope_pt.context_record.all()[0] + self.assertPoly(cr_pt_poly, geoms[1], geoms[0][2]) + cr_pt_pt = ope_pt.context_record.all()[1] + self.assertPt(cr_pt_pt, geoms[1]) + + self.assertPt(cr_pt_pt.base_finds.all()[0], geoms[2]) + self.assertPoly(cr_pt_pt.base_finds.all()[1], geoms[2], geoms[1][2]) + self.assertPt(cr_poly_pt.base_finds.all()[0], geoms[2]) + self.assertPoly(cr_poly_pt.base_finds.all()[1], geoms[2], geoms[1][2]) + self.assertPt(cr_pt_poly.base_finds.all()[0], geoms[2]) + self.assertPoly(cr_pt_poly.base_finds.all()[1], geoms[2], geoms[0][2]) + self.assertPt(cr_poly_poly.base_finds.all()[0], geoms[2]) + self.assertPoly(cr_poly_poly.base_finds.all()[1], geoms[2]) + + diff --git a/ishtar_common/static/js/ishtar-map.js b/ishtar_common/static/js/ishtar-map.js index 4d6ebcd48..00aadfd9b 100644 --- a/ishtar_common/static/js/ishtar-map.js +++ b/ishtar_common/static/js/ishtar-map.js @@ -684,31 +684,23 @@ var display_geo_items = function(map_id, base_url, slug, pk, if (httpRequest.readyState === XMLHttpRequest.DONE) { if (httpRequest.status === 200) { geo_items = to_geo_items(JSON.parse(httpRequest.responseText), slug, disp_cr, disp_bf) + console.log('geoitems') + console.log(geo_items) if (current_test) { geo_items_features[map_id] = []; } - var feat = null; - for (geo_item of geo_items['base-finds']) { - if (get_poly) { - feat = display_associated_polys(map_id, geo_item, 'basefind'); - } else { - feat = display_associated_points(map_id, geo_item, 'basefind'); - } - if (current_test) { - geo_items_features[map_id].push(feat); - } - } - for (geo_item of geo_items['context-records']) { - if (get_poly) { - feat = display_associated_polys(map_id, geo_item, 'contextrecord'); - } else { - feat = display_associated_points(map_id, geo_item, 'contextrecord'); - } - if (current_test) { - geo_items_features[map_id].push(feat); - } + let bfs = null; + let crs = null; + if (get_poly) { + bfs = display_associated_polys(map_id, geo_items['base-finds'], 'basefind'); + crs = display_associated_polys(map_id, geo_items['context-records'], 'contextrecord'); + } else { + bfs = display_associated_points(map_id, geo_items['base-finds'], 'basefind'); + crs = display_associated_points(map_id, geo_items['context-records'], 'contextrecord'); } if (current_test) { + geo_items_features[map_id].push(bfs) + geo_items_features[map_id].push(crs) $("#http-geo-items-ready").show(); } } else { return; } @@ -719,21 +711,26 @@ var display_geo_items = function(map_id, base_url, slug, pk, }; var to_geo_items = function (obj, slug, disp_cr, disp_bf) { - const objects = {'context-records': [], 'base-finds': []}; + const objects = {'context-records': {'features': [], 'type': 'FeatureCollection'}, + 'base-finds': {'features': [], 'type': 'FeatureCollection'}}; if (slug === "operation") { const crs = obj['properties']['context-records']; for (const cr of crs['features']) { - if (disp_bf) { - objects['base-finds'].push(cr['properties']['base-finds']) + if (disp_bf) {console.log(cr); + for (const bf of cr['properties']['base-finds']['features']) { + objects['base-finds']['features'].push(bf) + } } delete cr['properties']; - } - if (disp_cr) { - objects['context-records'].push(crs); + if (disp_cr) { + objects['context-records']['features'].push(cr) + } } } else { - objects['base-finds'].push(obj['properties']['base-finds']) + for (const bf of obj['properties']['base-finds']['features']) { + objects['base-finds']['features'].push(bf) + } } return objects; } @@ -780,9 +777,9 @@ var get_associated_context_record_style = function (feature) { }; var display_associated_points = function (map_id, points, slug) { - //console.log('geo items points') - //console.log(points); - /*_point_features = geojson_format.readFeatures(points); + console.log('geo items points') + console.log(points); + _point_features = geojson_format.readFeatures(points); _cluster_source = new ol.source.Cluster({ distance: 40, source: new ol.source.Vector() @@ -799,7 +796,7 @@ var display_associated_points = function (map_id, points, slug) { style: style }); map[map_id].addLayer(_cluster_layer); - return _point_features;*/ + return _point_features; } // for test purpose diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index 1ab718590..33a7bf2dc 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -3137,7 +3137,6 @@ class SeleniumTests(StaticLiveServerTestCase): from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC - from archaeological_operations.models import Operation @classmethod def setUpClass(cls): @@ -3177,10 +3176,20 @@ class SeleniumTests(StaticLiveServerTestCase): ope1 = create_operation(self.user) ope2 = create_operation(self.user) - GeomaticFindsTest.create_cr_with_bfs(ope1, "Point", "Point", ["Polygon", "Point"], "CR Pt Poly Pt") - GeomaticFindsTest.create_cr_with_bfs(ope1, "Point", "Polygon", ["Polygon", "Point"], "CR Poly Poly Pt") - GeomaticFindsTest.create_cr_with_bfs(ope2, "Polygon", "Point", ["Polygon", "Point"], "CR Pt Poly Pt") - GeomaticFindsTest.create_cr_with_bfs(ope2, "Polygon", "Polygon", ["Polygon", "Point"], "CR Poly Poly Pt") + pks = {'ope': {'Pt': ope1.pk, 'Poly': ope2.pk}, 'cr': {}, 'bf': {}} + + def merge_pks(dic1, dic2): + for key in dic2.keys(): + for label in dic2[key]: + dic1[key][label] = dic2[key][label] + + merge_pks(pks, GeomaticFindsTest.create_cr_with_bfs(ope1, "Point", "Point", ["Polygon", "Point"], "CR Pt Pt")) + merge_pks(pks, GeomaticFindsTest.create_cr_with_bfs(ope1, "Point", "Polygon", ["Polygon", "Point"], "CR Pt Poly")) + merge_pks(pks, GeomaticFindsTest.create_cr_with_bfs(ope2, "Polygon", "Point", ["Polygon", "Point"], "CR Poly Pt")) + merge_pks(pks, GeomaticFindsTest.create_cr_with_bfs(ope2, "Polygon", "Polygon", ["Polygon", "Point"], "CR Poly Poly")) + + print('PKS AAAAAAAAAAAAAAAAA') + print(pks) geom_ope = [ [[[[1, 1], [5, 1], [5, 5], [1, 5], [1, 1]], [[2, 2], [2, 3], [3, 3], [3, 2], [2, 2]]], @@ -3191,7 +3200,7 @@ class SeleniumTests(StaticLiveServerTestCase): geom_cr = [ [[[[2, 1], [5, 1], [5, 5], [1, 5], [2, 1]], [[2, 2], [2, 3], [3, 3], [3, 2], [2, 2]]], [[[6, 3], [9, 2], [9, 4], [6, 3]]]], - [3.86111, 3.02778], #TODO: change it + [4.17708, 3.11458], [3.9, 3] ] geom_bf = [ @@ -3200,7 +3209,8 @@ class SeleniumTests(StaticLiveServerTestCase): [4.42105, 2.73684], [3.9, 2.9] ] - return [geom_ope, geom_cr, geom_bf] + return [geom_ope, geom_cr, geom_bf], [ope1.pk, ope2.pk] + def scroll(self, element): self.selenium.execute_script( |