array(),
"name_array" => array(),
"latitude_array" => array(),
"longitude_array" => array(),
"coord_accuracy_array" => array(),
"begin_date_array" => array(),
"end_date_array" => array()
);
private $input_file;
private $input_line;
private $input_fields = array();
private $point_count = 0;
private $output_file;
private $return_string = "";
// public function checkTREFile($input_file_path) {
// check number of input_fields
// check the used field delimiter
// check first line : column headers or not ?
// check each field, common errors like lat/lon switching
// } // function checkTREFile
// search for a line with an equal sign
// see if that line has got multiple brackets
// if so : BINGO ! read in from first bracket till semicolon
public function readPointsFromTREFile($input_file_path) {
$this->point_count = 0;
$this->input_file = fopen($input_file_path,"r");
$this->input_line = trim(fgets($this->input_file));
$i=0;
// skip all lines till we find the "translate" block
while ((strpos($this->input_line,"TRANSLATE") === FALSE ) && (!feof($this->input_file)) ) {
$this->input_line = trim(fgets($this->input_file));
$i++;
}
// now read in alle the lines in the "translate" block, containing
// all the info we need :
// 1. the ID number of the taxon as used in the tree descriptions
// 2. the label of the taxon : we'll use this to connect the tree information
// harvested here to the taxon point coordinates we get from the .csv file
//echo($i);
// get rid of nasty whitespaces
$inputstring = str_replace(" ","",$inputstring);
$levels = array();
$tempstring = $inputstring;
$cnt = 0;
$tl=0;
$id = "my_id".$cnt;
$i=1;
// we search for a comma, then we check both sides of it
// if we find an opening bracket on the left and a closing bracket to the right,
// we replace that part with a single node. So we replace the node pairs from the bottom
// up, as long as we find comma's (no more comma's means all pairs have been substituted
// by single nodes )
while (substr_count($inputstring,",")>1) {
$pos = strpos($inputstring,",",$fwpos);
$fwpos = $pos + 1;
$rwpos = $pos - 1;
$ffwd=substr($inputstring,$fwpos,1);
$frwd=substr($inputstring,$rwpos,1);
// look forward till we find a bracket
while ($ffwd <> ")" && $ffwd <> "(") {
$ffwd=substr($inputstring,$fwpos,1);
$fwpos++;
} // while $ffwd
// check what kind of bracket we found
if ($ffwd == "(") { /* not the type we were looking for : ignore */ }
elseif ($ffwd == ")") {
// this could be something, if we find a matching opening bracket
// on the other side : look backwards for that
while ($frwd <> ")" && $frwd <> "(") {
$frwd=substr($inputstring,$rwpos,1);
$rwpos--;
} // while $frwd
// check what kind of bracket we found
if ($frwd == "(") { // yes! we have a hit !
$cutstring = substr($inputstring,$rwpos+1,($fwpos-$rwpos-1));
$no_brack1 = str_replace(")","",$cutstring);
$no_brackets = str_replace("(","",$no_brack1);
$pieces = explode(",",$no_brackets);
$tempstring = str_replace($cutstring,$id,$inputstring);
$cnt +=1;
if (array_key_exists ($pieces[0],$levels)) {
$lvl1 = $levels ["$pieces[0]"]["level"];
}
else {$levels ["$pieces[0]"]["level"] = 1;
$lvl1=1;}
if (array_key_exists ($pieces[1],$levels)) {
$lvl2 = $levels ["$pieces[1]"]["level"];
}
else {$levels ["$pieces[1]"]["level"] = 1;
$lvl2=1;}
$lvl = max($lvl1,$lvl2)+1;
$levels["$id"]["level"] = $lvl;
$lat["$id"]= min($lat[$pieces[0]],$lat[$pieces[1]]) + (( max($lat[$pieces[0]],$lat[$pieces[1]])
- min($lat[$pieces[0]],$lat[$pieces[1]]) ) /2);
$lon["$id"]= min($lon[$pieces[0]],$lon[$pieces[1]]) + (( max($lon[$pieces[0]],$lon[$pieces[1]])
- min($lon[$pieces[0]],$lon[$pieces[1]]) ) /2);
if (array_key_exists($pieces[0],$lat)) {
//echo ($lvl);
$outstring .= $lat[$pieces[0]].",".$lon[$pieces[0]].",";
$outstring .= ($levels ["$pieces[0]"]["level"])*12000;
$outstring .= "\n";
$outstring .= $lat[$pieces[0]].",".$lon[$pieces[0]].",";
$outstring .= ($lvl)*12000;
$outstring .= "\n";
}
if (array_key_exists($pieces[1],$lat)) {
$outstring .= $lat[$pieces[1]].",".$lon[$pieces[1]].",";
$outstring .= ($lvl)*12000;
$outstring .= "\n";
// echo("
");
$outstring .= $lat[$pieces[1]].",".$lon[$pieces[1]].",";
$outstring .= (($levels ["$pieces[1]"]["level"])*12000);
$outstring .= "\n";
// echo("
");
}
// $color += 150;
$outstring .= '
';
// $outstring .= '
// id1
//
// ';
// $outstring .= $lat[$pieces[0]].",".$lon[$pieces[0]].",";
// $outstring .= $lvl*12000;
// $outstring .= '
//
// ';
// echo $lvl;
$id = "my_id".$cnt;
//echo($fwpos);
$fwpos = $fwpos - ($fwpos-$rwpos-1);
// echo ("
");
//echo($fwpos);
// echo ("
");
// echo($tempstring);
} // if $frwd
} // elseif
else {};
//$worksub = substr($inputstring,$pos,$len);
//$single = substr($worksub,0,1);
//while ($single<>")" && $single<>"(" ) {
//$worksub = substr($inputstring,$i,$count);
//$count++;
//$single = substr($worksub,$count,1);
//echo ($worksub);
//echo('
');
//echo("$i");
//echo($single);
//echo('
');
// } // while
// if ($single == ")") {}
// else {}
$inputstring = $tempstring;
// } // for $i
//echo ($tempstring);
$i++;
} // while $inputstring <> ""
//while (!feof($this->input_file)) {
// $this->points_array["id_array"][$this->point_count] = $this->input_fields[0];
// $this->points_array["name_array"][$this->point_count] = $this->input_fields[1];
// $this->points_array["latitude_array"][$this->point_count] = $this->input_fields[2];
// $this->points_array["longitude_array"][$this->point_count] = $this->input_fields[3];
// $this->points_array["coord_accuracy_array"][$this->point_count] = $this->input_fields[4];
// $this->points_array["begin_date_array"][$this->point_count] = $this->input_fields[5];
// $this->points_array["end_date_array"][$this->point_count] = $this->input_fields[6];
// $this->input_line = trim(fgets($this->input_file));
// $this->point_count++;
//}
fclose($this->input_file);
return($this->points_array);
} //function readPointsFromTREFile
} // class TRE_Module
?>