@@ -49,10 +49,22 @@ const lmeState = {
azureMapsKey : null ,
azureMapsKey : null ,
azureAttribution : null ,
azureAttribution : null ,
managerHighlight : null ,
managerHighlight : null ,
managerHighlightedObjectId : null ,
managerHighlightedCategoryKey : null ,
managerHighlightedParentKey : null ,
managerHighlightedParentRecords : null ,
managerHoveredParentKey : null ,
managerHoveredParentRecords : null ,
managerOutsideSelectionBound : false ,
managerHiddenObjects : new Map ( ) ,
managerHiddenObjects : new Map ( ) ,
managerHiddenObjectIds : new Set ( ) ,
managerHiddenObjectIds : new Set ( ) ,
managerHiddenMeasurementSummaryIds : new Set ( ) ,
managerHiddenMeasurementSideIds : new Set ( ) ,
managerHiddenCategories : new Set ( ) ,
managerHiddenCategories : new Set ( ) ,
managerObjectOrder : { }
managerObjectOrder : { } ,
managerCategoryNames : { } ,
managerExpandedRows : new Set ( ) ,
dotNetReference : null
} ;
} ;
// AdE publishes the cadastral WMS in ETRS89. WMS 1.1.1 keeps the longitude,
// AdE publishes the cadastral WMS in ETRS89. WMS 1.1.1 keeps the longitude,
@@ -76,6 +88,7 @@ window.lmeMap = {
setImportedSheetLayerVisible ,
setImportedSheetLayerVisible ,
setLayerOrder ,
setLayerOrder ,
refreshLayerManager ,
refreshLayerManager ,
clearLayerManagerSelection : clearManagerHighlight ,
setImportedMeasurementsVisible ,
setImportedMeasurementsVisible ,
setDrawingMeasurementsVisible ,
setDrawingMeasurementsVisible ,
addProjectMarker ,
addProjectMarker ,
@@ -104,7 +117,10 @@ window.lmeMap = {
showInfo : setInfo
showInfo : setInfo
} ;
} ;
function init ( ) {
function init ( dotNetReference ) {
if ( dotNetReference ) {
lmeState . dotNetReference = dotNetReference ;
}
if ( lmeState . map ) {
if ( lmeState . map ) {
return ;
return ;
}
}
@@ -188,6 +204,7 @@ function init() {
}
}
lmeState . map . on ( "click" , async event => {
lmeState . map . on ( "click" , async event => {
clearManagerHighlight ( ) ;
const info = await queryFeatureInfo ( event . latlng ) ;
const info = await queryFeatureInfo ( event . latlng ) ;
if ( info ) {
if ( info ) {
L . popup ( ) . setLatLng ( event . latlng ) . setContent ( info ) . openOn ( lmeState . map ) ;
L . popup ( ) . setLatLng ( event . latlng ) . setContent ( info ) . openOn ( lmeState . map ) ;
@@ -209,6 +226,21 @@ function init() {
closeCadastrePreview ( ) ;
closeCadastrePreview ( ) ;
}
}
} ) ;
} ) ;
if ( ! lmeState . managerOutsideSelectionBound ) {
document . addEventListener ( "pointerdown" , event => {
if ( ! lmeState . managerHighlightedObjectId && ! lmeState . managerHighlightedParentKey ) {
return ;
}
const selectedObject = event . target ? . closest ? . ( ".layer-manager-object" ) ;
const selectedParent = event . target ? . closest ? . ( "[data-highlight-key]" ) ;
if ( selectedObject ? . dataset . objectId === lmeState . managerHighlightedObjectId
|| selectedParent ? . dataset . highlightKey === lmeState . managerHighlightedParentKey ) {
return ;
}
clearManagerHighlight ( ) ;
} ) ;
lmeState . managerOutsideSelectionBound = true ;
}
setInfo ( "Mappa pronta: satellite + catasto AdE" ) ;
setInfo ( "Mappa pronta: satellite + catasto AdE" ) ;
}
}
@@ -1120,6 +1152,105 @@ function managedObjectLabel(record, index) {
return ` Oggetto ${ index + 1 } ` ;
return ` Oggetto ${ index + 1 } ` ;
}
}
function managedObjectEditableName ( record ) {
const properties = record ? . layer ? . feature ? . properties || { } ;
return properties . name || properties . Name || properties . label || properties . LABEL || "" ;
}
function managedObjectCanRename ( record ) {
return [ "drawings" , "imported" , "importedSheets" ] . includes ( record . categoryKey )
&& record . layer ? . feature ? . properties ;
}
function renameManagedObject ( record , index ) {
if ( ! managedObjectCanRename ( record ) ) {
return ;
}
const currentName = String ( managedObjectEditableName ( record ) || managedObjectLabel ( record , index ) ) . trim ( ) ;
const requestedName = window . prompt ( "Nuovo nome oggetto" , currentName ) ;
if ( requestedName === null ) {
return ;
}
const name = requestedName . trim ( ) . slice ( 0 , 120 ) ;
if ( ! name ) {
setInfo ( "Nome non modificato: inserisci un testo." ) ;
return ;
}
const properties = record . layer . feature . properties ;
properties . name = name ;
record . layer . lmeManagerLabel = record . categoryKey === "drawings" && record . layer instanceof L . Marker
? ` POI: ${ name } `
: null ;
updateStoredFeaturePopup ( record . layer ) ;
refreshImportedMeasurements ( ) ;
refreshDrawingMeasurements ( ) ;
refreshLayerManager ( ) ;
setInfo ( ` Oggetto rinominato: ${ name } . ` ) ;
}
function managedCategoryName ( category , records ) {
const storedName = lmeState . managerCategoryNames [ category . key ] ;
const featureName = records
. map ( record => record . layer ? . feature ? . properties ? . _lmeCategoryName )
. find ( Boolean ) ;
const name = String ( storedName || featureName || category . label ) . trim ( ) ;
if ( name !== category . label ) {
lmeState . managerCategoryNames [ category . key ] = name ;
}
return name ;
}
function managedCategoryCanRename ( category ) {
return [ "drawings" , "imported" , "importedSheets" ] . includes ( category . key ) ;
}
function renameManagedCategory ( category , records ) {
const currentName = managedCategoryName ( category , records ) ;
const requestedName = window . prompt ( "Nuovo nome gruppo" , currentName ) ;
if ( requestedName === null ) {
return ;
}
const name = requestedName . trim ( ) . slice ( 0 , 120 ) ;
if ( ! name ) {
setInfo ( "Nome non modificato: inserisci un testo." ) ;
return ;
}
lmeState . managerCategoryNames [ category . key ] = name ;
records . forEach ( record => {
if ( record . layer ? . feature ? . properties ) {
record . layer . feature . properties . _lmeCategoryName = name ;
}
} ) ;
refreshLayerManager ( ) ;
setInfo ( ` Gruppo rinominato: ${ name } . ` ) ;
}
function managedBlockName ( source , records ) {
return String ( records
. map ( record => record . layer ? . feature ? . properties ? . _lmeGroupName )
. find ( Boolean ) || source ) ;
}
function renameManagedBlock ( category , source , records ) {
const currentName = managedBlockName ( source , records ) ;
const requestedName = window . prompt ( "Nuovo nome gruppo" , currentName ) ;
if ( requestedName === null ) {
return ;
}
const name = requestedName . trim ( ) . slice ( 0 , 120 ) ;
if ( ! name ) {
setInfo ( "Nome non modificato: inserisci un testo." ) ;
return ;
}
records . forEach ( record => {
if ( record . layer ? . feature ? . properties ) {
record . layer . feature . properties . _lmeGroupName = name ;
}
} ) ;
refreshLayerManager ( ) ;
setInfo ( ` Gruppo rinominato: ${ name } . ` ) ;
}
function managedObjectDetails ( layer ) {
function managedObjectDetails ( layer ) {
const details = [ ] ;
const details = [ ] ;
const properties = layer ? . feature ? . properties || { } ;
const properties = layer ? . feature ? . properties || { } ;
@@ -1162,6 +1293,9 @@ function refreshLayerManager() {
if ( ! container || ! lmeState . map ) {
if ( ! container || ! lmeState . map ) {
return ;
return ;
}
}
captureLayerManagerExpansion ( container ) ;
const scrollHost = container . closest ( ".map-layer-panel" ) ;
const scrollTop = scrollHost ? . scrollTop || 0 ;
applyStoredLayerManagerVisibility ( ) ;
applyStoredLayerManagerVisibility ( ) ;
container . innerHTML = "" ;
container . innerHTML = "" ;
lmeState . managerRecords = new Map ( ) ;
lmeState . managerRecords = new Map ( ) ;
@@ -1181,6 +1315,13 @@ function refreshLayerManager() {
} ) ;
} ) ;
applyManagedVisualOrder ( container ) ;
applyManagedVisualOrder ( container ) ;
bindLayerManagerDrag ( container ) ;
bindLayerManagerDrag ( container ) ;
bindLayerManagerMoveButtons ( container ) ;
if ( scrollHost ) {
scrollHost . scrollTop = scrollTop ;
window . requestAnimationFrame ( ( ) => {
scrollHost . scrollTop = scrollTop ;
} ) ;
}
}
}
function renderLayerManagerCategory ( category , records ) {
function renderLayerManagerCategory ( category , records ) {
@@ -1188,12 +1329,27 @@ function renderLayerManagerCategory(category, records) {
group . className = "layer-manager-group" ;
group . className = "layer-manager-group" ;
group . dataset . dragType = "category" ;
group . dataset . dragType = "category" ;
group . dataset . categoryKey = category . key ;
group . dataset . categoryKey = category . key ;
const visible = ! lmeState . managerHiddenCategories . has ( category . key )
bindLayerManagerExpansion ( group , ` category: ${ category . key } ` ) ;
&& ( ! category . roots . length || category . roots . every ( layer => lmeState . map . hasLayer ( layer ) ) ) ;
const categoryName = managedCategoryName ( category , records ) ;
group . innerHTML = ` <summary><button type="button" class="layer-drag-handle" aria-label="Trascina gruppo">☰</button><input type="checkbox" ${ visible ? "checked" : "" } aria-label="Mostra ${ escapeHtml ( category . label ) } "><span class="layer-manager-title"> ${ escapeHtml ( category . label ) } </span><span class="layer-manager-count"> ${ records . length } </span></summary><div class="layer-manager-children"></div> ` ;
const renameButton = managedCategoryCanRename ( category )
? ` <button type="button" class="layer-rename-button" aria-label="Rinomina gruppo" title="Rinomina">Rinomina</button> `
: "" ;
group . classList . toggle ( "layer-manager-renamable" , Boolean ( renameButton ) ) ;
const visibleCount = records . filter ( record => ! lmeState . managerHiddenObjectIds . has ( record . id ) ) . length ;
const categoryVisible = ! lmeState . managerHiddenCategories . has ( category . key )
&& ( ! category . roots . length || category . roots . some ( layer => lmeState . map . hasLayer ( layer ) ) ) ;
const visible = categoryVisible ;
group . innerHTML = ` <summary><button type="button" class="layer-drag-handle" aria-label="Trascina gruppo">☰</button><input type="checkbox" ${ visible ? "checked" : "" } aria-label="Mostra ${ escapeHtml ( categoryName ) } "><span class="layer-manager-title"> ${ escapeHtml ( categoryName ) } </span> ${ renameButton } ${ layerManagerMoveButtons ( "gruppo" ) } <span class="layer-manager-count"> ${ records . length } </span></summary><div class="layer-manager-children"></div> ` ;
const checkbox = group . querySelector ( "input" ) ;
const checkbox = group . querySelector ( "input" ) ;
checkbox . indeterminate = categoryVisible && records . length > 0 && visibleCount < records . length ;
checkbox . addEventListener ( "click" , event => event . stopPropagation ( ) ) ;
checkbox . addEventListener ( "click" , event => event . stopPropagation ( ) ) ;
checkbox . addEventListener ( "change" , ( ) => setManagedCategoryVisible ( category , checkbox . checked ) ) ;
checkbox . addEventListener ( "change" , ( ) => setManagedCategoryVisible ( category , checkbox . checked ) ) ;
group . querySelector ( ".layer-rename-button" ) ? . addEventListener ( "click" , event => {
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
renameManagedCategory ( category , records ) ;
} ) ;
bindManagedParentHighlight ( group , ` category: ${ category . key } ` , records ) ;
const children = group . querySelector ( ".layer-manager-children" ) ;
const children = group . querySelector ( ".layer-manager-children" ) ;
if ( category . blocks ) {
if ( category . blocks ) {
const blocks = new Map ( ) ;
const blocks = new Map ( ) ;
@@ -1215,9 +1371,12 @@ function renderLayerManagerBlock(category, source, records) {
block . dataset . dragType = "block" ;
block . dataset . dragType = "block" ;
block . dataset . categoryKey = category . key ;
block . dataset . categoryKey = category . key ;
block . dataset . blockKey = source ;
block . dataset . blockKey = source ;
bindLayerManagerExpansion ( block , ` block: ${ category . key } : ${ source } ` ) ;
const visibleCount = records . filter ( record => ! lmeState . managerHiddenObjectIds . has ( record . id ) ) . length ;
const visibleCount = records . filter ( record => ! lmeState . managerHiddenObjectIds . has ( record . id ) ) . length ;
const visible = visibleCount === records . length ;
const visible = visibleCount === records . length ;
block . innerHTML = ` <summary><button type="button" class="layer-drag-handle" aria-label="Trascina blocco">☰</button><input type="checkbox" ${ visible ? "checked" : "" } aria-label="Mostra blocco"><span class="layer-manager-title"> ${ escapeHtml ( source ) } </span><span class="layer-manager-count"> ${ records . length } </span></summary><div class="layer-manager-children"></div> ` ;
const blockName = managedBlockName ( source , records ) ;
block . classList . add ( "layer-manager-renamable" ) ;
block . innerHTML = ` <summary><button type="button" class="layer-drag-handle" aria-label="Trascina blocco">☰</button><input type="checkbox" ${ visible ? "checked" : "" } aria-label="Mostra ${ escapeHtml ( blockName ) } "><span class="layer-manager-title"> ${ escapeHtml ( blockName ) } </span><button type="button" class="layer-rename-button" aria-label="Rinomina gruppo" title="Rinomina">Rinomina</button> ${ layerManagerMoveButtons ( "blocco" ) } <span class="layer-manager-count"> ${ records . length } </span></summary><div class="layer-manager-children"></div> ` ;
const checkbox = block . querySelector ( "input" ) ;
const checkbox = block . querySelector ( "input" ) ;
checkbox . indeterminate = visibleCount > 0 && ! visible ;
checkbox . indeterminate = visibleCount > 0 && ! visible ;
checkbox . addEventListener ( "click" , event => event . stopPropagation ( ) ) ;
checkbox . addEventListener ( "click" , event => event . stopPropagation ( ) ) ;
@@ -1225,6 +1384,12 @@ function renderLayerManagerBlock(category, source, records) {
records . forEach ( record => setManagedObjectVisible ( record , checkbox . checked , false ) ) ;
records . forEach ( record => setManagedObjectVisible ( record , checkbox . checked , false ) ) ;
refreshLayerManager ( ) ;
refreshLayerManager ( ) ;
} ) ;
} ) ;
block . querySelector ( ".layer-rename-button" ) . addEventListener ( "click" , event => {
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
renameManagedBlock ( category , source , records ) ;
} ) ;
bindManagedParentHighlight ( block , ` block: ${ category . key } : ${ source } ` , records ) ;
const children = block . querySelector ( ".layer-manager-children" ) ;
const children = block . querySelector ( ".layer-manager-children" ) ;
records . forEach ( ( record , index ) => children . appendChild ( renderLayerManagerObject ( record , index ) ) ) ;
records . forEach ( ( record , index ) => children . appendChild ( renderLayerManagerObject ( record , index ) ) ) ;
return block ;
return block ;
@@ -1233,13 +1398,25 @@ function renderLayerManagerBlock(category, source, records) {
function renderLayerManagerObject ( record , index ) {
function renderLayerManagerObject ( record , index ) {
const object = document . createElement ( "details" ) ;
const object = document . createElement ( "details" ) ;
object . className = "layer-manager-object" ;
object . className = "layer-manager-object" ;
if ( record . id === lmeState . managerHighlightedObjectId ) {
object . classList . add ( "layer-manager-object-selected" ) ;
}
object . dataset . dragType = "object" ;
object . dataset . dragType = "object" ;
object . dataset . objectId = record . id ;
object . dataset . objectId = record . id ;
bindLayerManagerExpansion ( object , ` object: ${ record . id } ` ) ;
const visible = ! lmeState . managerHiddenObjectIds . has ( record . id ) ;
const visible = ! lmeState . managerHiddenObjectIds . has ( record . id ) ;
object . innerHTML = ` <summary><button type="button" class="layer-drag-handle" aria-label="Trascina oggetto">☰</button><input type="checkbox" ${ visible ? "checked" : "" } aria-label="Mostra oggetto"><span class="layer-manager-title"> ${ escapeHtml ( managedObjectLabel ( record , index ) ) } </span><span class="layer-manager-count">› </span></summary><div class="layer-manager-details"></div> ` ;
const renameButton = managedObjectCanRename ( record )
? ` <button type="button" class="layer-rename-button" aria-label="Rinomina oggetto" title="Rinomina">Rinomina</button> `
: "" ;
object . innerHTML = ` <summary><button type="button" class="layer-drag-handle" aria-label="Trascina oggetto">☰</button><input type="checkbox" ${ visible ? "checked" : "" } aria-label="Mostra oggetto"><span class="layer-manager-title"> ${ escapeHtml ( managedObjectLabel ( record , index ) ) } </span> ${ renameButton } ${ layerManagerMoveButtons ( "oggetto" ) } <span class="layer-manager-count">› </span></summary><div class="layer-manager-details"></div> ` ;
const checkbox = object . querySelector ( "input" ) ;
const checkbox = object . querySelector ( "input" ) ;
checkbox . addEventListener ( "click" , event => event . stopPropagation ( ) ) ;
checkbox . addEventListener ( "click" , event => event . stopPropagation ( ) ) ;
checkbox . addEventListener ( "change" , ( ) => setManagedObjectVisible ( record , checkbox . checked , true ) ) ;
checkbox . addEventListener ( "change" , ( ) => setManagedObjectVisible ( record , checkbox . checked , true ) ) ;
object . querySelector ( ".layer-rename-button" ) ? . addEventListener ( "click" , event => {
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
renameManagedObject ( record , index ) ;
} ) ;
object . querySelector ( ".layer-manager-title" ) . addEventListener ( "click" , event => {
object . querySelector ( ".layer-manager-title" ) . addEventListener ( "click" , event => {
event . preventDefault ( ) ;
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
event . stopPropagation ( ) ;
@@ -1247,13 +1424,137 @@ function renderLayerManagerObject(record, index) {
highlightManagedObject ( record ) ;
highlightManagedObject ( record ) ;
} ) ;
} ) ;
const details = object . querySelector ( ".layer-manager-details" ) ;
const details = object . querySelector ( ".layer-manager-details" ) ;
details . appendChild ( renderLayerManagerVisibilityOption (
geometryVisibilityLabel ( record . layer ) ,
visible ,
checked => setManagedObjectVisible ( record , checked , true ) ) ) ;
if ( supportsManagedMeasurements ( record ) ) {
managedMeasurementKinds ( record ) . forEach ( kind => {
const measurementsVisible = managedMeasurementsGloballyVisible ( record . categoryKey )
&& ! managedMeasurementHiddenSet ( kind . key ) . has ( record . id ) ;
details . appendChild ( renderLayerManagerVisibilityOption (
kind . label ,
measurementsVisible ,
checked => setManagedMeasurementKindVisible ( record , kind . key , checked ) ) ) ;
} ) ;
}
const rows = managedObjectDetails ( record . layer ) ;
const rows = managedObjectDetails ( record . layer ) ;
details . innerHTML = rows . length
const info = document . createElement ( "div" ) ;
info . className = "layer-manager-info" ;
info . innerHTML = rows . length
? rows . map ( value => ` <span> ${ escapeHtml ( value ) } </span> ` ) . join ( "" )
? rows . map ( value => ` <span> ${ escapeHtml ( value ) } </span> ` ) . join ( "" )
: "<span>Nessuna misura disponibile</span>" ;
: "<span>Nessuna misura disponibile</span>" ;
details . appendChild ( info ) ;
return object ;
return object ;
}
}
function renderLayerManagerVisibilityOption ( label , checked , onChange ) {
const option = document . createElement ( "label" ) ;
option . className = "layer-manager-suboption" ;
option . innerHTML = ` <input type="checkbox" ${ checked ? "checked" : "" } ><span> ${ escapeHtml ( label ) } </span> ` ;
const checkbox = option . querySelector ( "input" ) ;
checkbox . addEventListener ( "click" , event => event . stopPropagation ( ) ) ;
checkbox . addEventListener ( "change" , ( ) => onChange ( checkbox . checked ) ) ;
return option ;
}
function geometryVisibilityLabel ( layer ) {
if ( layer instanceof L . Polygon || layer instanceof L . Circle ) {
return "Area/geometria sulla mappa" ;
}
if ( layer instanceof L . Polyline ) {
return "Linea sulla mappa" ;
}
return "Punto sulla mappa" ;
}
function supportsManagedMeasurements ( record ) {
return [ "imported" , "drawings" ] . includes ( record . categoryKey )
&& ( record . layer instanceof L . Circle
|| record . layer instanceof L . Polygon
|| record . layer instanceof L . Polyline ) ;
}
function managedMeasurementsGloballyVisible ( categoryKey ) {
return categoryKey === "imported"
? lmeState . showImportedMeasurements
: lmeState . showDrawingMeasurements ;
}
function managedMeasurementKinds ( record ) {
if ( record . layer instanceof L . Polygon ) {
return [
{ key : "summary" , label : "Superficie e perimetro sulla mappa" } ,
{ key : "sides" , label : "Misure dei lati sulla mappa" }
] ;
}
if ( record . layer instanceof L . Circle ) {
return [ { key : "summary" , label : "Superficie, raggio e circonferenza sulla mappa" } ] ;
}
return [
{ key : "summary" , label : "Lunghezza totale sulla mappa" } ,
{ key : "sides" , label : "Misure dei tratti sulla mappa" }
] ;
}
function managedMeasurementHiddenSet ( kind ) {
return kind === "sides"
? lmeState . managerHiddenMeasurementSideIds
: lmeState . managerHiddenMeasurementSummaryIds ;
}
function setManagedMeasurementKindVisible ( record , kind , visible ) {
const hiddenSet = managedMeasurementHiddenSet ( kind ) ;
if ( visible ) {
if ( ! managedMeasurementsGloballyVisible ( record . categoryKey ) ) {
lmeState . managerRecords . forEach ( candidate => {
if ( candidate . categoryKey === record . categoryKey
&& supportsManagedMeasurements ( candidate ) ) {
lmeState . managerHiddenMeasurementSummaryIds . add ( candidate . id ) ;
lmeState . managerHiddenMeasurementSideIds . add ( candidate . id ) ;
}
} ) ;
if ( record . categoryKey === "imported" ) {
lmeState . showImportedMeasurements = true ;
} else {
lmeState . showDrawingMeasurements = true ;
}
void lmeState . dotNetReference ? . invokeMethodAsync (
"SetMeasurementsFromLayerManager" ,
record . categoryKey ,
true ) ;
}
hiddenSet . delete ( record . id ) ;
} else {
hiddenSet . add ( record . id ) ;
}
refreshImportedMeasurements ( ) ;
refreshDrawingMeasurements ( ) ;
refreshLayerManager ( ) ;
}
function captureLayerManagerExpansion ( container ) {
container . querySelectorAll ( "details[data-expansion-key]" ) . forEach ( row => {
if ( row . open ) {
lmeState . managerExpandedRows . add ( row . dataset . expansionKey ) ;
} else {
lmeState . managerExpandedRows . delete ( row . dataset . expansionKey ) ;
}
} ) ;
}
function bindLayerManagerExpansion ( row , key ) {
row . dataset . expansionKey = key ;
row . open = lmeState . managerExpandedRows . has ( key ) ;
row . addEventListener ( "toggle" , ( ) => {
if ( row . open ) {
lmeState . managerExpandedRows . add ( key ) ;
} else {
lmeState . managerExpandedRows . delete ( key ) ;
}
} ) ;
}
function setManagedCategoryVisible ( category , visible ) {
function setManagedCategoryVisible ( category , visible ) {
if ( category . key === "imported" ) {
if ( category . key === "imported" ) {
lmeState . importedVisible = visible ;
lmeState . importedVisible = visible ;
@@ -1267,7 +1568,10 @@ function setManagedCategoryVisible(category, visible) {
if ( visible ) {
if ( visible ) {
lmeState . managerHiddenCategories . delete ( category . key ) ;
lmeState . managerHiddenCategories . delete ( category . key ) ;
category . roots . forEach ( layer => {
category . roots . forEach ( layer => {
if ( layer && ! lmeState . map . hasLayer ( layer ) ) {
const objectId = managedLayerId ( layer , category . key ) ;
if ( layer
&& ! lmeState . managerHiddenObjectIds . has ( objectId )
&& ! lmeState . map . hasLayer ( layer ) ) {
layer . addTo ( lmeState . map ) ;
layer . addTo ( lmeState . map ) ;
}
}
} ) ;
} ) ;
@@ -1278,15 +1582,23 @@ function setManagedCategoryVisible(category, visible) {
lmeState . map . removeLayer ( layer ) ;
lmeState . map . removeLayer ( layer ) ;
}
}
} ) ;
} ) ;
if ( lmeState . managerHighlightedCategoryKey === category . key ) {
clearManagerHighlight ( ) ;
}
}
}
saveLayerManagerState ( ) ;
saveLayerManagerState ( ) ;
refreshImportedMeasurements ( ) ;
refreshDrawingMeasurements ( ) ;
refreshLayerManager ( ) ;
}
}
function setManagedObjectVisible ( record , visible , refresh = true ) {
function setManagedObjectVisible ( record , visible , refresh = true ) {
if ( visible ) {
if ( visible ) {
const hidden = lmeState . managerHiddenObjects . get ( record . id ) ;
const hidden = lmeState . managerHiddenObjects . get ( record . id ) ;
if ( hidden ) {
if ( hidden ) {
if ( hidden . parent !== lmeState . map || managedCategoryEnabled ( record . categoryKey ) ) {
hidden . parent . addLayer ( hidden . layer ) ;
hidden . parent . addLayer ( hidden . layer ) ;
}
lmeState . managerHiddenObjects . delete ( record . id ) ;
lmeState . managerHiddenObjects . delete ( record . id ) ;
}
}
lmeState . managerHiddenObjectIds . delete ( record . id ) ;
lmeState . managerHiddenObjectIds . delete ( record . id ) ;
@@ -1294,6 +1606,9 @@ function setManagedObjectVisible(record, visible, refresh = true) {
lmeState . managerHiddenObjects . set ( record . id , record ) ;
lmeState . managerHiddenObjects . set ( record . id , record ) ;
lmeState . managerHiddenObjectIds . add ( record . id ) ;
lmeState . managerHiddenObjectIds . add ( record . id ) ;
record . parent . removeLayer ( record . layer ) ;
record . parent . removeLayer ( record . layer ) ;
if ( lmeState . managerHighlightedObjectId === record . id ) {
clearManagerHighlight ( ) ;
}
}
}
saveLayerManagerState ( ) ;
saveLayerManagerState ( ) ;
refreshImportedMeasurements ( ) ;
refreshImportedMeasurements ( ) ;
@@ -1303,11 +1618,105 @@ function setManagedObjectVisible(record, visible, refresh = true) {
}
}
}
}
function managedCategoryEnabled ( categoryKey ) {
if ( lmeState . managerHiddenCategories . has ( categoryKey ) ) {
return false ;
}
if ( categoryKey === "gpsPosition" ) {
return lmeState . gpsPositionVisible ;
}
if ( categoryKey === "imported" ) {
return lmeState . importedVisible ;
}
if ( categoryKey === "importedSheets" ) {
return lmeState . importedSheetsVisible ;
}
if ( categoryKey === "selectedParcels" ) {
return lmeState . selectedParcelsVisible ;
}
return true ;
}
function highlightManagedObject ( record ) {
function highlightManagedObject ( record ) {
lmeState . managerHighlight . clearLayers ( ) ;
if ( lmeState . managerHighlightedObjectId === record . id ) {
const geojson = record . layer . toGeoJSON ? . ( ) ;
clearManagerHighlight ( ) ;
if ( geojson ) {
return ;
L . geoJSON ( geojson , {
}
clearManagerHighlight ( ) ;
lmeState . managerHighlightedObjectId = record . id ;
lmeState . managerHighlightedCategoryKey = record . categoryKey ;
document . querySelectorAll ( ".layer-manager-object" ) . forEach ( row => {
row . classList . toggle ( "layer-manager-object-selected" , row . dataset . objectId === record . id ) ;
} ) ;
renderManagerHighlight ( [ record ] ) ;
fitLayer ( record . layer ) ;
}
function bindManagedParentHighlight ( row , key , records ) {
const summary = row . querySelector ( ":scope > summary" ) ;
row . dataset . highlightKey = key ;
row . classList . toggle ( "layer-manager-parent-selected" , lmeState . managerHighlightedParentKey === key ) ;
if ( lmeState . managerHighlightedParentKey === key ) {
lmeState . managerHighlightedParentRecords = records ;
}
row . querySelector ( ":scope > summary > .layer-manager-title" ) . addEventListener ( "click" , event => {
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
row . open = true ;
highlightManagedParent ( row , key , records ) ;
} ) ;
summary . addEventListener ( "pointerenter" , ( ) => {
lmeState . managerHoveredParentKey = key ;
lmeState . managerHoveredParentRecords = records ;
row . classList . add ( "layer-manager-parent-highlighted" ) ;
renderManagerHighlight ( records ) ;
} ) ;
summary . addEventListener ( "pointerleave" , ( ) => {
if ( lmeState . managerHoveredParentKey !== key ) {
return ;
}
lmeState . managerHoveredParentKey = null ;
lmeState . managerHoveredParentRecords = null ;
row . classList . remove ( "layer-manager-parent-highlighted" ) ;
renderSelectedManagerHighlight ( ) ;
} ) ;
}
function highlightManagedParent ( row , key , records ) {
if ( lmeState . managerHighlightedParentKey === key ) {
clearManagerHighlight ( ) ;
return ;
}
clearManagerHighlight ( ) ;
lmeState . managerHighlightedParentKey = key ;
lmeState . managerHighlightedParentRecords = records ;
lmeState . managerHighlightedCategoryKey = records [ 0 ] ? . categoryKey || null ;
row . classList . add ( "layer-manager-parent-selected" ) ;
renderManagerHighlight ( records ) ;
}
function renderSelectedManagerHighlight ( ) {
if ( lmeState . managerHighlightedParentRecords ? . length ) {
renderManagerHighlight ( lmeState . managerHighlightedParentRecords ) ;
return ;
}
const selected = lmeState . managerRecords . get ( lmeState . managerHighlightedObjectId ) ;
renderManagerHighlight ( selected ? [ selected ] : [ ] ) ;
}
function renderManagerHighlight ( records ) {
lmeState . managerHighlight ? . clearLayers ( ) ;
const features = records . flatMap ( record => {
const geojson = record . layer ? . toGeoJSON ? . ( ) ;
if ( ! geojson ) {
return [ ] ;
}
return geojson . type === "FeatureCollection" ? geojson . features : [ geojson ] ;
} ) ;
if ( ! features . length ) {
return ;
}
L . geoJSON ( { type : "FeatureCollection" , features } , {
pane : "managerHighlightPane" ,
pane : "managerHighlightPane" ,
interactive : false ,
interactive : false ,
style : { color : "#ff00d4" , weight : 8 , opacity : 1 , fillColor : "#00fff0" , fillOpacity : 0.16 } ,
style : { color : "#ff00d4" , weight : 8 , opacity : 1 , fillColor : "#00fff0" , fillOpacity : 0.16 } ,
@@ -1322,7 +1731,28 @@ function highlightManagedObject(record) {
} )
} )
} ) . addTo ( lmeState . managerHighlight ) ;
} ) . addTo ( lmeState . managerHighlight ) ;
}
}
fitLayer ( record . layer ) ;
function clearManagerHighlight ( ) {
lmeState . managerHighlight ? . clearLayers ( ) ;
lmeState . managerHighlightedObjectId = null ;
lmeState . managerHighlightedCategoryKey = null ;
lmeState . managerHighlightedParentKey = null ;
lmeState . managerHighlightedParentRecords = null ;
lmeState . managerHoveredParentKey = null ;
lmeState . managerHoveredParentRecords = null ;
document . querySelectorAll ( ".layer-manager-object-selected" ) . forEach ( row => {
row . classList . remove ( "layer-manager-object-selected" ) ;
} ) ;
document . querySelectorAll ( ".layer-manager-parent-highlighted" ) . forEach ( row => {
row . classList . remove ( "layer-manager-parent-highlighted" ) ;
} ) ;
document . querySelectorAll ( ".layer-manager-parent-selected" ) . forEach ( row => {
row . classList . remove ( "layer-manager-parent-selected" ) ;
} ) ;
}
function layerManagerMoveButtons ( label ) {
return ` <span class="layer-move-buttons"><button type="button" class="layer-move-up" aria-label="Sposta ${ label } su" title="Sposta su">↑</button><button type="button" class="layer-move-down" aria-label="Sposta ${ label } giù" title="Sposta giù">↓</button></span> ` ;
}
}
function bindLayerManagerDrag ( container ) {
function bindLayerManagerDrag ( container ) {
@@ -1335,6 +1765,7 @@ function bindLayerManagerDrag(container) {
row . classList . add ( "layer-manager-dragging" ) ;
row . classList . add ( "layer-manager-dragging" ) ;
handle . setPointerCapture ? . ( event . pointerId ) ;
handle . setPointerCapture ? . ( event . pointerId ) ;
const move = moveEvent => {
const move = moveEvent => {
moveEvent . preventDefault ( ) ;
const target = document . elementFromPoint ( moveEvent . clientX , moveEvent . clientY ) ? . closest ( ` [data-drag-type=" ${ row . dataset . dragType } "] ` ) ;
const target = document . elementFromPoint ( moveEvent . clientX , moveEvent . clientY ) ? . closest ( ` [data-drag-type=" ${ row . dataset . dragType } "] ` ) ;
if ( ! target || target === row || target . parentElement !== list ) {
if ( ! target || target === row || target . parentElement !== list ) {
return ;
return ;
@@ -1344,14 +1775,37 @@ function bindLayerManagerDrag(container) {
} ;
} ;
const end = ( ) => {
const end = ( ) => {
row . classList . remove ( "layer-manager-dragging" ) ;
row . classList . remove ( "layer-manager-dragging" ) ;
handle . removeEventListener ( "pointermove" , move ) ;
handle . releasePointerCapture ? . ( event . pointerId ) ;
handle . removeEventListener ( "pointerup " , end ) ;
document . removeEventListener ( "pointermove " , move ) ;
handle . removeEventListener ( "pointercancel " , end ) ;
document . removeEventListener ( "pointerup " , end ) ;
document . removeEventListener ( "pointercancel" , end ) ;
applyLayerManagerDomOrder ( container ) ;
applyLayerManagerDomOrder ( container ) ;
} ;
} ;
handle . addEventListener ( "pointermove" , move ) ;
document . addEventListener ( "pointermove" , move , { passive : false } ) ;
handle . addEventListener ( "pointerup" , end ) ;
document . addEventListener ( "pointerup" , end ) ;
handle . addEventListener ( "pointercancel" , end ) ;
document . addEventListener ( "pointercancel" , end ) ;
} ) ;
} ) ;
}
function bindLayerManagerMoveButtons ( container ) {
container . querySelectorAll ( ".layer-move-up, .layer-move-down" ) . forEach ( button => {
button . addEventListener ( "click" , event => {
event . preventDefault ( ) ;
event . stopPropagation ( ) ;
const row = button . closest ( "[data-drag-type]" ) ;
const sibling = button . classList . contains ( "layer-move-up" )
? row . previousElementSibling
: row . nextElementSibling ;
if ( ! sibling || sibling . dataset . dragType !== row . dataset . dragType ) {
return ;
}
if ( button . classList . contains ( "layer-move-up" ) ) {
row . parentElement . insertBefore ( row , sibling ) ;
} else {
row . parentElement . insertBefore ( sibling , row ) ;
}
applyLayerManagerDomOrder ( container ) ;
} ) ;
} ) ;
} ) ;
} ) ;
}
}
@@ -1520,6 +1974,7 @@ function applyImportedSheetVisibility() {
function setImportedMeasurementsVisible ( enabled ) {
function setImportedMeasurementsVisible ( enabled ) {
lmeState . showImportedMeasurements = Boolean ( enabled ) ;
lmeState . showImportedMeasurements = Boolean ( enabled ) ;
refreshImportedMeasurements ( ) ;
refreshImportedMeasurements ( ) ;
refreshLayerManager ( ) ;
setInfo ( lmeState . showImportedMeasurements
setInfo ( lmeState . showImportedMeasurements
? "Misure dei file GIS visibili."
? "Misure dei file GIS visibili."
: "Misure dei file GIS nascoste." ) ;
: "Misure dei file GIS nascoste." ) ;
@@ -1528,6 +1983,7 @@ function setImportedMeasurementsVisible(enabled) {
function setDrawingMeasurementsVisible ( enabled ) {
function setDrawingMeasurementsVisible ( enabled ) {
lmeState . showDrawingMeasurements = Boolean ( enabled ) ;
lmeState . showDrawingMeasurements = Boolean ( enabled ) ;
refreshDrawingMeasurements ( ) ;
refreshDrawingMeasurements ( ) ;
refreshLayerManager ( ) ;
setInfo ( lmeState . showDrawingMeasurements
setInfo ( lmeState . showDrawingMeasurements
? "Misure dei disegni visibili."
? "Misure dei disegni visibili."
: "Misure dei disegni nascoste." ) ;
: "Misure dei disegni nascoste." ) ;
@@ -1785,7 +2241,7 @@ function renderMeasurements(sourceGroup, targetGroup, visible, sourceType) {
return ;
return ;
}
}
targetGroup . clearLayers ( ) ;
targetGroup . clearLayers ( ) ;
if ( ! visible ) {
if ( ! visible || ! lmeState . map . hasLayer ( sourceGroup ) ) {
return ;
return ;
}
}
@@ -1797,15 +2253,27 @@ function renderMeasurements(sourceGroup, targetGroup, visible, sourceType) {
sourceType
sourceType
} ;
} ;
visitMeasurableLayers ( sourceGroup , layer => {
visitMeasurableLayers ( sourceGroup , layer => {
const categoryKey = sourceType === "imported" ? "imported" : "drawings" ;
const objectId = managedLayerId ( layer , categoryKey ) ;
const showSummary = ! lmeState . managerHiddenMeasurementSummaryIds . has ( objectId ) ;
const showSides = ! lmeState . managerHiddenMeasurementSideIds . has ( objectId ) ;
if ( ! showSummary && ! showSides ) {
return ;
}
if ( context . count >= context . max || ! layerIsInView ( layer , context . bounds ) ) {
if ( context . count >= context . max || ! layerIsInView ( layer , context . bounds ) ) {
return ;
return ;
}
}
const layerContext = {
... context ,
showSummary ,
showSides : context . showSides && showSides
} ;
if ( layer instanceof L . Circle ) {
if ( layer instanceof L . Circle ) {
renderCircleMeasurement ( layer , targetGroup , context ) ;
renderCircleMeasurement ( layer , targetGroup , layerContext ) ;
} else if ( layer instanceof L . Polygon ) {
} else if ( layer instanceof L . Polygon ) {
renderPolygonMeasurement ( layer , targetGroup , context ) ;
renderPolygonMeasurement ( layer , targetGroup , layerContext ) ;
} else if ( layer instanceof L . Polyline ) {
} else if ( layer instanceof L . Polyline ) {
renderPolylineMeasurement ( layer , targetGroup , context ) ;
renderPolylineMeasurement ( layer , targetGroup , layerContext ) ;
}
}
} ) ;
} ) ;
}
}
@@ -1832,6 +2300,9 @@ function layerIsInView(layer, mapBounds) {
}
}
function renderCircleMeasurement ( layer , targetGroup , context ) {
function renderCircleMeasurement ( layer , targetGroup , context ) {
if ( ! context . showSummary ) {
return ;
}
const radius = layer . getRadius ( ) ;
const radius = layer . getRadius ( ) ;
const area = Math . PI * radius * radius ;
const area = Math . PI * radius * radius ;
const circumference = 2 * Math . PI * radius ;
const circumference = 2 * Math . PI * radius ;
@@ -1860,6 +2331,7 @@ function renderPolygonMeasurement(layer, targetGroup, context) {
const center = typeof layer . getCenter === "function"
const center = typeof layer . getCenter === "function"
? layer . getCenter ( )
? layer . getCenter ( )
: layer . getBounds ( ) . getCenter ( ) ;
: layer . getBounds ( ) . getCenter ( ) ;
if ( context . showSummary ) {
addMeasurementLabel (
addMeasurementLabel (
targetGroup ,
targetGroup ,
center ,
center ,
@@ -1867,6 +2339,7 @@ function renderPolygonMeasurement(layer, targetGroup, context) {
"summary" ,
"summary" ,
context ) ;
context ) ;
}
}
}
function renderPolylineMeasurement ( layer , targetGroup , context ) {
function renderPolylineMeasurement ( layer , targetGroup , context ) {
const lines = lineLatLngGroups ( layer . getLatLngs ( ) ) ;
const lines = lineLatLngGroups ( layer . getLatLngs ( ) ) ;
@@ -1875,7 +2348,7 @@ function renderPolylineMeasurement(layer, targetGroup, context) {
lines . forEach ( line => addSegmentLabels ( line , false , targetGroup , context ) ) ;
lines . forEach ( line => addSegmentLabels ( line , false , targetGroup , context ) ) ;
}
}
const longest = lines . reduce ( ( current , line ) => line . length > current . length ? line : current , [ ] ) ;
const longest = lines . reduce ( ( current , line ) => line . length > current . length ? line : current , [ ] ) ;
if ( longest . length ) {
if ( context . showSummary && longest . length ) {
addMeasurementLabel (
addMeasurementLabel (
targetGroup ,
targetGroup ,
longest [ Math . floor ( longest . length / 2 ) ] ,
longest [ Math . floor ( longest . length / 2 ) ] ,
@@ -2221,7 +2694,10 @@ function captureDisplayOptions() {
selectedParcelsVisible : lmeState . selectedParcelsVisible ,
selectedParcelsVisible : lmeState . selectedParcelsVisible ,
layerOrder : [ ... lmeState . layerOrder ] ,
layerOrder : [ ... lmeState . layerOrder ] ,
layerObjectOrder : { ... lmeState . managerObjectOrder } ,
layerObjectOrder : { ... lmeState . managerObjectOrder } ,
layerCategoryNames : { ... lmeState . managerCategoryNames } ,
hiddenLayerObjects : [ ... lmeState . managerHiddenObjectIds ] ,
hiddenLayerObjects : [ ... lmeState . managerHiddenObjectIds ] ,
hiddenLayerMeasurementSummaries : [ ... lmeState . managerHiddenMeasurementSummaryIds ] ,
hiddenLayerMeasurementSides : [ ... lmeState . managerHiddenMeasurementSideIds ] ,
hiddenLayerCategories : [ ... lmeState . managerHiddenCategories ] ,
hiddenLayerCategories : [ ... lmeState . managerHiddenCategories ] ,
trailEnabled : lmeState . gpsTrailEnabled
trailEnabled : lmeState . gpsTrailEnabled
} ;
} ;
@@ -2255,9 +2731,18 @@ function applyProjectDisplayOptions(options) {
if ( options . layerObjectOrder && typeof options . layerObjectOrder === "object" ) {
if ( options . layerObjectOrder && typeof options . layerObjectOrder === "object" ) {
lmeState . managerObjectOrder = options . layerObjectOrder ;
lmeState . managerObjectOrder = options . layerObjectOrder ;
}
}
if ( options . layerCategoryNames && typeof options . layerCategoryNames === "object" ) {
lmeState . managerCategoryNames = { ... options . layerCategoryNames } ;
}
if ( Array . isArray ( options . hiddenLayerObjects ) ) {
if ( Array . isArray ( options . hiddenLayerObjects ) ) {
lmeState . managerHiddenObjectIds = new Set ( options . hiddenLayerObjects ) ;
lmeState . managerHiddenObjectIds = new Set ( options . hiddenLayerObjects ) ;
}
}
if ( Array . isArray ( options . hiddenLayerMeasurementSummaries ) ) {
lmeState . managerHiddenMeasurementSummaryIds = new Set ( options . hiddenLayerMeasurementSummaries ) ;
}
if ( Array . isArray ( options . hiddenLayerMeasurementSides ) ) {
lmeState . managerHiddenMeasurementSideIds = new Set ( options . hiddenLayerMeasurementSides ) ;
}
if ( Array . isArray ( options . hiddenLayerCategories ) ) {
if ( Array . isArray ( options . hiddenLayerCategories ) ) {
lmeState . managerHiddenCategories = new Set ( options . hiddenLayerCategories ) ;
lmeState . managerHiddenCategories = new Set ( options . hiddenLayerCategories ) ;
}
}
@@ -2335,18 +2820,34 @@ function managedGroupGeoJson(group, categoryKey) {
}
}
} ) ;
} ) ;
} ) ;
} ) ;
const categoryName = lmeState . managerCategoryNames [ categoryKey ] ;
if ( categoryName ) {
features . forEach ( feature => {
feature . properties = { ... ( feature . properties || { } ) , _lmeCategoryName : categoryName } ;
} ) ;
}
return { type : "FeatureCollection" , features } ;
return { type : "FeatureCollection" , features } ;
}
}
function resetLayerManagerProjectState ( ) {
function resetLayerManagerProjectState ( ) {
lmeState . managerHiddenObjects . clear ( ) ;
lmeState . managerHiddenObjects . clear ( ) ;
lmeState . managerHiddenObjectIds . clear ( ) ;
lmeState . managerHiddenObjectIds . clear ( ) ;
lmeState . managerHiddenMeasurementSummaryIds . clear ( ) ;
lmeState . managerHiddenMeasurementSideIds . clear ( ) ;
lmeState . managerHiddenCategories . clear ( ) ;
lmeState . managerHiddenCategories . clear ( ) ;
lmeState . managerObjectOrder = { } ;
lmeState . managerObjectOrder = { } ;
lmeState . managerHighlight ? . clearLayers ( ) ;
lmeState . managerCategoryNames = { } ;
clearManagerHighlight ( ) ;
}
}
function clearManagedCategoryState ( categoryKey ) {
function clearManagedCategoryState ( categoryKey ) {
const category = layerManagerCategories ( ) . find ( item => item . key === categoryKey ) ;
if ( category ) {
managedRecordsForCategory ( category ) . forEach ( record => {
lmeState . managerHiddenMeasurementSummaryIds . delete ( record . id ) ;
lmeState . managerHiddenMeasurementSideIds . delete ( record . id ) ;
} ) ;
}
[ ... lmeState . managerHiddenObjects . entries ( ) ] . forEach ( ( [ id , record ] ) => {
[ ... lmeState . managerHiddenObjects . entries ( ) ] . forEach ( ( [ id , record ] ) => {
if ( record . categoryKey === categoryKey ) {
if ( record . categoryKey === categoryKey ) {
lmeState . managerHiddenObjects . delete ( id ) ;
lmeState . managerHiddenObjects . delete ( id ) ;
@@ -2358,10 +2859,18 @@ function clearManagedCategoryState(categoryKey) {
}
}
function bindStoredFeaturePopup ( feature , layer ) {
function bindStoredFeaturePopup ( feature , layer ) {
const properties = feature ? . properties || { } ;
updateStoredFeaturePopup ( layer , feature ? . properties ) ;
}
function updateStoredFeaturePopup ( layer , sourceProperties ) {
const properties = sourceProperties || layer ? . feature ? . properties || { } ;
const label = properties . name || properties . Name || properties . label || properties . LABEL ;
const label = properties . name || properties . Name || properties . label || properties . LABEL ;
if ( label ) {
if ( label ) {
layer . bindPopup ( ` <strong> ${ escapeHtml ( label ) } </strong> ` ) ;
layer . bindPopup ( ` <strong> ${ escapeHtml ( label ) } </strong> ` ) ;
return ;
}
if ( typeof layer ? . unbindPopup === "function" ) {
layer . unbindPopup ( ) ;
}
}
}
}
@@ -2809,11 +3318,11 @@ function onGpsPosition(position) {
}
}
function updateGpsPositionLayers ( latlng , accuracy ) {
function updateGpsPositionLayers ( latlng , accuracy ) {
if ( ! lmeState . gpsPositionVisible ) {
let created = false ;
return ;
}
if ( ! lmeState . gpsMarker ) {
if ( ! lmeState . gpsMarker ) {
lmeState . gpsMarker = L . marker ( latlng , { pane : "gpsPositionPane" , title : "La tua posizione" } ) ;
lmeState . gpsMarker = L . marker ( latlng , { pane : "gpsPositionPane" , title : "La tua posizione" } ) ;
lmeState . gpsMarker . lmeManagerId = "gps-position-marker" ;
lmeState . gpsMarker . lmeManagerLabel = "Posizione GPS" ;
lmeState . gpsAccuracy = L . circle ( latlng , {
lmeState . gpsAccuracy = L . circle ( latlng , {
pane : "gpsPositionPane" ,
pane : "gpsPositionPane" ,
radius : accuracy ,
radius : accuracy ,
@@ -2822,15 +3331,33 @@ function updateGpsPositionLayers(latlng, accuracy) {
fillColor : "#60a5fa" ,
fillColor : "#60a5fa" ,
fillOpacity : 0.16
fillOpacity : 0.16
} ) ;
} ) ;
lmeState . gpsAccuracy . lmeManagerId = "gps-accuracy-circle" ;
lmeState . gpsAccuracy . lmeManagerLabel = "Cerchio precisione GPS" ;
created = true ;
} else {
} else {
lmeState . gpsMarker . setLatLng ( latlng ) ;
lmeState . gpsMarker . setLatLng ( latlng ) ;
lmeState . gpsAccuracy . setLatLng ( latlng ) . setRadius ( accuracy ) ;
lmeState . gpsAccuracy . setLatLng ( latlng ) . setRadius ( accuracy ) ;
}
}
if ( ! lmeState . map . hasLayer ( lmeState . gpsMarker ) ) {
const categoryVisible = lmeState . gpsPositionVisible
&& ! lmeState . managerHiddenCategories . has ( "gpsPosition" ) ;
if ( categoryVisible
&& ! lmeState . managerHiddenObjectIds . has ( "gps-position-marker" )
&& ! lmeState . map . hasLayer ( lmeState . gpsMarker ) ) {
lmeState . gpsMarker . addTo ( lmeState . map ) ;
lmeState . gpsMarker . addTo ( lmeState . map ) ;
} else if ( ( ! categoryVisible || lmeState . managerHiddenObjectIds . has ( "gps-position-marker" ) )
&& lmeState . map . hasLayer ( lmeState . gpsMarker ) ) {
lmeState . map . removeLayer ( lmeState . gpsMarker ) ;
}
}
if ( ! lmeState . map . hasLayer ( lmeState . gpsAccuracy ) ) {
if ( categoryVisible
&& ! lmeState . managerHiddenObjectIds . has ( "gps-accuracy-circle" )
&& ! lmeState . map . hasLayer ( lmeState . gpsAccuracy ) ) {
lmeState . gpsAccuracy . addTo ( lmeState . map ) ;
lmeState . gpsAccuracy . addTo ( lmeState . map ) ;
} else if ( ( ! categoryVisible || lmeState . managerHiddenObjectIds . has ( "gps-accuracy-circle" ) )
&& lmeState . map . hasLayer ( lmeState . gpsAccuracy ) ) {
lmeState . map . removeLayer ( lmeState . gpsAccuracy ) ;
}
if ( created ) {
refreshLayerManager ( ) ;
}
}
}
}