NCCOOS Trac Projects: Top | Web | Platforms | Processing | Viz | Sprints | Sandbox | (Wind)

root/Chameleon/trunk/Chameleon/CatalogSearch/CatalogSearchScript.php

Revision 13 (checked in by jcleary, 17 years ago)

Latest Chameleon code checkout from previous repository

Line 
1 <?php
2 include_once("CatalogSearch.php");
3
4 include_once("../session.inc.php");
5
6 $nServiceId = $_GET['serviceId'];
7 $szFormat = $_GET['szFormat'];
8 $bCachedLayer = false;
9 $aszSessionLayer = array();
10 $szSessionKey = "";
11
12 // Get the current layer with cached information (if any)
13 if( isset( $_SESSION['CatalogSearchEmbeded_RESULT'] ) &&
14     isset($_SESSION['CatalogSearchEmbeded_RESULT']) &&
15     isset($_SESSION['CatalogSearchEmbeded_RESULT']['CatalogSearchResult']) &&
16     isset($_SESSION['CatalogSearchEmbeded_RESULT']['CatalogSearchResult']['layers']) &&
17     isset($_SESSION['CatalogSearchEmbeded_RESULT']['CatalogSearchResult']['layers']['LAYER']) &&
18     is_array($_SESSION['CatalogSearchEmbeded_RESULT']['CatalogSearchResult']['layers']['LAYER']) )
19 {
20     $aLayers = $_SESSION['CatalogSearchEmbeded_RESULT']['CatalogSearchResult']['layers']['LAYER'];
21
22     foreach($aLayers as $key => $aLayer)
23     {
24         if( isset($aLayer['serviceId']) && $aLayer['serviceId'] == $nServiceId)
25         {
26             $aszSessionLayer =& $_SESSION['CatalogSearchEmbeded_RESULT']['CatalogSearchResult']['layers']['LAYER'][$key];
27             $szSessionKey = $key;
28             if( isset($aLayer['cached']) && $aLayer['cached'] )
29             {
30                 $bCachedLayer = true;
31             }
32         }
33     }
34 }
35
36 if( !$bCachedLayer )
37 {
38     $szGetServiceIdURL = "http://ceomap2.ccrs.nrcan.gc.ca/cgi-bin/cslt/wes/service_manager/catquery?RS=XML&ESN=f&DOCID=$nServiceId&DOIT=Get+Service";
39     $fh = fopen($szGetServiceIdURL, "r");
40     $szXMLDoc = "";
41     while ($szString = fread($fh, 1024))
42     {
43         $szXMLDoc .= $szString;
44     }
45
46     if ($szXMLDoc != "")
47     {
48         $parser = xml_parser_create();
49         xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
50         xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE,   1);
51         xml_parse_into_struct($parser, $szXMLDoc, $aVals, $index);
52         xml_parser_free($parser);
53
54         $oXMLDoc xml_get_children($aVals);
55     }
56
57     if (!isset($oXMLDoc->searchResponse->value->searchStatus->attributes['numberOfRecords']) ||
58         $oXMLDoc->searchResponse->value->searchStatus->attributes['success'] == false ||
59         $oXMLDoc->searchResponse->value->searchStatus->attributes['numberOfRecords'] <= 0)
60     {
61 ?>
62 <script language="javascript" type="text/javascript">
63 var aszLayerAttributes = new Array("","","","","","","","");
64 parent.catalogSearchCallback("", aszLayerAttributes );
65 </script>
66 <?php
67         exit;
68     }
69
70     // Get result count
71     $oRes =& $oXMLDoc->searchResponse->value->searchResults->value->ISO19119->value;
72
73     // Get the connection string
74     // if DCP is a array, take the first one
75     if (is_array($oRes->operationMetadata->value->DCP))
76         $szLayerConnectString = $oRes->operationMetadata->value->DCP[0]->value->connectPoint->value->linkage->attributes['xlink:href'];
77     else
78         $szLayerConnectString = $oRes->operationMetadata->value->DCP->value->connectPoint->value->linkage->attributes['xlink:href'];
79
80     // Get layer title
81     $szLayerTitle = $oRes->citation->value->title->value;
82
83     // Get layer name
84     $szLayerName = $oRes->citation->value->alternateTitle->value;
85
86     // Get server version
87     $szServerVersion = $oRes->serviceTypeVersion->value;
88
89     // Get Abstract
90     $szLayerAbstract = $oRes->abstract->value;
91
92     // Get bounding box
93     $szBBox = str_replace(",", " ", substr(substr($oRes->typeProperty->value->typeValue->value->instanceValue->value->value->value, 1), 0, -1));
94
95
96     // Get styles, formats and SRSs
97     // ( $szLayerSRSs, $szLayerStyles and $szLayerFormats )
98     // Get parameter count
99     $nbParam = count($oRes->operationMetadata->value->parameter);
100     for($j=0;$j<$nbParam;$j++)
101     {
102         // Get parameter object
103         $oParam =& $oRes->operationMetadata->value->parameter[$j];
104         
105         // If parameter is a STYLE
106         if ($oParam->value->parameterName->value->nameValue->value == "STYLES")
107         {
108             $szLayerStyles = "";
109             // Is there more than one style ?
110             if (is_array($oParam->value->permittedValues->value->enumValues->value->valueTitle))
111             {
112                 // Yes, then get style objects count
113                 $nbStyle = count($oParam->value->permittedValues->value->enumValues->value->valueTitle);
114                 for($k=0;$k<$nbStyle;$k++)
115                 {
116                     // Get style title
117                     $szTitle = $oParam->value->permittedValues->value->enumValues->value->valueTitle[$k]->value;
118                     // Get style online resource
119                     $szOnlineRes = $oParam->value->permittedValues->value->enumValues->value->valueOnLineResource[$k]->value->linkage->attributes['xlink:href'];
120                     
121                     // add them to layer info string.
122                     $szLayerStyles .= $szTitle.">,<   ".$szOnlineRes.">;<";
123                 }
124             }
125             else
126             {
127                 // Get style title
128                 $szTitle = $oParam->value->permittedValues->value->enumValues->value->valueTitle->value;
129                 // Get style online resource
130                 $szOnlineRes = $oParam->value->permittedValues->value->enumValues->value->valueOnLineResource->value->linkage->attributes['xlink:href'];
131                 
132                 // add them to layer info string.
133                 $szLayerStyles .= $szTitle.">,<   ".$szOnlineRes.">;<";
134             }
135             
136             $szLayerStyles = substr($szLayerStyles, 0, -3);
137         }
138         else
139         if ($oParam->value->parameterName->value->nameValue->value == "FORMAT")
140         {
141             $szLayerFormat = "";
142             // Is there more than one format ?
143             if (is_array($oParam->value->permittedValues->value->enumValues->value->valueTitle))
144             {
145                 // Yes, then get format objects count
146                 $nbFormat = count($oParam->value->permittedValues->value->enumValues->value->valueTitle);
147                 for($k=0;$k<$nbFormat;$k++)
148                 {
149                     // Get format title
150                     $szTitle = $oParam->value->permittedValues->value->enumValues->value->valueTitle[$k]->value;
151                     // Get format value
152                     $szValue = $oParam->value->permittedValues->value->enumValues->value->value[$k]->value;
153                     
154                     // add them to layer info string.
155                     $szLayerFormats .= $szValue.",";
156                 }
157             }
158             else
159             {
160                 // Get format title
161                 $szTitle = $oParam->value->permittedValues->value->enumValues->value->valueTitle->value;
162                 // Get format value
163                 $szValue = $oParam->value->permittedValues->value->enumValues->value->value->value;
164                 
165                 // add them to layer info string.
166                 $szLayerFormats .= $szValue.",";
167             }
168             
169             $szLayerFormats = substr($szLayerFormats, 0, -1);
170         }
171         else
172         if ($oParam->value->parameterName->value->nameValue->value == "SRS")
173         {
174             $szLayerSRSs = "";
175             // Is there more than one srs
176             if (is_array($oParam->value->permittedValues->value->enumValues->value->valueTitle))
177             {
178                 // Yes, then get srs objects count
179                 $nbSRS = count($oParam->value->permittedValues->value->enumValues->value->valueTitle);
180                 for($k=0;$k<$nbSRS;$k++)
181                 {
182                     // Get SRS title
183                     $szTitle = $oParam->value->permittedValues->value->enumValues->value->valueTitle[$k]->value;
184                     
185                     // add them to layer info string.
186                     $szLayerSRSs .= $szTitle." ";
187                 }
188             }
189             else
190             {
191                 // Get SRS title
192                 $szTitle = $oParam->value->permittedValues->value->enumValues->value->valueTitle->value;
193                 // add them to layer info string.
194                 $szLayerSRSs .= $szTitle." ";
195             }
196
197             $szLayerSRSs = substr($szLayerSRSs, 0, -1);
198         }
199     }
200
201     // Then put all this in the session to cache the information.
202     if( count($aszSessionLayer) > 0 )
203     {
204         $aszSessionLayer["cached"] = true;
205         $aszSessionLayer["name"] = $szLayerName;
206         $aszSessionLayer["title"] = $szLayerTitle;
207         $aszSessionLayer["abstract"] = $szLayerAbstract;
208         $aszSessionLayer["server_version"] = $szServerVersion;
209         $aszSessionLayer["connection_string"] = $szLayerConnectString;
210         $aszSessionLayer["bbox"] = $szBBox;
211         $aszSessionLayer["cached_styles"] = $szLayerStyles;
212         $aszSessionLayer["cached_formats"] = $szLayerFormats;
213         $aszSessionLayer["cached_srs"] = $szLayerSRSs;
214     }
215 }
216 else
217 {
218     // Retreive cached information
219     $szLayerName = $aszSessionLayer["name"];
220     $szLayerTitle = $aszSessionLayer["title"];
221     $szLayerAbstract = $aszSessionLayer["abstract"];
222     $szServerVersion = $aszSessionLayer["server_version"];
223     $szLayerConnectString = $aszSessionLayer["connection_string"];
224     $szBBox = $aszSessionLayer["bbox"];
225     $szLayerStyles = $aszSessionLayer["cached_styles"];
226     $szLayerFormats = $aszSessionLayer["cached_formats"];
227     $szLayerSRSs = $aszSessionLayer["cached_srs"];
228 }
229
230 //Build URL to get preview.
231 $szURL = "";
232
233 $szURL = $szLayerConnectString;
234
235 // build the WMS connection string
236 if (strpos($szURL, '?') === false)
237 {
238     //need to add ?
239     $szURL = $szURL . "?";
240 }
241 else if (substring($szURL, -1) != "&" )
242 {
243     //need to add &
244     $szURL .= "&";
245 }
246
247 $szURL .= "service=WMS&";
248 $szURL .= "version=" . $szServerVersion . "&";
249 $szURL .= "request=GetMap&";
250 if (isset($_GET['SRS']))
251     $szURL .= "SRS=".$_GET['SRS']."&";
252 else
253     $szURL .= "SRS=EPSG:4326&";
254 if (isset($_GET['BBOX']))
255 {
256     $szURL .= "BBOX=".$_GET['BBOX']."&";
257 }
258 else
259 {
260     
261     $aszTmpBBox = explode(" ", $szBBox); // BBox is minx, maxx, maxy, miny
262     $szTmpBBox = implode(",", array($aszTmpBBox[0], $aszTmpBBox[3],
263                                     $aszTmpBBox[1], $aszTmpBBox[2]));
264     $szURL .= "BBOX=". $szTmpBBox ."&";
265 }
266
267 $szURL .= "width=220&";
268 $szURL .= "height=220&";
269 $szURL .= "layers=" . $szLayerName . "&";
270 $szURL .= "format=" . $szFormat . "&"; // From the server
271 $szURL .= "exceptions=application/vnd.ogc.se_inimage";
272
273 ?>
274 <script language="javascript" type="text/javascript">
275
276 // Here we should handle the load WMS layer
277 aszLayerAttributes = new Array();
278 aszLayerAttributes[0] = '<?php echo $szLayerTitle; ?>';
279 aszLayerAttributes[1] = '<?php echo $szLayerName; ?>';
280 aszLayerAttributes[2] = '<?php echo $szServerVersion; ?>';
281 aszLayerAttributes[3] = '<?php echo $szLayerConnectString; ?>';
282 aszLayerAttributes[4] = '<?php echo $szLayerAbstract; ?>';
283 aszLayerAttributes[5] = '<?php echo $szBBox; ?>';
284 aszLayerAttributes[6] = '<?php echo $szLayerStyles; ?>';
285 aszLayerAttributes[7] = '<?php echo $szLayerFormats; ?>';
286 aszLayerAttributes[8] = '<?php echo $szLayerSRSs; ?>';
287
288 parent.catalogSearchCallback("<?php echo $szURL; ?>", aszLayerAttributes);
289 </script>
290
Note: See TracBrowser for help on using the browser.