tag = 'Folder'; $this->items = array(); $this->children = array(); //set the minimum back $this->setItem('name',$subjectPlacemark->getItem('name')); if ($timestamp = $subjectPlacemark->getChild('TimeStamp')) { $this->addChild(clone $timestamp,'','TimeStamp'); } if ($subjectPlacemark->issetItem('visibility')) { $this->setItem('visibility',$subjectPlacemark->getItem('visibility')); } //add the subject placemark $this->addChild($subjectPlacemark); //add the photographer placemark $photographerPlacemark = $this->addChild(new kmlPlacemark(null,'Photographer')); if (!empty($photographer)) { $photographerPlacemark->setItemCDATA('description',"($photographer)"); } $sbjPoint = $subjectPlacemark->getChild('Point'); //setup the sightline $MultiGeometry = $photographerPlacemark->addChild('MultiGeometry'); $MultiGeometry->addChild($kmlPoint); $LineString = $MultiGeometry->addChild('LineString'); $LineString->setItem('tessellate',1); $LineString->setItem('altitudeMode','clampToGround'); $LineString->setItem('coordinates',$sbjPoint->getItem('coordinates')." ".$kmlPoint->getItem('coordinates')); //seems a LookAt is required (but is nice to set the heading anyway!) $LookAt = $photographerPlacemark->addChild('LookAt'); $this->addChild($LookAt); $LookAt->setItem('longitude',$kmlPoint->lon); $LookAt->setItem('latitude',$kmlPoint->lat); $LookAt->setItem('tilt',70); $LookAt->setItem('range',1000); if (strlen($view_direction) && $view_direction != -1) { $LookAt->setItem('heading',$view_direction); } else { $LookAt->setItem('heading',$kmlPoint->calcHeadingToPoint($sbjPoint)); } $Style = $photographerPlacemark->addChild('Style'); $IconStyle = $Style->addChild('IconStyle'); $IconStyle->setItem('scale',0.7); $Icon = $IconStyle->addChild('Icon'); $Icon->setItem('href',"http://maps.google.com/mapfiles/kml/pal4/icon46.png"); $LabelStyle = $Style->addChild('LabelStyle'); $LabelStyle->setItem('scale',0); return $this; } public function addViewDirection($view_direction) { $LookAt = $this->addChild('LookAt'); $sbjPoint = $this->getChild('Point'); $LookAt->setItem('longitude',$sbjPoint->lon); $LookAt->setItem('latitude',$sbjPoint->lat); $LookAt->setItem('tilt',70); $LookAt->setItem('range',1000); if (strlen($view_direction) && $view_direction != -1) { $LookAt->setItem('heading',$view_direction); } else { $LookAt->setItem('heading',0); } } } class kmlPlacemark_Circle extends kmlPlacemark { public function __construct($id,$itemname = '',$kmlPoint = null,$d = 10000) { parent::__construct($id,$itemname,$kmlPoint); if (is_object($kmlPoint)) { $this->addCircle($kmlPoint,$d); } } public function addCircle($kmlPoint,$d) { if ($sbjPoint = $this->unsetChild('Point')) { $MultiGeometry = $this->addChild('MultiGeometry'); $MultiGeometry->addChild($sbjPoint); $LineString = $MultiGeometry->addChild('LineString'); } else { $LineString = $this->addChild('LineString'); } $coordinates = array(); // convert coordinates to radians $lat1 = deg2rad($kmlPoint->lat); $long1 = deg2rad($kmlPoint->lon); //d in meters; $d_rad = $d/6378137; // loop through the array and write path linestrings for($i=0; $i<360; $i+=12) { $radial = deg2rad($i); $lat_rad = asin(sin($lat1)*cos($d_rad) + cos($lat1)*sin($d_rad)*cos($radial)); $dlon_rad = atan2(sin($radial)*sin($d_rad)*cos($lat1), cos($d_rad)-sin($lat1)*sin($lat_rad)); $lon_rad = fmod(($long1+$dlon_rad + M_PI), 2*M_PI) - M_PI; $coordinates[] = sprintf('%.6f,%.6f,0',rad2deg($lon_rad),rad2deg($lat_rad)); } $coordinates[] = $coordinates[0];//join it back up by reusing the first point $LineString->setItem('coordinates',join(' ',$coordinates)); } } #$_SERVER['HTTP_HOST'] = "www.geograph.org.uk"; function getKmlFilepath($extension,$level,$square = null,$gr='',$i = 0) { #$i = 270727; if (is_object($square)) { $s = $square->gridsquare; if ($level > 2) { $n = sprintf("%d%d",intval($square->eastings/20)*2,intval($square->northings/20)*2); } } elseif (!empty($gr)) { preg_match('/^([A-Z]{1,2})([\d_]*)$/',strtoupper($gr),$m); $s = $m[1]; if ($level > 2) { $numbers = $m[2]; $numlen = strlen($m[2]); $c = $numlen/2; $n = sprintf("%d%d",intval($numbers{0}/2)*2,intval($numbers{$c}/2)*2); } } $base=$_SERVER['DOCUMENT_ROOT'].'/kml'; $prefix = "/kml"; $base2=$_SERVER['DOCUMENT_ROOT'].'/sitemap'; if ($i) { $base .= "/$i"; $prefix .= "/$i"; $base2 .= "/$i"; } if (!is_dir("$base/$s")) mkdir("$base/$s"); if (!is_dir("$base2/$s")) mkdir("$base2/$s"); if ($n && !is_dir("$base/$s/$n")) mkdir("$base/$s/$n"); if ($n && !is_dir("$base2/$s/$n")) mkdir("$base2/$s/$n"); if ($level == 3) { return "$prefix/$s/$n.$extension"; } elseif ($level == 2) { return "$prefix/$s.$extension"; } elseif ($level <= 1) { return "$prefix/geograph.$extension"; } else { if ($n && !is_dir("$base/$s/$n/$level")) mkdir("$base/$s/$n/$level"); if ($n && !is_dir("$base2/$s/$n/$level")) mkdir("$base2/$s/$n/$level"); return "$prefix/$s/$n/$level/$gr.$extension"; } } function kmlPageFooter(&$kml,&$square,$gr,$self,$level,$html = '',$list = '') { global $db,$CONF; if (isset($_GET['debug'])) { print "Open in Google Earth
"; print ""; } elseif (isset($_GET['download'])) { $kml->outputKML(); exit; } else { $file = getKmlFilepath($kml->extension,$level,$square,$gr); $db->Execute("replace into kmlcache set `url` = '$self?gr=$gr',filename='$file',`level` = $level,`rendered` = 1"); $base=$_SERVER['DOCUMENT_ROOT']; $kml->outputFile('kmz',false,$base.$file); if ($html) { $file = str_replace("kml",'sitemap',$file); $file = str_replace("kmz",'html',$file); if (!empty($list)) { $s = "Photos in ".$list." :: Geograph British Isles"; } elseif (isset($square->grid_reference)) { $s = "Photos in {$square->grid_reference} :: Geograph British Isles"; } elseif (!empty($gr)) { $s = "Photos near ".$gr." :: Geograph British Isles"; } else { $s = "Photos in ".$CONF['references_all'][0]; } $file1 = getKmlFilepath($kml->extension,$level-1,$square,$gr); $file1 = str_replace("kml",'sitemap',$file1); $file1 = str_replace("kmz",'html',$file1); $html = "{$s}\n". "". "

Geograph British Isles

". "

Homepage | Sitemap | Up one level | $s

". "". ""; file_put_contents($base.$file,$html); } } } function getHtmlLinkP($url,$text) { return "
  • $text
  • \n"; } function getHtmlLink($url,$text,$prefix = 'in',$postfix='') { $url = str_replace("kml",'sitemap',$url); $url = str_replace("kmz",'html',$url); return "
  • View Photographs $prefix $text$postfix
  • \n"; } ?>