konova/templates/map/client/libs/netgis/OWS.js
mpeltriaux c08f5145fe Netgis client update
* adds new version to sources
2022-09-12 13:12:59 +02:00

237 lines
4.5 KiB
JavaScript

var netgis = netgis || {};
netgis.OWS =
(
function ()
{
"use strict";
// Variables
// Methods
var read = function( json, client )
{
var config =
{
layers: [],
folders: []
};
// Properties
if ( netgis.util.isDefined( json.properties ) )
{
// BBox
var bbox = json.properties.bbox;
/*if ( netgis.util.isDefined( bbox ) )
{
client.invoke( netgis.Events.MAP_SET_EXTENT, { minx: bbox[ 0 ], miny: bbox[ 1 ], maxx: bbox[ 2 ], maxy: bbox[ 3 ] } );
}*/
config.bbox = bbox;
}
// Folders
var features = json.features;
for ( var i = 0; i < features.length; i++ )
{
var feature = features[ i ];
if ( feature.type === "Feature" )
{
// Feature Properties
var props = feature.properties;
var path = props.folder;
// Check Existing
var found = false;
for ( var f = 0; f < config.folders.length; f++ )
{
if ( config.folders[ f ].id === path )
{
found = true;
break;
}
}
if ( found ) continue;
// Path Parts
var partsRaw = path.split( "/" );
var parts = [];
for ( var p = 0; p < partsRaw.length; p++ )
{
var part = partsRaw[ p ];
if ( part.length > 0 ) parts.push( part );
}
// Find Parent
var parent = -1;
for ( var p = 0; p < parts.length; p++ )
{
var part = parts[ p ];
var partpath = "/" + parts.slice( 0, p + 1 ).join( "/" );
// Existing Folder
var exists = false;
for ( var f = 0; f < config.folders.length; f++ )
{
if ( config.folders[ f ].path === partpath )
{
parent = f;
exists = true;
break;
}
}
if ( exists ) continue;
// Create New Folder
var index = config.folders.length;
config.folders.push
(
{
title: part,
parent: parent,
path: partpath
}
);
parent = index;
}
}
}
// Features / Layers
for ( var i = 0; i < features.length; i++ )
{
var feature = features[ i ];
if ( feature.type === "Feature" )
{
//TODO: refactor to read feature function
// Feature Properties
var props = feature.properties;
// Folder
var folderIndex = -1;
for ( var f = 0; f < config.folders.length; f++ )
{
if ( config.folders[ f ].path === props.folder )
{
folderIndex = f;
break;
}
}
// Offerings
var offers = props.offerings;
for ( var o = 0; o < offers.length; o++ )
{
var offer = offers[ o ];
// Operationos
var ops = offer.operations;
// Types
switch ( offer.code )
{
// WMS
case "http://www.opengis.net/spec/owc-geojson/1.0/req/wms":
{
var getCaps = ops[ 0 ];
var url = getCaps.href;
config.layers.push
(
{
folder: folderIndex,
type: netgis.LayerTypes.WMS,
url: url,
title: props.title,
attribution: props.rights,
active: props.active
}
);
break;
}
// XYZ
case "http://www.opengis.net/spec/owc-geojson/1.0/req/xyz":
{
var getTile = ops[ 0 ];
config.layers.push
(
{
folder: folderIndex,
type: netgis.LayerTypes.XYZ,
url: getTile.href,
title: props.title,
attribution: props.rights,
active: props.active
}
);
break;
}
// OSM / XYZ
case "http://www.opengis.net/spec/owc-geojson/1.0/req/osm":
{
// Operations
/*for ( var oi = 0; oi < ops.length; oi++ )
{
var op = ops[ oi ];
switch ( op.code )
{
case ""
}
}*/
var getTile = ops[ 0 ];
config.layers.push
(
{
folder: folderIndex,
type: netgis.LayerTypes.XYZ,
url: getTile.href,
title: props.title,
attribution: props.rights,
active: props.active
}
);
break;
}
}
}
}
} // end for each feature
client.invoke( netgis.Events.CONTEXT_UPDATE, config );
};
// Public Interface
var iface =
{
read: read
};
return iface;
}
)();