<?php
//
// map_viewer.php
//
// Version 1.0  2006 Sept 31
//
// Web database for Herbarium Sheets
// Developed for PH at the Academy of Natural Sciences with
// funding from the National Science Foundation.
//
// Copyright (C) 2006 The Academy of Natural Sciences.
//
// Developed with funding under NSF DBI:BRC:0545170
// Released under the GPL as specified in the grant as a deliverable.
//
// Code for version 1.0 written by Paul J. Morris mole@morris.net
// as a work for hire for The Academy of Natural Sciences.
//
/*
    map_viewer.php A web front end for collections databases.
    Copyright (C) 2006 The Academy of Natural Sciences
                                                                                
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
                                                                                
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
                                                                                
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

    Contacts: bdim@acnatsci.org, herbarium@acnatsci.org

    A copy of the GPL should be included in the file gpl.txt
    distributed with this program.
*/

// zero out variables that might come from user
$genus = "";
$species = "";
$lat_dd = 0;
$long_dd = 0;
$taxon = "";
$subspecies = "";
$field_number = "";
$country = "";
$state = "";
$county = "";
$locality = "";
$operator = "";
$view = "";
$catalog_number = "";
$anspnumber = "";
// bounding box critera for search for points
$bounding_lat_n = 0;
$bounding_lat_s = 0;
$bounding_long_e = 0;
$bounding_long_w = 0;
// bounding box for part of map to view
$view_lat_n = 0;
$view_lat_s = 0;
$view_long_e = 0;
$view_long_w = 0;
// zoom
$zoom = 1;
$zoomsize_mapviewer = 2;
$zoomfactor = 2;
$zoomx = "";
$zoomy = "";
$forcelabels = 0;
$full = false;

// default values for image height and width
$image_width = 600;
$image_height = 300;

$getstuff = "";
$getpanstuff_mapviewer = "";
$hidden_mapviewer = "";

// get and sanitize fields from url or form submitted via GET.
if ($_GET['genus']!="") {
   
$genus = preg_replace("/[^A-Za-z\%\*\_\?]/","",$_GET['genus']);
   
$getstuff .= "&genus=$genus";
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='genus' value='$genus'>";
}
if (
$_GET['species']!="") {
   
$species = preg_replace("/[^a-z\%\*\_\?]/","",$_GET['species']);
   
$getstuff .= "&species=$species";
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='species' value='$species'>";
   
// species from form searches both species and subspecies fields.
}
if (
$_GET['field_number']!="") {
   
$field_number = preg_replace("/[^A-Za-z\ \-0-9\%\*\_\?]/","",$_GET['field_number']);
   
$getstuff .= "&field_number=$field_number";
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='field_number' value='$field_number'>";
}
if (
$_GET['country']!="") {
   
$country = preg_replace("/[^A-Za-z\ \.\_\%\*\_\?]/","",$_GET['country']);
   
$getstuff .= "&country=$country";
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='country' value='$country'>";
}
if (
$_GET['state']!="") {
   
$state = preg_replace("/[^A-Za-z\ \_\%\*\_\?]/","",$_GET['state']);
   
$getstuff .= "&state=$state";
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='state' value='$state'>";
}
if (
$_GET['county']!="") {
   
$county = preg_replace("/[^A-Za-z\ \.\%\*\_\?\(\)]/","",$_GET['county']);
   
$getstuff .= "&county=$county";
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='county' value='$county'>";
}
if (
$_GET['locality']!="") {
   
$locality = preg_replace("/[^A-Za-z\ \.\%\*\_\?]/","",$_GET['locality']);
   
$getstuff .= "&locality=$locality";
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='locality' value='$locality'>";
}
if (
$_GET['collector']!="") {
   
$collector = preg_replace("/[^A-Za-z\ \.\%\*\_\?]/","",$_GET['collector']);
   
$getstuff .= "&collector=$collector";
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='collector' value='$collector'>";
}
if (
$_GET['catalog_number']!="") {
   
$catalog_number = preg_replace("/[^A-Za-z\ 0-9\%\*\_\?]/","",$_GET['catalog_number']);
}
if (
$_GET['catalognumber']!="") {
   
$catalog_number = preg_replace("/[^A-Za-z\ 0-9\%\*\_\?]/","",$_GET['catalognumber']);
}
if (
$_GET['anspnumber']!="") {
   
$catalog_number = preg_replace("/[^A-Za-z\ 0-9\%\*\_\?]/","",$_GET['anspnumber']);
}
if (
$catalog_number!="") {
   
$anspnumber = $catalog_number;
   
$_GET['anspnumber'] = $catalog_number;
   
$getstuff .= "&catalog_number=$catalog_number";
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='catalog_number' value='$catalog_number'>";
}
// date collected might be passed by actual field name - loc_date
if ($_GET['loc_date']!="") { $_GET['date_collected']=$_GET['loc_date']; }
if (
$_GET['date_collected']!="") {
   
$date_collected = preg_replace("/[^0-9\_\?]/","",$_GET['date_collected']);
   
$date_collected = str_replace("?","_",$date_collected);
   
// treat as year collected, append wildcard at front to match %1832 to 11-MAY-1832
   
if (strlen($date_collected) > 4) {
      
$date_collected = "%".substr($date_collected,strlen($date_collected)-4,4);
   } else {
      
$date_collected = "%".$date_collected;
   }
   
$getstuff .= "&date_collected=$date_collected";
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='date_collected' value='$date_collected'>";
}
if (
$_GET['forcelabels']!="") {
   
$forcelabels = preg_replace("/[^0-9]/","",$_GET['forcelabels']);
   
$getstuff .= "&forcelabels=$forcelabels";
}
// **********************************************************
// Extent limits on blue marble:
//        EXTENT -180.000000 -89.900000 180.000000 83.674733
// **********************************************************
if ($_GET['bounding_lat_n']!="") {
   
$bounding_lat_n = preg_replace("/[^0-9\-\.]/","",$_GET['bounding_lat_n']);
   if (
$bounding_lat_n>90) { $bounding_lat_n= 90; }
   if (
$bounding_lat_n<-90) { $bounding_lat_n= -90; }
   
$bounding_lat_s = preg_replace("/[^0-9\-\.]/","",$_GET['bounding_lat_s']);
   if (
$bounding_lat_s>90) { $bounding_lat_s= 90; }
   if (
$bounding_lat_s<-90) { $bounding_lat_s= -90; }
   
$bounding_long_e = preg_replace("/[^0-9\-\.]/","",$_GET['bounding_long_e']);
   if (
$bounding_long_e>180) { $bounding_long_e= 180; }
   if (
$bounding_long_e<-180) { $bounding_long_e= -180; }
   
$bounding_long_w = preg_replace("/[^0-9\-\.]/","",$_GET['bounding_long_w']);
   if (
$bounding_long_w>180) { $bounding_long_w= 180; }
   if (
$bounding_long_w<-180) { $bounding_long_w= -180; }
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='bounding_lat_n' value='$bounding_lat_n'>";
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='bounding_lat_s' value='$bounding_lat_s'>";
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='bounding_long_w' value='$bounding_long_w'>";
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='bounding_long_e' value='$bounding_long_e'>";
}
$hidden_mapviewerview = "";
$getstuffview = "";
$getpanstuff_mapviewer = $getstuff;
if (
$_GET['full']!="") {
   
$full = true;
} else {
   if (
$_GET['view_lat_n']!="") {
      
$view_lat_n = preg_replace("/[^0-9\-\.]/","",$_GET['view_lat_n']);
      
$view_lat_s = preg_replace("/[^0-9\-\.]/","",$_GET['view_lat_s']);
      
$view_long_e = preg_replace("/[^0-9\-\.]/","",$_GET['view_long_e']);
      
$view_long_w = preg_replace("/[^0-9\-\.]/","",$_GET['view_long_w']);
      if (
$view_lat_n>90) { $view_lat_n= 90; }
      if (
$view_lat_n<-90) { $view_lat_n= -90; }
      if (
$view_lat_s>90) { $view_lat_s= 90; }
      if (
$view_lat_s<-90) { $view_lat_s= -90; }
      if (
$view_long_e>180) { $view_long_e= 180; }
      if (
$view_long_e<-180) { $view_long_e= -180; }
      if (
$view_long_w>180) { $view_long_w= 180; }
      if (
$view_long_w<-180) { $view_long_w= -180; }
      
$getstuff .= "&view_lat_n=$view_lat_n";
      
$getstuff .= "&view_lat_s=$view_lat_s";
      
$getstuff .= "&view_long_e=$view_long_e";
      
$getstuff .= "&view_long_w=$view_long_w";
      
$getpanstuff_mapviewer = $getstuff;
      
$hidden_mapviewerview .= "<INPUT TYPE=HIDDEN NAME='view_lat_n' value='$view_lat_n'>";
      
$hidden_mapviewerview .= "<INPUT TYPE=HIDDEN NAME='view_lat_s' value='$view_lat_s'>";
      
$hidden_mapviewerview .= "<INPUT TYPE=HIDDEN NAME='view_long_w' value='$view_long_w'>";
      
$hidden_mapviewerview .= "<INPUT TYPE=HIDDEN NAME='view_long_e' value='$view_long_e'>";
      if (
$view_lat_n < 90 && $bounding_lat_n=="") {
         
$bounding_lat_n = $view_lat_n;
         
$bounding_lat_s = $view_lat_s;
         
$bounding_long_e = $view_long_e;
         
$bounding_long_w = $view_long_w;
      }
   }
   if (
$_GET['zoom']!="") {
      
$zoomsize_mapviewer = preg_replace("/[^0-9\-\.]/","",$_GET['zoomsize']);
      if (
$zoomsize_mapviewer=="") { $zoomsize_mapviewer=2; }
      
$getstuff .= "&zoomsize_mapviewer=$zoomsize_mapviewer";
      
$zoom = preg_replace("/[^0-9\-]/","",$_GET['zoom']);
      
$zoomfactor = $zoom * $zoomsize_mapviewer;
      if (
$zoomfactor==0) { $zoomfactor = 1; }
   }
   
$dozoom = false;
   if (
$_GET['map_zoom_x']!="") {
      
$zoomx = preg_replace("/[^A-Za-z\ 0-9\%\*\_\?]/","",$_GET['map_zoom_x']);
      
$getstuff .= "&zoomx=$zoomx";
      if (
$_GET['map_zoom_y']!="") {
         
$zoomy = preg_replace("/[^A-Za-z\ 0-9\%\*\_\?]/","",$_GET['map_zoom_y']);
         
$getstuff .= "&zoomy=$zoomy";
         
$dozoom = true;
         
$getstuff .= "&zoomfactor=$zoomfactor";
      }
   }
}
if (
$_GET['image_height']!="" && $_GET['image_width']!="") {
   
$ih = preg_replace("/[^0-9]/","",$_GET['image_height']);
   
$iw = preg_replace("/[^0-9]/","",$_GET['image_width']);
   if (
$ih!="" && $iw!="" && $iw < 2401) {
      
$image_height = $ih;
      
$image_width = $iw;
      
$getstuff .= "&image_height=$image_height";
      
$getstuff .= "&image_width=$image_width";
   }
}
if (
$dozoom) {
   
// create a map
   
$map_path="/var/www/htdocs_ph/maps/";            
   
$map = ms_newMapObj($map_path."world_image.map");
   
$map->setSize($image_width,$image_height);
   
$my_extent = $map->extent;
   
// set crop of map
   
if ($view_lat_n!="") {
      
// setExtent(SE corner, NW corner)
      
$my_extent = ms_newrectObj();
      
$my_extent->setExtent($view_long_e,$view_lat_s,$view_long_w,$view_lat_n);
   }
   if (
$zoomx!="" && $zoomy!="") {
      
$my_point = ms_newpointObj();
      
$my_point->setXY($zoomx,$zoomy);
      
$map->zoompoint($zoomfactor,$my_point,$map->width,$map->height,$my_extent);
   }
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='view_lat_n' value='".$map->extent->maxy."'>";
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='view_lat_s' value='".$map->extent->miny."'>";
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='view_long_w' value='".$map->extent->maxx."'>";
   
$hidden_mapviewer .= "<INPUT TYPE=HIDDEN NAME='view_long_e' value='".$map->extent->minx."'>";
} else {
   
$hidden_mapviewer .= $hidden_mapviewerview;
   
$getstuff .= $getstuffview;
}

$getbit_mapviewer = "";
if (
$getstuff!="") {
  
// strip the leading & off of getstuff to use as .php?$getbit below
  
$getbit = substr($getstuff,1);
  
$getbit_mapviewer = $getbit;
  
$getpanstuff_mapviewer = substr($getpanstuff_mapviewer,1);
}

// prepare form elements

$check_pan_mapviewer = "";
$check_zout_mapviewer = "";
$check_zin_mapviewer = "CHECKED";
if (
$zoom == 0) {
   
$zoomfactor = 1;
   
$check_pan_mapviewer = "CHECKED";
   
$check_zout_mapviewer = "";
   
$chekc_zin = "";
} else if (
$zoomfactor < 0) {
   
$check_pan_mapviewer = "";
   
$check_zout_mapviewer = "CHECKED";
   
$check_zin_mapviewer = "";
}

$check_labels_none_mapviewer = "CHECKED";
$check_labels_cat_mapviewer = "";
$check_labels_taxon_mapviewer = "";
if (
$forcelabels=="1") {
   
$check_labels_none_mapviewer = "";
   
$check_labels_cat_mapviewer = "CHECKED";
   
$check_labels_taxon_mapviewer = "";
} else if (
$forcelabels==2) {
   
$check_labels_none_mapviewer = "";
   
$check_labels_cat_mapviewer = "";
   
$check_labels_taxon_mapviewer = "CHECKED";
}

