#!/usr/bin/perl use strict; use LWP::Simple; use XML::XPath; my $kml_content = <<"END_OF_FILE"; Ocean Observing Map Images http://seacoos.org , http://nautilus.baruch.sc.edu/twiki_dmcc/bin/view/Main/SEACOOSCookbook2 ) using the WMS(Web Mapping Service) web services standard supported by the OGC(OpenGeospatial Consortium http://www.opengeospatial.org )]]> END_OF_FILE my $xp = XML::XPath->new(filename => 'wms.xml'); my ($layer_name, $layer_label, $layer_desc_verbiage, $layer_wms, $bbox, $legend_name, $legend_wms, $legend_ref); #NOTE: make sure that top nodes are wrapped inside another element tag like or will get errors #NOTE: Assigning variables using xpath seems to be having some strange side-effect on the variable operations - having to place variables within quotes to get proper comparisons without generating xpath oriented errors foreach my $this_layer ($xp->findnodes('//layer')) { $layer_name = $this_layer->find('name'); print "$layer_name\n"; $layer_label = $this_layer->find('label'); $layer_desc_verbiage = $this_layer->find('desc_verbiage'); $layer_wms = $this_layer->find('wms'); $bbox = $this_layer->find('bbox'); $legend_name = $this_layer->find('legend_name'); $legend_wms = $this_layer->find('legend_wms'); $legend_ref = $this_layer->find('legend_ref'); #$legend_ref = ''; #if we aren't supplying a literal legend reference, then generate the following if legend_name, legend_wms supplied if ($legend_name && ("$legend_ref" eq '')) { print "$legend_name\n"; my $image_filename = 'image_'.$legend_name.'.jpg'; $legend_ref = 'http://nautilus.baruch.sc.edu/gearth/'.$image_filename; my $this_content = getstore("$legend_wms","./$image_filename"); die "Couldn't get $legend_wms" unless defined $this_content; } my $legend_html = ''; if ("$legend_ref" ne '') { $legend_html = ''; } my $layer_desc = ''.$legend_html.''.$layer_desc_verbiage.']]>'; my @bbox_coord = split(/,/, $bbox); $layer_wms =~ s/BBOX/$bbox/g; my $image_filename = 'image_'.$layer_name.'.jpg'; my $content = getstore($layer_wms,"./$image_filename"); die "Couldn't get $layer_wms" unless defined $content; $kml_content .= <<"END_OF_FILE"; $layer_label $layer_desc END_OF_FILE #view just a single layer initially, not all if ("$layer_label" eq 'OI_SST') { $kml_content .= '1'; } else { $kml_content .= '0'; } $kml_content .= <<"END_OF_FILE"; 9bffffff $bbox_coord[3] $bbox_coord[1] $bbox_coord[2] $bbox_coord[0] END_OF_FILE } #foreach $layer $kml_content .= <<"END_OF_FILE"; END_OF_FILE open (FILE_KML,">./latest_overlays.kml"); print FILE_KML $kml_content; close (FILE_KML); exit 0;