diff --git a/package.json b/package.json index 579d7e3d..9bdd1304 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "leaflet.markercluster": "^1.5.3", "leaflet.path.drag": "0.0.6", "leaflet.photon": "0.9.1", - "osmtogeojson": "^3.0.0-beta.3", + "osmtogeojson": "^3.0.0-beta.5", "simple-statistics": "^7.8.3" }, "browserslist": [ diff --git a/umap/tests/fixtures/test_import_osm_relation.json b/umap/tests/fixtures/test_import_osm_relation.json new file mode 100644 index 00000000..a909b29a --- /dev/null +++ b/umap/tests/fixtures/test_import_osm_relation.json @@ -0,0 +1,130 @@ +{ + "version": 0.6, + "generator": "Overpass API 0.7.62.1 084b4234", + "osm3s": { + "timestamp_osm_base": "2024-07-09T21:12:25Z", + "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." + }, + "elements": [ + +{ + "type": "relation", + "id": 15612202, + "bounds": { + "minlat": 44.4954890, + "minlon": 4.4694996, + "maxlat": 44.5008991, + "maxlon": 4.4837427 + }, + "members": [ + { + "type": "way", + "ref": 923993108, + "role": "", + "geometry": [ + { "lat": 44.5008991, "lon": 4.4837427 }, + { "lat": 44.5005842, "lon": 4.4829595 } + ] + }, + { + "type": "way", + "ref": 152053540, + "role": "", + "geometry": [ + { "lat": 44.5005842, "lon": 4.4829595 }, + { "lat": 44.5004511, "lon": 4.4825203 }, + { "lat": 44.5003881, "lon": 4.4823967 }, + { "lat": 44.5003271, "lon": 4.4823127 } + ] + }, + { + "type": "way", + "ref": 152053454, + "role": "", + "geometry": [ + { "lat": 44.5003271, "lon": 4.4823127 }, + { "lat": 44.5000601, "lon": 4.4819984 } + ] + }, + { + "type": "way", + "ref": 1154990810, + "role": "", + "geometry": [ + { "lat": 44.4962236, "lon": 4.4723158 }, + { "lat": 44.4962813, "lon": 4.4723213 }, + { "lat": 44.4965874, "lon": 4.4721067 }, + { "lat": 44.4966180, "lon": 4.4720209 }, + { "lat": 44.4966410, "lon": 4.4718492 }, + { "lat": 44.4967328, "lon": 4.4717205 }, + { "lat": 44.4970542, "lon": 4.4715917 }, + { "lat": 44.4974522, "lon": 4.4713986 }, + { "lat": 44.4978195, "lon": 4.4710231 }, + { "lat": 44.4980338, "lon": 4.4707442 }, + { "lat": 44.4981945, "lon": 4.4704330 }, + { "lat": 44.4983016, "lon": 4.4701434 }, + { "lat": 44.4985006, "lon": 4.4697249 }, + { "lat": 44.4986383, "lon": 4.4695747 }, + { "lat": 44.4989138, "lon": 4.4694996 } + ] + }, + { + "type": "way", + "ref": 152053472, + "role": "", + "geometry": [ + { "lat": 44.5000601, "lon": 4.4819984 }, + { "lat": 44.5000206, "lon": 4.4819429 }, + { "lat": 44.4998592, "lon": 4.4817717 }, + { "lat": 44.4996283, "lon": 4.4814022 }, + { "lat": 44.4995821, "lon": 4.4813051 }, + { "lat": 44.4995458, "lon": 4.4811896 }, + { "lat": 44.4995458, "lon": 4.4811110 }, + { "lat": 44.4997535, "lon": 4.4799509 }, + { "lat": 44.4997865, "lon": 4.4798677 }, + { "lat": 44.4997766, "lon": 4.4798030 }, + { "lat": 44.4997370, "lon": 4.4797752 }, + { "lat": 44.4997008, "lon": 4.4797984 }, + { "lat": 44.4991997, "lon": 4.4811711 }, + { "lat": 44.4991601, "lon": 4.4812173 }, + { "lat": 44.4991074, "lon": 4.4812450 }, + { "lat": 44.4990612, "lon": 4.4812265 }, + { "lat": 44.4988799, "lon": 4.4811017 }, + { "lat": 44.4984513, "lon": 4.4806719 }, + { "lat": 44.4967173, "lon": 4.4791004 }, + { "lat": 44.4962100, "lon": 4.4785085 }, + { "lat": 44.4961073, "lon": 4.4783887 }, + { "lat": 44.4959557, "lon": 4.4780559 }, + { "lat": 44.4959290, "lon": 4.4778837 }, + { "lat": 44.4957377, "lon": 4.4775351 }, + { "lat": 44.4956229, "lon": 4.4772561 }, + { "lat": 44.4955081, "lon": 4.4768269 }, + { "lat": 44.4954890, "lon": 4.4764568 }, + { "lat": 44.4955540, "lon": 4.4759472 }, + { "lat": 44.4955923, "lon": 4.4755502 }, + { "lat": 44.4957071, "lon": 4.4750406 }, + { "lat": 44.4957721, "lon": 4.4746758 }, + { "lat": 44.4957874, "lon": 4.4741662 }, + { "lat": 44.4957683, "lon": 4.4726856 }, + { "lat": 44.4958219, "lon": 4.4725140 }, + { "lat": 44.4960783, "lon": 4.4723101 }, + { "lat": 44.4962084, "lon": 4.4722887 }, + { "lat": 44.4962236, "lon": 4.4723158 } + ] + } + ], + "tags": { + "ascent": "70", + "descent": "5", + "distance": "1.9", + "name": "Saint-Maurice d'Ibie - Petit Montagu", + "network": "lwn", + "network:type": "node_network", + "route": "hiking", + "survey:date": "2023-03-13", + "type": "route" + } +} + + ] +} diff --git a/umap/tests/integration/test_import.py b/umap/tests/integration/test_import.py index 94c62894..43ad2f83 100644 --- a/umap/tests/integration/test_import.py +++ b/umap/tests/integration/test_import.py @@ -585,3 +585,25 @@ def test_import_from_datasets(page, live_server, tilelayer, settings): expect(page.locator(".leaflet-marker-icon")).to_be_visible() page.get_by_role("button", name="Open browser").click() expect(page.locator("h5").get_by_text("Good data")).to_be_visible() + + +def test_import_osm_relation(tilelayer, live_server, page): + # Overpass query used for this data: + # [out:json][timeout:25];(relation(id:15612202)%20;);out%20geom; + page.goto(f"{live_server.url}/map/new/") + page.get_by_title("Open browser").click() + layers = page.locator(".umap-browser .datalayer") + paths = page.locator("path") + expect(paths).to_have_count(0) + expect(layers).to_have_count(0) + button = page.get_by_title("Import data") + expect(button).to_be_visible() + button.click() + textarea = page.locator(".umap-upload textarea") + file_path = Path(__file__).parent.parent / "fixtures/test_import_osm_relation.json" + textarea.fill(file_path.read_text()) + page.locator('select[name="format"]').select_option("osm") + page.get_by_role("button", name="Import data", exact=True).click() + # A layer and one path has been created + expect(layers).to_have_count(1) + expect(paths).to_have_count(1)