From ee582ddf45838a65edc523ecb7c1729e256b4055 Mon Sep 17 00:00:00 2001 From: Azgaar Date: Tue, 28 Sep 2021 21:47:54 +0300 Subject: [PATCH] markers - auto-update on load --- modules/export.js | 4 ++-- modules/load.js | 43 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/modules/export.js b/modules/export.js index 27014e65..48068502 100644 --- a/modules/export.js +++ b/modules/export.js @@ -453,11 +453,11 @@ function saveGeoJSON_Markers() { track("export", "getJSON markers"); const features = pack.markers.map(marker => { - const {i, type, icon, x, y, size, fill, stroke, size} = marker; + const {i, type, icon, x, y, size, fill, stroke} = marker; const coordinates = getQGIScoordinates(x, y); const id = `marker${i}`; const note = notes.find(note => note.id === id); - const properties = {id, type, icon, ...note, size, fill, stroke, size}; + const properties = {id, type, icon, ...note, size, fill, stroke}; return {type: "Feature", geometry: {type: "Point", coordinates}, properties}; }); diff --git a/modules/load.js b/modules/load.js index 93af386a..5f3ce90e 100644 --- a/modules/load.js +++ b/modules/load.js @@ -872,7 +872,48 @@ function parseLoadedData(data) { if (version < 1.7) { // v 1.7 changed markers data - // TODO: get markers data from svg + const defs = document.getElementById("defs-markers"); + const markersGroup = document.getElementById("markers"); + const markerElements = markersGroup.querySelectorAll("use"); + + pack.markers = Array.from(markerElements).map((el, i) => { + const id = el.getAttribute("id"); + const note = notes.find(note => note.id === id); + if (note) note.id = `marker${i}`; + + const x = rn(+el.dataset.x, 1); + const y = rn(+el.dataset.y, 1); + const cell = findCell(x, y); + const size = rn(el.dataset.size * 30, 1); + + const href = el.href.baseVal; + const type = href.replace("#marker_", ""); + const symbol = defs.querySelector(`symbol${href}`); + const text = symbol.querySelector("text"); + const circle = symbol.querySelector("circle"); + + const icon = text.innerHTML; + const px = Number(text.getAttribute("font-size")?.replace("px", "")); + const dx = Number(text.getAttribute("x")?.replace("%", "")); + const dy = Number(text.getAttribute("y")?.replace("%", "")); + const fill = circle.getAttribute("fill"); + const stroke = circle.getAttribute("stroke"); + + const marker = {i, icon, type, x, y, size, cell}; + if (size && size !== 30) marker.size = size; + if (!isNaN(px) && px !== 12) marker.px = px; + if (!isNaN(dx) && dx !== 50) marker.dx = dx; + if (!isNaN(dy) && dy !== 50) marker.dy = dy; + if (fill && fill !== "#ffffff") marker.fill = fill; + if (stroke && stroke !== "#000000") marker.stroke = stroke; + + return marker; + }); + + markersGroup.style.display = null; + defs.remove(); + markerElements.forEach(el => el.remove()); + if (layerIsOn("markers")) drawMarkers(); } })();