Changeset 8426


Ignore:
Timestamp:
03/07/12 13:49:24 (7 years ago)
Author:
mnagni
Message:

Complete - # 22488: CEDA Observation Collection - Geographical Extent
 http://team.ceda.ac.uk/trac/ceda/ticket/22488
Moreover:
1) has been fixed a bug in JSON encoding
2) separated the OpenLayer? in an independent javascript libray (as example how to work with dojo multi-modules)
2) some javascripts used Object.keys function which is available only in the latest browser. Substituted with a dojo one

Location:
mauRepo/MolesManager/trunk/src/MolesManager
Files:
1 added
1 deleted
4 edited

Legend:

Unmodified
Added
Removed
  • mauRepo/MolesManager/trunk/src/MolesManager/djencoder.py

    r8335 r8426  
    2020         
    2121 
    22      
    2322    def default(self, obj): 
    2423        # Convert objects to a dictionary of their representation 
     
    5150                #return {} 
    5251            else: 
     52                self.__markers[id(value)] = value 
     53                ''' 
    5354                if isinstance(value, str) or isinstance(value, unicode):                     
    54                     self.__markers[id(value)] = self.escapeForJSON(value) 
     55                    self.__markers[id(value)] = escapeForJSON(value) 
    5556                else: 
    5657                    self.__markers[id(value)] = value 
     58                ''' 
    5759        return d 
     60 
     61def encodeToJSON(toEncode): 
     62    return escapeForJSON(DJEncoder().encode(toEncode))     
    5863     
    59     def escapeForJSON(self, toEscape): 
    60         res = toEscape.replace('"', '"') 
    61         res = toEscape.replace("'", "'") 
    62         res = res.replace('\\', '\\') 
    63         return res 
    64          
     64def escapeForJSON(toEscape): 
     65    res = toEscape.replace('"', '"') 
     66    res = res.replace("'", "'")         
     67    #res = res.replace("'", "'") 
     68    res = res.replace('\\', '\\') 
     69    #res = res.replace('(', '(')         
     70    #res = res.replace(')', ')')                 
     71    return res          
  • mauRepo/MolesManager/trunk/src/MolesManager/static/js/cedaObservation.js

    r8415 r8426  
    1 define(['dojo'], function(dojo){ 
     1define(['dojo', 'ceda/cedaol', 'dojox/lang/functional'], function(dojo, cedaol, functional){ 
    22        //console.log("loads cedaObservation.js") 
    33   // function <nameOfFunction>(parameter, parameter2..etc coming in){ 
     
    66   //    return(<value>); 
    77   //      } 
    8  
     8         
    99        function getIDs(coObs){ 
    1010                var idDict = {}; 
     
    145145        } 
    146146         
     147        function getObjectByIndex(obj) { 
     148                foo = dojo.map(obj, function(item){ return item }); 
     149        } 
     150 
     151 
     152         
    147153        function createCitation(coObs,ids,rps,pubDetails,guid){ 
    148154                var citationString =''; 
    149                 authName = Object.keys(rps['author'])[0] 
     155                authName = functional.keys(rps['author'])[0] 
    150156                citationString += '<p>' + citeNameArrange(authName,rps['author'][authName].type); 
    151157                if (rps.hasOwnProperty('coinvestigator')){ 
     
    153159                        var indCoauth = ''; 
    154160 
    155                         for (loopVal=0; loopVal<Object.keys(rps['coinvestigator']).length; loopVal++){  
     161                        for (loopVal=0; loopVal<functional.keys(rps['coinvestigator']).length; loopVal++){  
    156162                                 
    157                                 var coInvName = Object.keys(rps['coinvestigator'])[loopVal]; 
     163                                var coInvName = functional.keys(rps['coinvestigator'])[loopVal]; 
    158164                                // console.log(coInvName) 
    159165                                // console.log(rps['coinvestigator'][coInvName]) 
     
    180186                 
    181187                if (rps.hasOwnProperty('publisher')){  
    182                         citationString += ' ' + Object.keys(rps['publisher'])[0] +'.'; 
     188                        citationString += ' ' + functional.keys(rps['publisher'])[0] +'.'; 
    183189                } 
    184190                else { 
     
    214220                 
    215221                return accessString 
    216         } 
    217          
    218         function drawMap(extents, map_id,ids){ 
    219                 map = new OpenLayers.Map(map_id); 
    220                 if (ids['ceda_title'].code != 'Data from Mars Analysis Correction Data Assimilation (MACDA)'){ 
    221                         var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'} ); 
    222                         map.addLayer(ol_wms); 
    223                 } 
    224                 else { 
    225                         var mars_wms = new OpenLayers.Layer.WMS( "Mars Basemap", "http://cedawms.badc.rl.ac.uk/marsbasemap?", {layers: 'mars'} );  
    226                         map.addLayer(mars_wms); 
    227                 } 
    228  
    229                 var renderer = OpenLayers.Util.getParameters(window.location.href).renderer; 
    230         renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers; 
    231          
    232         var boxes  = new OpenLayers.Layer.Vector( "Boxes" ); 
    233                 /* 
    234         * Layer style 
    235         */ 
    236         // we want opaque external graphics and non-opaque internal graphics 
    237         var layer_style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); 
    238         layer_style.fillOpacity = 0.2; 
    239         layer_style.graphicOpacity = 1; 
    240                 var vectorLayer = new OpenLayers.Layer.Vector("Simple Geometry", { 
    241         style: layer_style, 
    242         renderers: renderer}) 
    243  
    244                 if (extents[0]){  
    245                         if (extents[0].__class__ == 'EX_GeographicBoundingBox'){ 
    246                          
    247                                 if (Math.abs(extents[0].westBoundLongitude.value - extents[0].eastBoundLongitude.value) > 1.0 && Math.abs(extents[0].northBoundLatitude.value - extents[0].southBoundLatitude.value) > 1.0 ){ 
    248                                         var box_extents = [[extents[0].westBoundLongitude.value,extents[0].southBoundLatitude.value,extents[0].eastBoundLongitude.value,extents[0].northBoundLatitude.value]] 
    249                                         for (var i = 0; i < box_extents.length; i++) { 
    250                                                 ext = box_extents[i]; 
    251                                                 //minLon,minLat,maxlon,maxlat 
    252                                                 bounds = new OpenLayers.Bounds(ext[0],ext[1],ext[2],ext[3]); 
    253  
    254                                                 box = new OpenLayers.Feature.Vector(bounds.toGeometry()); 
    255                                                 boxes.addFeatures(box); 
    256                                                 map.addLayer(boxes); 
    257                                                 var boxes  = new OpenLayers.Layer.Vector( "boxes" ); 
    258                                            } 
    259                                 } 
    260                                 else{ 
    261                                         var box_extents = [[extents[0].westBoundLongitude.value,extents[0].southBoundLatitude.value,extents[0].eastBoundLongitude.value,extents[0].northBoundLatitude.value]] 
    262                                         ext = box_extents[0]; 
    263  
    264                                         var style_blue = OpenLayers.Util.extend({}, layer_style); 
    265                                         style_blue.strokeColor = "blue"; 
    266                                         style_blue.fillColor = "blue"; 
    267                                         style_blue.graphicName = "star"; 
    268                                         style_blue.pointRadius = 10; 
    269                                         style_blue.strokeWidth = 3; 
    270                                         style_blue.rotation = 45; 
    271                                         style_blue.strokeLinecap = "butt"; 
    272                                         var point = new OpenLayers.Geometry.Point(ext[0],ext[1]); 
    273                                         var pointFeature = new OpenLayers.Feature.Vector(point,null,style_blue); 
    274                                         map.addLayer(vectorLayer); 
    275                                         vectorLayer.addFeatures([pointFeature]); 
    276                                 } 
    277                          
    278                         } 
    279                 } 
    280                 else{ 
    281                                 //in cases where no geographicExtent is given put in global box 
    282                                 ext = [-180.0,-90.0,180.0,90.0] 
    283                                 bounds = new OpenLayers.Bounds(ext[0],ext[1],ext[2],ext[3]); 
    284                                 box = new OpenLayers.Feature.Vector(bounds.toGeometry()); 
    285                                 boxes.addFeatures(box); 
    286                                 map.addLayer(boxes); 
    287                                 var boxes  = new OpenLayers.Layer.Vector( "boxes" ); 
    288                                  
    289                  
    290                 } 
    291                  
    292                  
    293                 //map.addLayer(boxes); 
    294                 //var boxes  = new OpenLayers.Layer.Vector( "boxes" ); 
    295                 //var layerSwitch = new OpenLayers.Control.LayerSwitcher 
    296 // this is where we find there is an issue - the error is: 
    297         //      map.addControl(layerSwitch); 
    298         //var sf = new OpenLayers.Control.SelectFeature(boxes); 
    299                 //console.log(ext[0],ext[1],ext[2],ext[3]) 
    300  
    301         //map.addControl(sf); 
    302         //sf.activate(); 
    303        
    304                 var proj = new OpenLayers.Projection("EPSG:4326"); 
    305         var point = new OpenLayers.LonLat(ext[0], ext[1]); 
    306         point.transform(proj, map.getProjectionObject()); 
    307                                 map.setCenter(point,3); 
    308                 map.setCenter(new OpenLayers.LonLat(ext[0], ext[1]), 5); 
    309          
    310                  
    311         map.zoomToMaxExtent(); 
    312                  
    313         } 
     222        }        
     223 
    314224                function bboxText(extents){ 
    315225                        var box_extents = [extents[0].westBoundLongitude.value,extents[0].southBoundLatitude.value,extents[0].eastBoundLongitude.value,extents[0].northBoundLatitude.value] 
     
    324234                        return keytext 
    325235                } 
     236                 
    326237                 
    327238        require(['dojo/ready', 'dojo/parser', 'dijit/registry', 'dojo/_base/json', 'dojo/store/Memory', 
     
    385296                                        var access_id  = new dojo.html.set(dojo.byId("access_id"),accessLink(coObs.permission)); 
    386297                                         
    387                                         var help_id  = new dojo.html.set(dojo.byId("help_id"),rps['pointofcontact'][Object.keys(rps['pointofcontact'])[0]].helpString); 
    388                                          
    389                                         drawMap(coObs.geographicExtent,'map',ids); 
     298                                        var help_id  = new dojo.html.set(dojo.byId("help_id"),rps['pointofcontact'][functional.keys(rps['pointofcontact'])[0]].helpString); 
     299                                         
     300                                        cedaol.drawMap(coObs.geographicExtent,'map',ids); 
    390301                                         
    391302                                        var resultTime_id  = new dojo.html.set(dojo.byId("resultTime_id"),resultTime(coObs.phenomenonTime)['timeString']); 
  • mauRepo/MolesManager/trunk/src/MolesManager/static/templates/base.html

    r8275 r8426  
    4141                // Make sure the module path does *not* end in a slash. 
    4242                packages:[ 
    43                                 { 'name': 'ceda', 'location': '/static/js'} 
     43                                { "name": "ceda", "location": "/static/js"} 
    4444                ] 
    4545        }; 
    4646                if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1){console.log(dojoConfig)} 
    4747    </script> 
    48         <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.7.2/dojo/dojo.js"> 
    49         </script> 
     48    <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.7.2/dojo/dojo.js"> </script> 
     49        <script src="http://openlayers.org/api/OpenLayers.js"></script> 
    5050   
    5151    {% block extra_head %}{% endblock %} 
     
    7373                 
    7474                                        <script type="text/javascript"> 
    75                                                 require(['dijit/form/Form', 'dijit/form/TextBox', 'dijit/form/Textarea', 'ceda/cedaObservation']); 
     75                                                require(['dijit/form/Form', 'dijit/form/TextBox', 'dijit/form/Textarea',  
     76                                                         'ceda/cedaObservation']); 
    7677                                        </script> 
    7778 
  • mauRepo/MolesManager/trunk/src/MolesManager/views/cedaObservationView.py

    r8409 r8426  
    3333from django.shortcuts import render_to_response 
    3434from django.core.context_processors import csrf 
    35 from MolesManager.djencoder import DJEncoder 
     35from MolesManager.djencoder import encodeToJSON 
    3636from django.utils.safestring import mark_safe 
    3737from ea_model.ceda_metadatamodel.ceda_observation.ceda_observation import CEDA_Observation 
     
    5858    c = {} 
    5959    if record: 
    60         c['coObs'] = mark_safe(DJEncoder().encode(record)) 
     60        c['coObs'] = mark_safe(encodeToJSON(record)) 
    6161        guid = request.moles3EPB.retrieveGUIDFromInstance(record) 
    6262        if guid: 
Note: See TracChangeset for help on using the changeset viewer.