Skip to content
Snippets Groups Projects
Commit 19255407 authored by Tor-Einar Skog's avatar Tor-Einar Skog
Browse files

Pulling data from all layers when user clicks on map

parent cf54c138
No related branches found
No related tags found
No related merge requests found
......@@ -51,6 +51,25 @@ function getCurrentVisibleOLLayer()
return layers[currentWMSLayer["ordering"]];
}
/**
* Used by displayQueryResult() to retrieve values from query templates when user clicks on the map
*
* @returns a list of the OpenLayers layers that are available for the current timestamp.
*
*/
function getLayersForCurrentTimestamp()
{
layerParams = WMSLayersDateBucket[currentTimestamp];
paramIdList = Object.keys(layerParams);
let layersForCurrentTimestamp = [];
for(let i=0; i< paramIdList.length; i++)
{
layersForCurrentTimestamp.push(layers[WMSLayersDateBucket[currentTimestamp][paramIdList[i]]["ordering"]]);
}
return layersForCurrentTimestamp;
}
async function initGridMap(inputModelId, mapAttribution) {
modelId = inputModelId;
......@@ -212,70 +231,76 @@ async function displayQueryResult(evt)
let coordinate = proj4(map.getView().getProjection().getCode(), 'EPSG:25833', evt.coordinate)
let currentWMSLayer = WMSLayersDateBucket[currentTimestamp][currentParameter];
let currentLayer = getCurrentVisibleOLLayer();
//console.info(currentLayer);
const url = currentLayer.getSource().getGetFeatureInfoUrl(
coordinate,
map.getView().getResolution(),
currentWMSLayer.CRS[0],
{ 'INFO_FORMAT': 'text/xml' }
);
//console.info(url);
let response = await fetch(url);
let responseXML = await response.text();
// User clicked outside of layer extent
if(responseXML.trim().length == 0)
// Need to get all layers for today, and combine results from querying all layers
let layersForCurrentTimestamp = getLayersForCurrentTimestamp();
let warningStatus = null;
let parameters = {};
for(let i=0;i<layersForCurrentTimestamp.length;i++)
{
return;
}
let currentLayer = layersForCurrentTimestamp[i];
const url = currentLayer.getSource().getGetFeatureInfoUrl(
coordinate,
map.getView().getResolution(),
currentWMSLayer.CRS[0],
{ 'INFO_FORMAT': 'text/xml' }
);
const parser = new DOMParser();
const xmlDOM = parser.parseFromString(responseXML,"text/xml");
const result = xmlDOM.getElementsByTagName("vipsResult")[0]
if(result) {
// We may or may not have warning status included
let warningStatus = xmlDOM.getElementsByTagName("warningStatus").length == 1 ? xmlDOM.getElementsByTagName("warningStatus")[0].getAttribute("value") : null;
if(warningStatus == -1)
{
return;
}
let parameters = {};
let parameterElements = xmlDOM.getElementsByTagName("parameter");
for(let i=0;i<parameterElements.length;i++)
let response = await fetch(url);
let responseXML = await response.text();
// User clicked outside of layer extent
if(responseXML.trim().length == 0)
{
parameters[parameterElements[i].getAttribute("name")] = parameterElements[i].getAttribute("value");
continue;
}
//console.info("warningStatus = " + warningStatus);
//console.info(parameters);
let warningStatusTitle = warningStatus == 0 ? "N/A"
: warningStatus == 1 ? "Missing data"
: warningStatus == 2 ? "No risk"
: warningStatus == 3 ? "Possible risk"
: warningStatus == 4 ? "High risk" : "";
let paramHTML = "<ul>";
paramCodes = Object.keys(parameters);
for(let i=0;i<paramCodes.length;i++)
{
paramHTML += "<li>" + paramCodes[i] + " = " + parameters[paramCodes[i]] + "</li>"
const parser = new DOMParser();
const xmlDOM = parser.parseFromString(responseXML,"text/xml");
const result = xmlDOM.getElementsByTagName("vipsResult")[0]
if(result) {
// We may or may not have warning status included
warningStatus = warningStatus == null ? (xmlDOM.getElementsByTagName("warningStatus").length == 1 ? xmlDOM.getElementsByTagName("warningStatus")[0].getAttribute("value") : null) : warningStatus;
// User clicked on invisible/invalid part of the layer
if(warningStatus == -1)
{
continue;
}
let parameterElements = xmlDOM.getElementsByTagName("parameter");
for(let i=0;i<parameterElements.length;i++)
{
parameters[parameterElements[i].getAttribute("name")] = parameterElements[i].getAttribute("value");
}
}
paramHTML += "</ul>";
// Render results
// TODO: Handle click outside layer
popup.setPosition(evt.coordinate);
$(popupElement).popover({
'placement': 'top',
'animation': false,
'html': true,
'content': '<h4>' + warningStatusTitle + '</h4>' + paramHTML
});
$(popupElement).popover('show');
}
else{
alert("An error occured. No model data was returned from the server. This is what the server returned: " + responseXML);
// User clicked outside of layers contents
if(warningStatus == null)
{
return;
}
let warningStatusTitle = warningStatus == 0 ? "N/A"
: warningStatus == 1 ? "Missing data"
: warningStatus == 2 ? "No risk"
: warningStatus == 3 ? "Possible risk"
: warningStatus == 4 ? "High risk" : "";
let paramHTML = "<ul>";
paramCodes = Object.keys(parameters);
for(let i=0;i<paramCodes.length;i++)
{
paramHTML += "<li>" + paramCodes[i] + " = " + parameters[paramCodes[i]] + "</li>"
}
paramHTML += "</ul>";
// Render results
popup.setPosition(evt.coordinate);
$(popupElement).popover({
'placement': 'top',
'animation': false,
'html': true,
'content': '<h4>' + warningStatusTitle + '</h4>' + paramHTML
});
$(popupElement).popover('show');
}
\ No newline at end of file
......@@ -31,7 +31,7 @@
{% if available_grid_models|length > 0 %}
<ul>
{% for model in available_grid_models %}
<li><a href="gridmap/{{model.model_id}}/">{{ model.model_name }}</a></li>
<li><a href="gridmap/{{model.model_id}}/">{{ get_text_i18n model.model_name }}</a></li>
{% endfor %}
</ul>
{% else %}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment