Changeset 2876 for TI05-delivery


Ignore:
Timestamp:
05/09/07 09:53:40 (12 years ago)
Author:
lawrence
Message:

Updates to the "proto"-visualisation. These may break
what is already there ... but I can't test it without
a working matplotlib+cdat and I can't have that on python2.5

Location:
TI05-delivery/ows_framework/trunk/ows_server/ows_server
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/visualise.py

    r2865 r2876  
    88         
    99        c.fullpage=1  # we want the whole page 
    10         c.datasets = {} 
     10        c.selections = {} 
     11        c.selected = {} 
    1112        c.bbox = (90, -180, 180, -90) 
    1213        c.inpageid = 'api' 
    13         self.first=None 
    14  
    15         # Select a default view 
    16         c.defaultView = dict(granuleURI='badc.nerc.ac.uk__NDG-A0__Sjjr5v40', 
    17                              featureId='LN4Bi8hb', 
    18                              time='1905-01-15T00:00:00.0') 
    1914 
    2015        for uri, dif in session.get('selection', []): 
     
    2318                c.xml='<div class="error">%s</div>'%dataset 
    2419                return render_response('error') 
    25  
    26             c.datasets[uri] = dataset 
    27             if self.first is None: self.first=uri 
    28      
     20            c.selections[uri]=dataset 
     21         
     22        c.nothing2see=0 
     23        if c.selections=={}: 
     24            c.nothing2see=1 
     25            return   
     26        
     27        # Need two fundamental variables: the granules which have been selected 
     28        # for *possible* visualisation, and the (up to two) which have been 
     29        # selected for *actual* visualisation: 
     30        # session['selection'] holds the uris assocated with the first 
     31        # session['selectedVis'] holds the uris and featureIDs associated with the second 
     32        # c.selections holds the uris and the parsed csml for the datasets 
     33        # c.selected holds the uris, featureIDs and the parsed feature instances for the second 
     34         
     35        # some defaults 
     36        defURI=c.selections.keys()[0] 
     37        defFid=c.selections[defURI].getFeatureList()[0] 
     38         
     39        keys=session.get('selectedVis',[]) 
     40        if keys==[]: keys=[(defURI,defFid)] 
     41        #yes, I know I could have sued the default on the session.get, but 
     42        #it's also possible that selectedVis is actually set to [] and we  
     43        #want to override that case too! 
     44        for uri,featureID in keys: 
     45            featureInstance=c.selections[uri].getFeature(featureID) 
     46            c.selected[(uri,featureID)]=featureInstance 
     47          
     48        # We also need to know which dataset (if any) we are looking at     
     49        c.viewedDataset=session.get('viewedDataset',c.selections.keys()[0]) 
     50        print c.selected.keys() 
     51         
     52    def __plotops(self): 
     53        ''' Works out what we can do in the way of plot options and flags the info to the template''' 
     54        c.wmsAvailable=0 
     55        for i in c.selected: 
     56            if 'latitude' and 'longitude' in c.selected[i].getAxisLabels(): c.wmsAvailable=1 
     57      
    2958    def index(self): 
     59        self.__setup() 
     60        c.visible='Granules' 
     61        self.__plotops() 
     62        return render_response('visualise') 
     63         
     64    def tabChange(self,dataset,view): 
     65        ''' Take ajax request for inpage tab change ''' 
    3066         
    3167        self.__setup() 
    32         if c.datasets!={}: 
    33             c.visible='Dataset' 
    34             c.currentDataset=self.first 
    35  
    36         return render_response('visualise') 
     68        c.visible=view 
     69        formValue=request.params.get('dataset',0) 
     70        if formValue: dataset=formValue 
     71        print 'TabChange ',dataset,formValue 
     72        #dataset is really a uri ...shame about the variable name we chose ... 
    3773         
    38     def inpagetab(self,dataset,view): 
    39         ''' Take ajax request for inpage tab change ''' 
     74        # the incoming dataset ought to be in the selections, so this is only 
     75        # about telling the interface what variable list to display ... and 
     76        # remembering it  
     77        c.viewedDataset=dataset 
     78        session['viewedDataset']=dataset 
     79        session.save() 
     80         
     81        c.fullpage=0  
     82        self.__plotops() 
     83        return render_response('visualise',fragment=True) 
     84         
     85    def featureChange(self,view): 
     86        ''' Take an ajax request and update the current list of features ''' 
     87         
    4088        self.__setup() 
    4189        c.visible=view 
    42         c.currentDataset=dataset 
     90        checkedFeatures=[] 
    4391         
    44         c.fullpage=0  
     92        # ok, we know we are getting features from viewedDataset 
     93        # let's collect them up a we go so we know which ones we've 
     94        # lost (if any), as well as parse them as we go ... 
     95        checkedFeatures 
     96        for i in request.params: 
     97            featureID=request.params[i] 
     98            checkedFeatures.append(featureID) 
     99            if 'Feature' in i:  
     100                if (c.viewedDataset,featureID) not in c.selected: 
     101                    featureInstance=c.selections[c.viewedDataset].getFeature(featureID) 
     102                    c.selected[(c.viewedDataset,featureID)]=featureInstance 
     103        #ok, now we remove them if necessary 
     104        removeList=[] 
     105        for suri,sf in c.selected: 
     106            if suri==c.viewedDataset and sf not in checkedFeatures: 
     107                removeList.append((suri,sf))  
     108        for i in removeList: del c.selected[i] 
     109        # and update the session 
     110        session['selectedVis']=c.selected.keys() 
     111        session.save()     
     112        
     113        c.fullpage=0 
     114        self.__plotops() 
    45115        return render_response('visualise',fragment=True) 
    46116         
     117    def tabcontent(self): 
     118        pass 
     119     
     120    def plot(self): 
     121        pass 
     122         
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/visualise.kid

    r2865 r2876  
    1 <html py:extends="'ndgPage.kid'" xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"> 
    2  
    3     <head py:replace="pagehead(1)"/> 
     1<html py:extends="'ndgPage.kid'" xmlns="http://www.w3.org/1999/xhtml" 
     2    xmlns:py="http://purl.org/kid/ns#"> 
    43     
    5     <div py:def="notebook(divid)"> 
    6         <?python 
    7             headers=['Dataset','Variable','Detail'] 
    8             status={} 
    9             for hh in headers:status[hh]='hidden' 
    10             status[c.visible]='current' 
    11             ds=c.datasets[c.currentDataset] 
     4    <div py:def="wmsControl()"> 
     5        <!-- Provides the controls necessary to select layers and time, the 
     6             bounding box is dealt with by the openlayers javascript 
     7             directly --> 
     8    </div> 
     9         
     10         
     11    <div py:def="inpage()"> 
     12        <!-- This provides the user interaction tabbed material below the 
     13        graphics display --> 
     14        <?python headers=['Granules','Variables','Constraints'] 
     15        print 'Visible',c.visible 
     16        status={} 
     17        for hh in headers:status[hh]='hidden' 
     18        status[c.visible]='current' 
    1219        ?> 
    13         <div id="$divid"> 
    14             <div class="InPageTabs"> 
    15                 <div class="InPageHdr"> 
     20        <div class="InPageTabs"> 
     21            <!-- This provides the tabs --> 
     22            <div class="InPageHdr"> 
     23                <ul> 
     24                    <li py:for="hh in headers" class="${status[hh]}"> 
     25                        ${XML(h.link_to_remote(hh,dict(update=c.inpageid, 
     26                        url=h.url_for(controller="visualise", 
     27                        action="tabChange",dataset=c.viewedDataset,view=hh))))} 
     28                    </li> 
     29                </ul> 
     30            </div> 
     31            <div class="InPageContent"> 
     32                <!-- This is the Dataset tab content --> 
     33                <div id="${headers[0]}" class="${status[headers[0]]}"> 
     34                    <?python url=h.url_for( 
     35                    controller="visualise",action="tabChange",dataset=c.viewedDataset,view=c.visible)?> 
     36                    <form action="$url" id="dsList"> 
     37                        <ul> 
     38                            <li py:for="uri in c.selections"> 
     39                                <?python selStatus=False  
     40                            if uri==c.viewedDataset: selStatus=True 
     41                            ?> 
     42                                ${XML(h.radio_button(name="dataset",value=uri,checked=selStatus))}$uri</li> 
     43                        </ul> 
     44                        ${XML(h.submit_to_remote("submit","update",url=url,update=c.inpageid))} 
     45                        (This button temporary) </form> 
     46                    <!--${XML(h.observe_form("dsList",url=url,update=c.inpageid))}--> 
     47                </div> 
     48                <!-- Now we have the variables tab content --> 
     49                <div id="${headers[1]}" class="${status[headers[1]]}"> 
     50                    <?python 
     51                    url=h.url_for(controller="visualise",action="featureChange",view=c.visible) 
     52                    features=c.selections[c.viewedDataset].getFeatureList() 
     53                    nfeatures=len(features) 
     54                    ii=0 
     55                    localkeys={} 
     56                    print c.selected 
     57                    for u,f in c.selected: 
     58                        if u==c.viewedDataset: localkeys[f]=(u,f) 
     59                    ?> 
     60                    <h4> $c.viewedDataset</h4> 
     61                    <form action="$url" id="fList"> 
     62                        <ul> 
     63                            <li py:for="featureID in features"> 
     64                                <?python  
     65                                selStatus=False 
     66                                if featureID in localkeys: 
     67                                    selStatus=True 
     68                                    feature=c.selected[localkeys[featureID]] 
     69                                else: feature=c.selections[c.viewedDataset].getFeature(featureID) 
     70                                name=feature.description.CONTENT 
     71                                ftype=feature.featureType 
     72                                checkname='Feature%s'%ii 
     73                                ii+=1 
     74                                ?> 
     75                                ${XML(h.check_box(name=checkname,value=featureID,checked=selStatus))}$name 
     76                                ($ftype)</li> 
     77                        </ul> 
     78                        ${XML(h.submit_to_remote("submit","update",url=url,update=c.inpageid))} 
     79                        (This button temporary) </form> 
     80                    <!--${XML(h.observe_form("fList",url=url,update=c.inpageid))}--> 
     81                </div> 
     82                <div id="${headers[2]}" class="${status[headers[2]]}"> 
     83                    <!-- Provides the constraints tab --> 
    1684                    <ul> 
    17                         <li py:for="hh in headers" class="${status[hh]}"> 
    18                         ${XML(h.link_to_remote(hh,dict(update=divid, url=h.url_for(controller="visualise", action="inpagetab",dataset=c.currentDataset,view=hh))))} 
     85                        <li py:for="u,f in c.selected">$u <ul> 
     86                                <li> $f : ${c.selected[(u,f)].featureType}<br /> 
     87                                    ${','.join(c.selected[(u,f)].getAxisLabels())}</li> 
     88                            </ul> 
    1989                        </li> 
     90                        <li py:if="len(c.selected)==0">There are no features 
     91                            selected, hence no constraints!</li> 
    2092                    </ul> 
    21                 </div> 
    22                 <div class="InPageContent"> 
    23                     <div id="${headers[0]}" class="${status[headers[0]]}"> 
    24                         <ul> 
    25                             <li py:for="uri in c.datasets">$uri</li> 
    26                         </ul>         
    27                     </div> 
    28                     <div id="${headers[1]}" class="${status[headers[1]]}"> 
    29                         <ul> 
    30                             <li py:for="featureID in ds.getFeatureList()"> 
    31                                 <?python feature=ds.getFeature(featureID)?> 
    32                                 ${feature.name.CONTENT}</li> 
    33                         </ul>         
    34                     </div> 
    35                     <div id="${headers[2]}" class="${status[headers[2]]}"> 
    36                         <ul> 
    37                             <li>Not yet implemented</li> 
    38                         </ul>         
     93                    <div py:if="c.wmsAvailable"> 
     94                        <?python 
     95                        try: 
     96                            #use the first one for now 
     97                            for u,f in c.selected: 
     98                                i=c.selected[(u,f)] 
     99                                break 
     100                            taxis=i.getDomain()[i.getTimeAxis()] 
     101                            tstep=taxis[0] 
     102                        except Exception,e: 
     103                            tstep='Error: [%s] '%str(e) 
     104                        ?> 
     105                        <table> 
     106                            <tr><td> 
     107                                <form action="" name="visForm" id="visForm" ><table><tr> 
     108                                    <td>Northerly Latitude:</td> 
     109                                    <td colspan="2" align="center"> 
     110                                        <input size="7" value="${c.bbox[0]}" name="bboxN"/> 
     111                                    </td></tr> 
     112                                    <tr><td>Longitudinal Extent:</td> 
     113                                    <td align="center"><input size="8" value="${c.bbox[1]}" name="bboxW"/></td> 
     114                                    <td align="center"><input size="8" value="${c.bbox[2]}" name="bboxE"/></td></tr> 
     115                                    <tr><td> Southerly Latitude:</td> 
     116                                    <td colspan="2" align="center"> 
     117                                    <input size="7" value="${c.bbox[3]}" name="bboxS"/> 
     118                                    </td></tr> 
     119                                    <tr><td colspan="3">(Units: degrees, north and east positive)</td></tr> 
     120                                </table></form> 
     121                            </td><td> 
     122                                <p> Select Time </p> 
     123                                
     124                                <p> This version simply uses the first timestep:<br/> $tstep </p> 
     125                            </td><td> 
     126                                <p> Select Layer </p> 
     127                                <p> Layers are not yet handled </p> 
     128                            </td></tr> 
     129                        </table> 
     130                        <form name="visSelect" id="visSelect" onchange="updateVis('visSelect')"> 
     131                            <input type="hidden" name="granuleURI" value="$tstep"/> 
     132                            <input type="hidden" name="featureId" value="${f}"/> 
     133                            <input type="hidden" name="time" value="$tstep"/> 
     134                            <input type="button" value="Update" onclick="updateVis('visSelect')"/> 
     135                        </form> 
    39136                    </div> 
    40137                </div> 
    41138            </div> 
     139            <!--inpagecontent --> 
    42140        </div> 
     141        <!-- inpagetabs --> 
    43142    </div> 
    44     <div py:if="not c.fullpage" py:replace="notebook(c.inpageid)"/> 
     143    <!-- usertalk --> 
     144    <div py:if="not c.fullpage" py:replace="inpage()"/> 
     145     
     146    <head py:if="c.fullpage" py:replace="pagehead(1)" /> 
    45147 
    46     <body onload="initVisMapBox()"> 
    47      
    48       <div py:if="c.fullpage" id="entirepage"> 
    49         <div py:replace="header()"/> 
    50         <div py:replace="PageTabs('Visualise')"/> 
    51         <div py:replace="searchOneLine()"/> 
    52         <div id="contents"> 
    53           <table> 
    54             <tr> 
    55               <td> 
    56                 <div id="visMap"></div> 
    57               </td> 
    58               <td> 
    59                 <form action="" name="visForm" id="visForm"> 
    60                   <table> 
    61                     <tr><td>Northerly Latitude:</td> 
    62                     <td colspan="2" align="center"> 
    63                       <input size="7" value="${c.bbox[0]}" name="bboxN"/> 
    64                     </td></tr> 
    65                     <tr><td>Longitudinal Extent:</td> 
    66                     <td align="center"><input size="8" value="${c.bbox[1]}" name="bboxW"/></td> 
    67                     <td align="center"><input size="8" value="${c.bbox[2]}" name="bboxE"/></td></tr> 
    68                     <tr><td> Southerly Latitude:</td> 
    69                     <td colspan="2" align="center"> 
    70                       <input size="7" value="${c.bbox[3]}" name="bboxS"/> 
    71                     </td></tr> 
    72                     <tr><td colspan="3">(Units: degrees, north and east positive)</td></tr> 
    73                   </table> 
    74                 </form> 
    75               </td> 
    76             </tr> 
    77           </table> 
    78           <div> 
    79             <form name="visSelect" id="visSelect" onchange="updateVis('visSelect')"> 
    80               Granule URI: <input type="text" name="granuleURI" value="${c.defaultView['granuleURI']}"/> 
    81               Feature ID: <input type="text" name="featureId" value="${c.defaultView['featureId']}"/> 
    82               Time: <input type="text" name="time" value="${c.defaultView['time']}"/> 
    83               <input type="button" value="Update" onclick="updateVis('visSelect')"/> 
    84             </form> 
    85           </div> 
     148    <body py:if="c.fullpage" onload="initVisMapBox()"> 
    86149 
    87           <div py:if="'selection' in session"> 
    88             <p> The visualisation feature is not fully implemented. </p> 
    89             <div py:replace="notebook(c.inpageid)"/> 
    90           </div> 
    91           <div py:if="'selection' not in session"> 
    92             <p> There are no selected datasets </p> 
    93           </div>         
    94         </div> 
    95       </div> 
    96       <div py:replace="footer()"/> 
     150        <div id="entirepage"> 
     151            <div py:replace="header()" /> 
     152            <div py:replace="PageTabs('Visualise')" /> 
     153            <div py:replace="searchOneLine()" /> 
     154            <div id="contents"> 
     155                <div py:if="c.wmsAvailable" class="map" id="visMap" /> 
     156                <p> The visualisation feature is not fully implemented. </p> 
     157                <div py:if="c.nothing2see"> 
     158                    <p> There are no selected datasets </p> 
     159                </div> 
     160                <div py:if="not c.nothing2see"> 
     161                    <div id="graphics"/> 
     162                     
     163                    <div id="$c.inpageid"> 
     164                        <div py:replace="inpage()"/> 
     165                    </div> 
     166                </div> 
     167            </div> 
     168            <div py:replace="footer()" /> 
     169        </div> 
     170        <!-- entire page --> 
    97171    </body> 
    98172</html> 
Note: See TracChangeset for help on using the changeset viewer.