Generate missing imported sheet outline
This commit is contained in:
1 parent
a9b1d74983
commit
e93dd9b867
5 files changed
+81
-17
No files matched your search
+71
-5
@@ -132,6 +132,8 @@ function init() {
|
||||
});
|
||||
|
||||
lmeState.currentBase = lmeState.baseLayers.satellite.addTo(lmeState.map);
|
||||
const importedSheetPane = lmeState.map.createPane("importedSheetPane");
|
||||
importedSheetPane.style.zIndex = "520";
|
||||
lmeState.imported = L.featureGroup().addTo(lmeState.map);
|
||||
lmeState.importedSheets = L.featureGroup();
|
||||
lmeState.drawings = L.featureGroup().addTo(lmeState.map);
|
||||
@@ -887,13 +889,76 @@ function setIncludeKmlSheetLayer(enabled) {
|
||||
function setImportedSheetLayerVisible(enabled) {
|
||||
migrateMisclassifiedImportedSheets();
|
||||
lmeState.importedSheetsVisible = Boolean(enabled);
|
||||
const generated = lmeState.importedSheetsVisible && ensureImportedSheetOutline();
|
||||
applyImportedSheetVisibility();
|
||||
const count = lmeState.importedSheets?.toGeoJSON()?.features?.length || 0;
|
||||
setInfo(lmeState.importedSheetsVisible
|
||||
? (count ? `Layer del foglio importato visibile (${count} elementi).` : "Nessun layer del foglio importato: ricarica il KML/KMZ con 'includi anche il layer del foglio' attivo.")
|
||||
? (count
|
||||
? `${generated ? "Cornice generata dai dati importati" : "Layer del foglio importato visibile"} (${count} elementi).`
|
||||
: "Nessun dato importato da cui ricavare la cornice del foglio.")
|
||||
: "Layer del foglio importato nascosto; le particelle restano visibili.");
|
||||
}
|
||||
|
||||
function ensureImportedSheetOutline() {
|
||||
if (!lmeState.imported || !lmeState.importedSheets) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const currentSheets = lmeState.importedSheets.toGeoJSON();
|
||||
const hasAreaOutline = (currentSheets.features || []).some(feature =>
|
||||
["Polygon", "MultiPolygon"].includes(feature?.geometry?.type));
|
||||
if (hasAreaOutline) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const imported = lmeState.imported.toGeoJSON();
|
||||
const points = collectGeoJsonCoordinates(imported);
|
||||
if (!points.length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const bounds = points.reduce((result, point) => ({
|
||||
west: Math.min(result.west, point[0]),
|
||||
south: Math.min(result.south, point[1]),
|
||||
east: Math.max(result.east, point[0]),
|
||||
north: Math.max(result.north, point[1])
|
||||
}), { west: Infinity, south: Infinity, east: -Infinity, north: -Infinity });
|
||||
if (!Number.isFinite(bounds.west)
|
||||
|| !Number.isFinite(bounds.south)
|
||||
|| bounds.east <= bounds.west
|
||||
|| bounds.north <= bounds.south) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const longitudePadding = Math.max((bounds.east - bounds.west) * 0.01, 0.000001);
|
||||
const latitudePadding = Math.max((bounds.north - bounds.south) * 0.01, 0.000001);
|
||||
const west = bounds.west - longitudePadding;
|
||||
const south = bounds.south - latitudePadding;
|
||||
const east = bounds.east + longitudePadding;
|
||||
const north = bounds.north + latitudePadding;
|
||||
addImportedSheetFeatures({
|
||||
type: "FeatureCollection",
|
||||
features: [{
|
||||
type: "Feature",
|
||||
properties: {
|
||||
name: "Cornice del foglio importato",
|
||||
_lmeGeneratedSheetOutline: true
|
||||
},
|
||||
geometry: {
|
||||
type: "Polygon",
|
||||
coordinates: [[
|
||||
[west, south],
|
||||
[east, south],
|
||||
[east, north],
|
||||
[west, north],
|
||||
[west, south]
|
||||
]]
|
||||
}
|
||||
}]
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
function migrateMisclassifiedImportedSheets() {
|
||||
if (!lmeState.imported || !lmeState.importedSheets) {
|
||||
return 0;
|
||||
@@ -928,8 +993,10 @@ function addImportedFeatures(geojson) {
|
||||
|
||||
function addImportedSheetFeatures(geojson) {
|
||||
return L.geoJSON(geojson || emptyFeatureCollection(), {
|
||||
pane: "importedSheetPane",
|
||||
style: { color: "#f59e0b", weight: 4, opacity: 1, fillOpacity: 0.03, dashArray: "10 6" },
|
||||
pointToLayer: (feature, latlng) => L.circleMarker(latlng, {
|
||||
pane: "importedSheetPane",
|
||||
radius: 7,
|
||||
color: "#f59e0b",
|
||||
fillColor: "#ffffff",
|
||||
@@ -948,10 +1015,6 @@ function applyImportedSheetVisibility() {
|
||||
lmeState.importedSheets.addTo(lmeState.map);
|
||||
}
|
||||
lmeState.importedSheets.bringToFront();
|
||||
lmeState.imported.bringToFront();
|
||||
lmeState.selectedParcelsLayer.bringToFront();
|
||||
lmeState.gpsParcelLayer.bringToFront();
|
||||
lmeState.drawings.bringToFront();
|
||||
return;
|
||||
}
|
||||
if (lmeState.map.hasLayer(lmeState.importedSheets)) {
|
||||
@@ -1568,6 +1631,9 @@ function loadProjectSnapshot(raw, projectName) {
|
||||
lmeState.importedSheetsVisible = projectDisplayOptions
|
||||
? Boolean(projectDisplayOptions.importedSheetsVisible)
|
||||
: data.schemaVersion >= 2 && Boolean(data.importedSheetsVisible);
|
||||
if (lmeState.importedSheetsVisible) {
|
||||
ensureImportedSheetOutline();
|
||||
}
|
||||
applyImportedSheetVisibility();
|
||||
L.geoJSON(data.selectedParcels || emptyFeatureCollection(), {
|
||||
style: { color: "#ef4444", weight: 4, opacity: 1, fillColor: "#fbbf24", fillOpacity: 0.26 },
|
||||
|
||||
Reference in new issue
Block a user