You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
433 lines
11 KiB
433 lines
11 KiB
var geoJsonGroup = new L.LayerGroup(); |
|
var layerControls = {}; |
|
var layersList = [ |
|
{ |
|
code: "POSEIDON", |
|
name: "Poseidon Stations", |
|
geotype: 'point', |
|
style: { |
|
radius: 8, |
|
fillColor: "#ff7800", |
|
color: "#000", |
|
weight: 1, |
|
opacity: 1, |
|
fillOpacity: 0.8 |
|
}, |
|
format: 'geojson', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
name: "ARGO Stations", |
|
code: "argo_stations", |
|
format: 'geojson', |
|
geotype: 'linestring', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
name: "WFD Stations", |
|
code: "coastal_wfd", |
|
format: 'geojson', |
|
geotype: 'point', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
name: "Beach Stations", |
|
code: "beach_stations", |
|
format: 'geojson', |
|
geotype: 'point', |
|
style: { |
|
radius: 8, |
|
fillColor: "#ff7800", |
|
color: "#000", |
|
weight: 1, |
|
opacity: 1, |
|
fillOpacity: 0.8 |
|
}, |
|
active: false, |
|
leafletid: null |
|
},{ |
|
name: "Open Sea Stations", |
|
code: "cruise_stations", |
|
format: 'geojson', |
|
geotype: 'point', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "cruise_2018", |
|
name: "Cruise 2018", |
|
format: 'geojson', |
|
geotype: 'linestring', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "cruise_2019_a", |
|
name: "Cruise 2019 A", |
|
format: 'geojson', |
|
geotype: 'linestring', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "cruise_2019_b", |
|
format: 'geojson', |
|
geotype: 'linestring', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "cruise_2020_a", |
|
format: 'geojson', |
|
geotype: 'linestring', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "cruise_2020_b", |
|
format: 'geojson', |
|
geotype: 'linestring', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "cruise_2021_a", |
|
format: 'geojson', |
|
geotype: 'linestring', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "cruise_2021_b", |
|
format: 'geojson', |
|
geotype: 'linestring', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "cruise_2019_a_inale", |
|
format: 'geojson', |
|
geotype: 'linestring', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "cruise_2019_b_inale", |
|
format: 'geojson', |
|
geotype: 'linestring', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "cruise_2021_a_inale", |
|
format: 'geojson', |
|
geotype: 'linestring', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "cruise_2021_b_inale", |
|
format: 'geojson', |
|
geotype: 'linestring', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "cruise_2021_c_inale", |
|
format: 'geojson', |
|
geotype: 'linestring', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "grid_10km_3035", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "grid_25km_3035", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
name: 'Marine Natura Sites (Monitored under D1)', |
|
code: "v_marine_natura2000_end2021_epsg3035_sitetype", //"marine_natura2000_end2021_epsg3035", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "ms_el_mediterranean_assessment_area", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "mad_el_ms_ad_adriatic_assessment_area", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "mic_el_ms_io_ionian_assessment_area", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "mal_el_ms_al_aegean_levantine_assessment_area", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
name: "Aegean-Levantine subregion – Aegean Sea", |
|
code: "mal_el_aa_ae_aegean_assessment_area", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
name: "Aegean-Levantine subregion – North Aegean Sea", |
|
code: "mal_el_aa_na_north_aegean_assessment_area", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
name: 'Aegean-Levantine subregion – Central and South Aegean Sea', |
|
code: "mal_el_aa_csa_central_south_aegean_assessment_area", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
name: 'Aegean-Levantine subregion - Levantine Sea', |
|
code: "mal_el_aa_le_levantine_assessment_area", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
name: "Coastal Waters", |
|
code: "v_el_mrus_nov2021_epsg3035_coastal_waters", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
name: 'Coastal Water Bodies (WFD)', |
|
code: "v_el_mrus_nov2021_epsg3035_coasts", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
name: "Territorial Waters", |
|
code: "v_el_mrus_nov2021_epsg3035_territorial", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
name: 'Territorial Part beyond Coastal Waters', |
|
code: "v_el_mrus_nov2021_epsg3035_territorial_from_coastal", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
name: 'Beyond Territorial Waters', |
|
code: "v_el_mrus_nov2021_epsg3035_beyond_territorial", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "mal_el_aa_na_north_aegean_assessment_area", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
code: "mal_el_aa_csa_central_south_aegean_assessment_area", |
|
format: 'image', |
|
active: false, |
|
leafletid: null |
|
},{ |
|
name: 'EMODNET Bathymetry', |
|
active: false, |
|
format: 'image', |
|
leafletid: null, |
|
code: 'DPTH' |
|
},{ |
|
name: 'EMODNET Habitats', |
|
active: false, |
|
format: 'image', |
|
leafletid: null, |
|
code: 'HABT' |
|
},{ |
|
name: 'EMODNET Chemistry', |
|
active: false, |
|
format: 'image', |
|
leafletid: null, |
|
code: 'CHEM' |
|
},{ |
|
name: 'EMODNET Chemistry', |
|
active: false, |
|
format: 'image', |
|
leafletid: null, |
|
code: 'CHEM_PHPL' |
|
},{ |
|
name: 'Probability of coralligenous habitat in the Mediterranean (MEDISEH)', |
|
active: false, |
|
format: 'image', |
|
leafletid: null, |
|
isProduct: true, |
|
endpoint: "https://ows.emodnet-seabedhabitats.eu/geoserver/emodnet_view_maplibrary/wms", |
|
legend: "https://ows.emodnet-seabedhabitats.eu/geoserver/emodnet_view_maplibrary/ows?service=WMS&request=GetLegendGraphic&format=image%2Fpng&width=20&height=20&layer=mediseh_cora", |
|
code: 'mediseh_cora' |
|
},{ |
|
name: 'Probability of maerl habitat in the Mediterranean (MEDISEH)', |
|
active: false, |
|
format: 'image', |
|
leafletid: null, |
|
isProduct: true, |
|
endpoint: "https://ows.emodnet-seabedhabitats.eu/geoserver/emodnet_view_maplibrary/wms", |
|
legend: "https://ows.emodnet-seabedhabitats.eu/geoserver/emodnet_view_maplibrary/ows?service=WMS&request=GetLegendGraphic&format=image%2Fpng&width=20&height=20&layer=mediseh_cora", |
|
code: 'mediseh_maerl' |
|
},{ |
|
name: 'Probability of Posidonia oceanica in the Mediterranean (MEDISEH)', |
|
active: false, |
|
format: 'image', |
|
leafletid: null, |
|
isProduct: true, |
|
endpoint: "https://ows.emodnet-seabedhabitats.eu/geoserver/emodnet_view_maplibrary/wms", |
|
legend: "https://ows.emodnet-seabedhabitats.eu/geoserver/emodnet_view_maplibrary/ows?service=WMS&request=GetLegendGraphic&format=image%2Fpng&width=20&height=20&layer=mediseh_posidonia", |
|
code: 'mediseh_posidonia' |
|
},{ |
|
name: 'Seagrass Meadows (<a target="_blank" class="is-link has-text-link" href="https://doi.org/10.1515/bot-2022-0011">citation</a>)', |
|
active: false, |
|
format: 'image', |
|
leafletid: null, |
|
code: 'greek_seagrass_meadows_v0906_espg3035', |
|
},{ |
|
name: 'Ecological Status', |
|
code: 'wfd_eco_status_', |
|
composite: true, |
|
minSuffix: '2018', |
|
maxSuffix: '2021', |
|
active: false, |
|
format: 'image', |
|
leafletid: null, |
|
},{ |
|
name: 'BMI Status', |
|
code: 'wfd_bmi_status_', |
|
minSuffix: '2018', |
|
maxSuffix: '2021', |
|
active: false, |
|
format: 'image', |
|
leafletid: null, |
|
},{ |
|
name: 'MA Status', |
|
code: 'wfd_ma_status_', |
|
minSuffix: '2018', |
|
maxSuffix: '2021', |
|
active: false, |
|
format: 'image', |
|
leafletid: null, |
|
},{ |
|
name: 'AN Status', |
|
code: 'wfd_an_status_', |
|
minSuffix: '2018', |
|
maxSuffix: '2021', |
|
active: false, |
|
format: 'image', |
|
leafletid: null, |
|
},{ |
|
name: 'Chl-a Status', |
|
code: 'wfd_chla_status_', |
|
minSuffix: '2018', |
|
maxSuffix: '2021', |
|
active: false, |
|
format: 'image', |
|
leafletid: null, |
|
},{ |
|
name: 'PCQI Status', |
|
code: 'wfd_pcqi_status_', |
|
minSuffix: '2018', |
|
maxSuffix: '2021', |
|
active: false, |
|
format: 'image', |
|
leafletid: null, |
|
},{ |
|
name: 'Chemi Status', |
|
code: 'wfd_chem_status_', |
|
minSuffix: '2018', |
|
maxSuffix: '2021', |
|
active: false, |
|
format: 'image', |
|
leafletid: null, |
|
},{ |
|
name: 'Annual Fisheries Production per year', |
|
code: 'AFPPY', |
|
active: false, |
|
format: 'image', |
|
leafletid: null |
|
} |
|
]; |
|
|
|
|
|
async function layerTreeSwitch(node) { |
|
const intId = node.data.code; |
|
// called everytime a layer is activated/deactivated |
|
if (typeof intId == 'undefined') { |
|
return; |
|
} |
|
const layer = await db.layers.where('code').equals(intId).first(); |
|
|
|
let leafletId = layer.leafletid; |
|
let l; |
|
if (!layer.active && node.checkStatus) { |
|
if (intId === 'DPTH') { |
|
l = getBathymetry(); |
|
mapL.on('click', e => { |
|
getDepthOnPoint(e.latlng); |
|
}); |
|
} else if (intId === 'HABT') { |
|
l = getHabitat(layer.code); |
|
} else if (layer.isProduct) { |
|
l = getProduct(layer); |
|
} else if (intId === 'AFPPY') { |
|
l = await getFisheriesProduct(); |
|
} else if (intId === 'PHPL') { |
|
l = getWMSSeries(node.checkStatus); |
|
} else if (intId.substr(0,3) === 'wfd') { |
|
l = getWFD(layer); |
|
} else if (layer.format === 'image') { |
|
l = L.tileLayer.betterWms(BASE_URL + '/geoserver/wms', { layers: intId, transparent: true, format: "image/png"}); |
|
} else { |
|
l = await fetchGeoJson(layer.code); |
|
console.debug(l); |
|
l.layerGroup = layer.code; |
|
console.debug("geojson layer: ", l); |
|
let options = {}; |
|
options.onEachFeature = onEachFeature; |
|
if (layer.geotype === 'point') { |
|
options.pointToLayer = function(feature, latlng) { |
|
return L.circleMarker(latlng, layer.style); |
|
}; |
|
} else if (layer.geotype === 'linestring') { |
|
options.style = function(feature, layer) { |
|
return styleLine(); |
|
} |
|
} |
|
l = L.geoJSON(l, options); |
|
} |
|
console.debug("wms layer: ", l); |
|
l.addTo(mapL); |
|
leafletId = l._leaflet_id; |
|
} else { |
|
console.debug("hide layer", layer.code); |
|
if (layer.format === 'geojson') |
|
mapL._layers[layer.leafletid].clearLayers(); |
|
try { |
|
mapL._layers[layer.leafletid].remove(); |
|
} catch (error) { |
|
console.log('no layer with that id'); |
|
} |
|
clearLegend(layer.code); |
|
mapL.off('click'); |
|
try { |
|
layerControls[layer.code].remove(); |
|
} catch (err) { |
|
console.log('layer has no controls'); |
|
} |
|
} |
|
db.layers.update(layer.id, {active: !layer.active, leafletid: leafletId}); |
|
|
|
return; |
|
} |
|
|
|
|
|
function clearLegend(layerCode) { |
|
try{ |
|
legends[layerCode].remove(); |
|
delete legends[layerCode]; |
|
} catch (error) { |
|
console.debug('layer has no legend'); |
|
} |
|
} |
|
|
|
|