Fullstack Portal Created by the HCMR for the Marine Strategy Framework Directive Program in order to cover demands and aspects considering extendability and maintainability
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.

434 lines
11 KiB

2 years ago
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
2 years ago
},{
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'
2 years ago
},{
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'
2 years ago
},{
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'
2 years ago
},{
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',
2 years ago
active: false,
format: 'image',
leafletid: null,
},{
name: 'BMI Status',
code: 'wfd_bmi_status_',
minSuffix: '2018',
maxSuffix: '2021',
2 years ago
active: false,
format: 'image',
leafletid: null,
},{
name: 'MA Status',
code: 'wfd_ma_status_',
minSuffix: '2018',
maxSuffix: '2021',
2 years ago
active: false,
format: 'image',
leafletid: null,
},{
name: 'AN Status',
code: 'wfd_an_status_',
minSuffix: '2018',
maxSuffix: '2021',
2 years ago
active: false,
format: 'image',
leafletid: null,
},{
name: 'Chl-a Status',
code: 'wfd_chla_status_',
minSuffix: '2018',
maxSuffix: '2021',
2 years ago
active: false,
format: 'image',
leafletid: null,
},{
name: 'PCQI Status',
code: 'wfd_pcqi_status_',
minSuffix: '2018',
maxSuffix: '2021',
2 years ago
active: false,
format: 'image',
leafletid: null,
},{
name: 'Chemi Status',
code: 'wfd_chem_status_',
minSuffix: '2018',
maxSuffix: '2021',
2 years ago
active: false,
format: 'image',
leafletid: null,
},{
name: 'Annual Fisheries Production per year',
code: 'AFPPY',
active: false,
format: 'image',
leafletid: null
}
2 years ago
];
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();
2 years ago
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);
2 years ago
} 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);
2 years ago
} 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];
2 years ago
} catch (error) {
console.debug('layer has no legend');
}
}