[Mapbender-commits] r9032 - trunk/mapbender/http/javascripts
svn_mapbender at osgeo.org
svn_mapbender at osgeo.org
Wed Aug 6 07:10:05 PDT 2014
Author: armin11
Date: 2014-08-06 07:10:05 -0700 (Wed, 06 Aug 2014)
New Revision: 9032
Added:
trunk/mapbender/http/javascripts/mb_downloadFeedClient.php
Log:
Extract urls from download feed client into new conf file to allow easier handling in different environments
Added: trunk/mapbender/http/javascripts/mb_downloadFeedClient.php
===================================================================
--- trunk/mapbender/http/javascripts/mb_downloadFeedClient.php (rev 0)
+++ trunk/mapbender/http/javascripts/mb_downloadFeedClient.php 2014-08-06 14:10:05 UTC (rev 9032)
@@ -0,0 +1,350 @@
+<?php
+require_once dirname(__FILE__) . "/../../conf/atomFeedClient.conf";
+//require_once dirname(__FILE__) . "/../../tools/wms_extent/extent_service.conf";
+?>
+
+var mapframe_dataset_list, mapframe_file_list, datasetSelect, file_list, bboxDataset, bboxFiles, formats, sf;
+
+function updateFormats() {
+ var in_options = {
+ 'internalProjection': mapframe_dataset_list.baseLayer.projection,
+ 'externalProjection': new OpenLayers.Projection("EPSG:4326")
+ };
+ var out_options = {
+ 'internalProjection': mapframe_dataset_list.baseLayer.projection,
+ 'externalProjection': new OpenLayers.Projection("EPSG:900913")
+ };
+ var gmlOptions = {
+ featureType: "feature",
+ featureNS: "http://example.com/feature"
+ };
+ var gmlOptionsIn = OpenLayers.Util.extend(
+ OpenLayers.Util.extend({}, gmlOptions),
+ in_options
+ );
+ var gmlOptionsOut = OpenLayers.Util.extend(
+ OpenLayers.Util.extend({}, gmlOptions),
+ out_options
+ );
+ var kmlOptionsIn = OpenLayers.Util.extend(
+ {extractStyles: true}, in_options);
+ formats = {
+ 'in': {
+ wkt: new OpenLayers.Format.WKT(in_options),
+ geojson: new OpenLayers.Format.GeoJSON(in_options),
+ georss: new OpenLayers.Format.GeoRSS(in_options),
+ gml2: new OpenLayers.Format.GML.v2(gmlOptionsIn),
+ gml3: new OpenLayers.Format.GML.v3(gmlOptionsIn),
+ kml: new OpenLayers.Format.KML(kmlOptionsIn),
+ atom: new OpenLayers.Format.Atom(in_options),
+ gpx: new OpenLayers.Format.GPX(in_options)
+ },
+ 'out': {
+ wkt: new OpenLayers.Format.WKT(out_options),
+ geojson: new OpenLayers.Format.GeoJSON(out_options),
+ georss: new OpenLayers.Format.GeoRSS(out_options),
+ gml2: new OpenLayers.Format.GML.v2(gmlOptionsOut),
+ gml3: new OpenLayers.Format.GML.v3(gmlOptionsOut),
+ kml: new OpenLayers.Format.KML(out_options),
+ atom: new OpenLayers.Format.Atom(out_options),
+ gpx: new OpenLayers.Format.GPX(out_options)
+ }
+ };
+}
+
+function init(){
+ //generate 2 Mapframes
+ mapframe_dataset_list = new OpenLayers.Map('mapframe_dataset_list');
+ mapframe_file_list = new OpenLayers.Map('mapframe_file_list');
+ <?php echo "\n".$backgroundLayer_1."\n"?>
+ <?php echo "\n".$backgroundLayer_2."\n"?>
+ //var wms_osm = new OpenLayers.Layer.WMS( "OpenLayers WMS",
+ // "http://osm.omniscale.net/proxy/service?", {layers: 'osm'}, {singleTile: true});
+ //var wms_osm = new OpenLayers.Layer.WMS( "OpenLayers WMS",
+ // "http://osm.omniscale.net/proxy/service?", {layers: 'osm'}, {singleTile: true});
+ <?php echo "\n".$backgroundLayer_3."\n"?>
+ <?php echo "\n".$backgroundLayer_4."\n"?>
+ //Vector layer for the georss polygons of the service feed - maybe more than one
+ bboxDataset = new OpenLayers.Layer.Vector("Dataset bounding boxes");
+ //Vector layer for the georss polygons of one single data feed entry - maybe more than one if the dataset is tiled into different sections
+ bboxFiles = new OpenLayers.Layer.Vector("File bounding boxes");
+ mapframe_dataset_list.addLayers([<?php echo $addBackgroundLayerUpper; ?>]);
+ mapframe_dataset_list.addLayers([bboxDataset]);
+
+ mapframe_dataset_list.addControl(new OpenLayers.Control.MousePosition());
+ mapframe_file_list.addLayers([<?php echo $addBackgroundLayerLower; ?>]);
+ mapframe_file_list.addLayers([bboxFiles]);
+ mapframe_file_list.addControl(new OpenLayers.Control.MousePosition());
+ updateFormats();
+ //initialize mapframes
+ mapframe_dataset_list.setCenter(new OpenLayers.LonLat(7, 50), 7);
+ mapframe_file_list.setCenter(new OpenLayers.LonLat(7, 50), 7);
+ resetForm();
+ //start parsing when no empty string was found in input for url
+ if ($('#download_feed_url').val() != "") {
+ method = "getServiceFeedObjectFromUrl";
+ data = $("#download_feed_url").val();
+ //call server by ajax function
+ callServer(data,method);
+ }
+ //initialize button for load service feed - the first feed will be parsed.
+ $(document).ready(function(e) {
+ $('#download_feed_button').click(function() {
+ resetForm();
+ method = "getServiceFeedObjectFromUrl";
+ data = $("#download_feed_url").val();
+ //call server by ajax function
+ callServer(data,method);
+ });
+ });
+ //don't show elements of dataset feed
+ //
+}
+
+//central function to call server by ajax, result is a featureCollection which is generated by mapbenders server component
+function callServer(data,method,id) {
+ if (id === undefined) id = 0;
+ //alert("ajax call begin");
+ $.ajax({
+ url: '../plugins/mb_downloadFeedServer.php',
+ type: "post",
+ async: false, //cause reading the first feed may take longer than the second
+ data: {url: data, method: method , id: id},
+ dataType: "json",
+ success: function(result) {
+ if (method == "getServiceFeedObjectFromUrl") {
+ //draw georss polygons from service feed
+ drawMetadataPolygons(result);
+ //show datasets in a dropdown list
+ showDatasetList(result);
+ }
+ if (method == "getDatasetFeedObjectFromUrl") {
+ //function to draw bboxes of single link to data tile and the corresponding list of tiles
+ //alert("ajax datasetfeed read!");
+ showDatasetEntryList(result, id);
+
+ }
+
+ }
+ });
+ return false;
+}
+
+function resetForm() {
+ //reset form
+ //don't show elements of dataset feed
+ $("#representation_select").css("display","none");
+ $("#representation_info").css("display","none");
+ //change size of outer fieldset
+ $("#client").css("height","450px");
+}
+
+function showDatasetList(featureCollection,id) {
+ resetForm();
+ if (id === undefined) id = 0;
+ if (featureCollection == null) {
+ alert("No parseable content found");
+ return false;
+ }
+ //remove old dataset select option
+ $('#dataset_select').remove();
+ //delete identifier anchor
+ $('#dataset_identifier_link').remove();
+ //delete capabilities anchor
+ $('#capabilities_link').remove();
+ //delete old entries
+ var datasetSelect = $(document.createElement('select')).appendTo('#dataset_list');
+ datasetSelect.attr({'id':'dataset_select'});
+ var selectOptions = "";
+ //iterate over all single features which can be identified with the entries of the inspire service feed
+ for(var i=0; i<featureCollection.features.length; ++i) {
+ //fill in first title, rights and abstract in fields
+ if (i == id) {
+ $('#dataset_title').val(featureCollection.features[i].properties.title);
+ $('#dataset_rights').val(featureCollection.features[i].properties.rights);
+ $('#dataset_abstract').val(featureCollection.features[i].properties.summary);
+ //add capabilities anchor
+ identifierAnchor = $(document.createElement('a')).appendTo('#capabilities_hybrid');
+ identifierAnchor.attr({'id':'capabilities_link'});
+ identifierAnchor.attr({'href':featureCollection.features[i].properties.capabilitiesLink});
+ identifierAnchor.text(featureCollection.features[i].properties.capabilitiesLink);
+ //$('#capabilities_link').val(featureCollection.features[i].properties.capabilitiesLink);
+
+ //add identifier anchor
+ identifierAnchor = $(document.createElement('a')).appendTo('#dataset_identifier');
+ identifierAnchor.attr({'id':'dataset_identifier_link'});
+ identifierAnchor.attr({'uuid':featureCollection.features[i].properties.code});
+ identifierAnchor.attr({'href':'../php/mod_iso19139ToHtml.php?url='+encodeURIComponent(featureCollection.features[i].properties.metadataLink)});
+ identifierAnchor.text(featureCollection.features[i].properties.namespace+"#"+featureCollection.features[i].properties.code);
+ }
+ selectOptions = selectOptions+"<option value='"+featureCollection.features[i].properties.datasetFeedLink+"' url='"+featureCollection.features[i].properties.datasetFeedLink+"' optionid='"+i+"'>"+featureCollection.features[i].properties.title+"</option>";
+ }
+ datasetSelect.append(selectOptions);
+ //preselect option
+ $("#dataset_select option[optionid='" + id + "']").attr("selected","selected");
+ $('#dataset_select').bind('change', function() {
+ var $this = $(this);
+ optionSelected = $(this).find('option:selected').attr('optionid');
+ //alert(optionSelected);
+ showDatasetList(featureCollection,optionSelected);
+ method = "getDatasetFeedObjectFromUrl";
+ data = $this.val();
+ resetForm();
+ callServer(data,method);
+ });
+ method = "getDatasetFeedObjectFromUrl";
+ //call second feed with first entry for default
+ data = featureCollection.features[0].properties.datasetFeedLink;
+ datasetFeedObject = callServer(data,method);
+}
+
+function showDatasetEntryList(featureCollection, id) {
+ if (id === undefined) id = 0;
+ if (featureCollection == null) {
+ alert("No parseable content found");
+ return false;
+ }
+ //alert("test");
+ //remove select element for the different possible representations (formats, crs, ...)
+ $('#dataset_representation_select').remove();
+ //generate new select element
+ var datasetEntrySelect = $(document.createElement('select')).appendTo('#dataset_representation_list');
+ datasetEntrySelect.attr({'id':'dataset_representation_select'});
+ //initialize options
+ var selectROptions = "";
+ //iterate over all possible representations, which are modeled as entries in the dataset feed (here features of the featureCollection)
+ for(var i=0; i<featureCollection.features.length; ++i) {
+ selectROptions = selectROptions+"<option value='"+i+"' url='"+featureCollection.features[i].properties.datasetFeedLink+"'>"+featureCollection.features[i].properties.title+"</option>";
+ }
+ datasetEntrySelect.append(selectROptions);
+ fillSectionList(featureCollection, id);
+ $('#dataset_representation_select').bind('change', function() {
+ var $this = $(this);
+ fillSectionList(featureCollection,$this.val());
+ });
+}
+
+function fillSectionList(featureCollection, k) {
+ bboxFiles.removeAllFeatures();
+ $('#section_option').remove();
+ //initialize option string
+ var selectFOptions = "";
+ //count number of links in representation
+ var numberOfLinks = featureCollection.features[k].properties.link.length;
+ if (numberOfLinks >= 1 || numberOfLinks === undefined) {
+ //show list
+ $("#representation_select").css("display","block");
+ //deactivate mapframe2 by default
+ $("#mapframe_file_list").css("display","none");
+ //$("#multi_select").css("display","none");
+ $("#representation_info").css("display","block");
+ //extent size of outer fieldset
+ $("#client").css("height","730px");
+ } else {
+ alert("No links to datasets or parts of them found in feed!");
+ }
+ for (var i = 0; i < numberOfLinks; i++) {
+ if (featureCollection.features[k].properties.link[i]['@attributes'].bbox == '' || featureCollection.features[k].properties.link[i]['@attributes'].bbox === undefined) {
+ selectFOptions = selectFOptions+"<option value='"+i+"' url='"+featureCollection.features[k].properties.link[i]['@attributes'].href+"' title='"+featureCollection.features[k].properties.link[i]['@attributes'].title+"' onclick='window.open(\""+featureCollection.features[k].properties.link[i]['@attributes'].href+"\");'>"+featureCollection.features[k].properties.link[i]['@attributes'].title+"</option>";
+ } else {
+ ext = featureCollection.features[k].properties.link[i]['@attributes'].bbox;
+ extArrayNew = new Array();
+ extArray = ext.split(" ");
+ //sort array to lat lon
+ extArrayNew[0] = extArray[1];
+ extArrayNew[1] = extArray[0];
+ extArrayNew[2] = extArray[3];
+ extArrayNew[3] = extArray[2];
+ bound = OpenLayers.Bounds.fromArray(extArrayNew);
+ attributes = {id: i, url:featureCollection.features[k].properties.link[i]['@attributes'].href};
+ box = new OpenLayers.Feature.Vector(bound.toGeometry(),attributes);
+ bboxFiles.addFeatures(box);
+ selectFOptions = selectFOptions+"<option value='"+i+"' url='"+featureCollection.features[k].properties.link[i]['@attributes'].href+"' title='"+featureCollection.features[k].properties.link[i]['@attributes'].title+"' onclick='highlightFeatureIndexById("+i+",true);' onmouseover='highlightFeatureIndexById("+i+",false);'>"+featureCollection.features[k].properties.link[i]['@attributes'].title+"</option>";
+ }
+
+ }
+ //count features of bboxFiles
+ //bboxFiles if not available show error message
+ selectFObject = $(document.createElement('select')).appendTo('#section_list');
+ selectFObject.attr({'id':'section_option'});
+ selectFObject.attr({'multiple':'multiple'});
+ //add options
+ selectFOptionsObject = $('#section_option').append(selectFOptions);
+ selectFOptionsObject.attr({'width': 300});
+ //alert(bboxFiles.features.length);
+ if (bboxFiles.features.length >= 1) {//TODO
+ //show mapframe
+ $("#mapframe_file_list").css("display","block");
+ //extent size of outer fieldset
+ $("#client").css("height","900px");
+ bound = bboxFiles.getDataExtent();
+ //Add wms layer from mb_metadata table (bounding_geom column)
+ <?php echo "\n".$metadataPolygonLayer."\n"?>
+ mapframe_file_list.addLayers([wms222]);
+ //Add polygon layer from mb_metadata tables bounding_geom column
+ mapframe_file_list.zoomToExtent(bound);
+ bboxFiles.events.on({
+ featureselected: function(event) {
+ var feature = event.feature;
+ var id = feature.attributes.id;
+ var url = feature.attributes.url;
+ $('#section_option option').removeAttr('selected')
+ $("#section_option option[value='"+id+"']").attr('selected',true);
+ //window.open(url,'download_window');
+
+ /*if ($('#multi_select').is(':checked')) {
+ alert("checked");
+ } else {
+ alert("un-checked");
+ }
+ alert(url);*/
+ }
+ });
+
+ sf = new OpenLayers.Control.SelectFeature(bboxFiles);
+ mapframe_file_list.addControl(sf);
+ sf.activate();
+ }
+}
+
+function drawMetadataPolygons(featureCollection) {
+ var type = "geojson";
+ var features = formats['in'][type].read(featureCollection);
+ var bounds;
+ if(features) {
+ if(features.constructor != Array) {
+ features = [features];
+ }
+ for(var i=0; i<features.length; ++i) {
+ if (!bounds) {
+ bounds = features[i].geometry.getBounds();
+ } else {
+ bounds.extend(features[i].geometry.getBounds());
+ }
+ }
+ //delete old features:
+ bboxDataset.removeAllFeatures();
+ bboxDataset.addFeatures(features);
+ mapframe_dataset_list.zoomToExtent(bounds);
+ }
+}
+
+function highlightFeatureIndexById(id, open) {
+ features = bboxFiles.features;
+ for(var i=0; i<features.length; ++i) {
+ if(features[i].attributes.id == id) {
+ index = i;
+ break;
+ }
+ }
+ //unselect all if one is selected
+ sf.unselectAll();
+ sf.select(bboxFiles.features[index]);
+ if (open) {
+ window.open(bboxFiles.features[index].attributes.url,'download_window');
+ }
+}
+
+
+
+
More information about the Mapbender_commits
mailing list