// include header and search form from sheets.php

// Use care in naming to make sure that that variables used below
// aren't overwritten when including sheets.php

$mode = "show_nothing";
@include(
"sheets.php");
@include(
"connect_lib_ph.php");
head("Map");
search_terms_form("map");
$getbit = $getbit_mapviewer;

echo
"
<FORM name=mapimageform METHOD=GET ACTION='map_viewer.php'>
<table>
  <tr>
   <td>
   <table>
     <tr>
       <td>
           <a href='map_viewer.php?zoom=0&map_zoom.x=200&map_zoom.y=50&$getpanstuff_mapviewer'>NW</a>
       </td>
       <td>
         <div align=center>
           <a href='map_viewer.php?zoom=0&map_zoom.x=300&map_zoom.y=50&$getpanstuff_mapviewer'>N</a>
         </div>
       </td>
       <td>
           <a href='map_viewer.php?zoom=0&map_zoom.x=400&map_zoom.y=50&$getpanstuff_mapviewer'>NE</a>
       </td>
     </tr>
     <tr>
       <td>
           <a href='map_viewer.php?zoom=0&map_zoom.x=100&map_zoom.y=150&$getpanstuff_mapviewer'>W</a>
       </td>
       <td>
         <INPUT TYPE=IMAGE NAME='map_zoom' SRC='map.php?$getbit' height=300 width=600 alt='Map of all georeferenced specimens in query'>
       </td>
       <td>
           <a href='map_viewer.php?zoom=0&map_zoom.x=400&map_zoom.y=150&$getpanstuff_mapviewer'>E</a>
       </td>
     </tr>
     <tr>
       <td>
           <a href='map_viewer.php?zoom=0&map_zoom.x=200&map_zoom.y=250&$getpanstuff_mapviewer'>SW</a>
       </td>
       <td>
         <div align=center>
           <a href='map_viewer.php?zoom=0&map_zoom.x=300&map_zoom.y=250&$getpanstuff_mapviewer'>S</a>
         </div>
       </td>
       <td>
           <a href='map_viewer.php?zoom=0&map_zoom.x=400&map_zoom.y=250&$getpanstuff_mapviewer'>SE</a>
       </td>
     </tr>
   </table>
   </td>
   <td>
    Show:<BR>
        Points only <INPUT TYPE=RADIO NAME='forcelabels' VALUE=0 $check_labels_none_mapviewer><BR>
        Catalog No.<INPUT TYPE=RADIO NAME='forcelabels' VALUE=1 $check_labels_cat_mapviewer><BR>
        Species <INPUT TYPE=RADIO NAME='forcelabels' VALUE=2 $check_labels_taxon_mapviewer><BR>
        Click on map and:<BR>
    Pan <INPUT TYPE=RADIO NAME='zoom' VALUE=0 $check_pan_mapviewer><BR>
    Zoom In <INPUT TYPE=RADIO NAME='zoom' VALUE=1 $check_zin_mapviewer ><BR>
    Zoom Out <INPUT TYPE=RADIO NAME='zoom' VALUE=-1 $check_zout_mapviewer ><BR>
    Zoom By <INPUT TYPE=TEXT NAME='zoomsize' VALUE='$zoomsize_mapviewer' SIZE=2 maxlength=2><BR>
        <BR>
    <INPUT TYPE=SUBMIT NAME='full' VALUE='Whole World' SIZE=2>$hidden_mapviewer<BR>
        <font size=-1 color=blue>Base maps courtesy of NASA's Visible Earth team and NGA/NOAA.</font><BR>
   </td>
  </tr>
</table>
<FORM>
"
;

$view="map";
search();
termslink();
footer();
?>