this script could be run from bash e.g. php biale_plamy.php --help
" ;
check();
}
}
function check() {
echo "
\n i run check()";
//todo to set arguments to rebuild tables etc:
$check_tbls=array('Rozdzielcza_test_bzyk_drogi','Rozdzielcza_test_bzyk_joins','Rozdzielcza_test_bzyk_przylacza_HIST',
'Rozdzielcza_test_bzyk_przylacza','Rozdzielcza_test_bzyk_punkty_adresowe','Rozdzielcza_test_bzyk_ways');
//$tables = DB::getPDO()->list_tables();
foreach($check_tbls as $tbl) {
$query = "select ID from ".$tbl." limit 1 ";
echo "
\nresult chk for tbl:".$tbl." ;";
try{
$result = DB::getPDO()->fetchall($query);
} catch(Exception $exception) {
// return $exception;
echo "
\n jest blad z tbl:".$tbl." i get sample table structure with data from ../sql/".$tbl.".sql - it should be manually replaced by correct/newer!";
$sql = file_get_contents('../sql/'.$tbl.'.sql');
try{
$result = DB::getPDO()->fetchall($sql);
} catch(Exception $exception2) {
echo "
\n jest blad dump dla tbl:".$tbl;
}
}
// print_r($exception);
print_r($result);
}
}
init_sh_check();
$ways2joins = unserialize(file_get_contents('ways2joins.txt'));
$joins2ways = unserialize(file_get_contents('joins2ways.txt'));
$points2joins = unserialize(file_get_contents('points2joins.txt'));
$joins_asText = unserialize(file_get_contents('joins_asText.txt'));
$ways_asText = unserialize(file_get_contents('ways_asText.txt'));
$points_asText = unserialize(file_get_contents('points_asText.txt'));
function joins2lineString($joins_keys) {
global $joins_asText;
if ($joins_keys) {
foreach ($joins_keys as $join_key) {
$points[] = Vendor_Geophp::load($joins_asText[$join_key], 'wkt');
}
return new LineString($points);
} else return null;
}
function findWay($joinA, $joinB, $path = array()) {
global $ways2joins, $joins2ways, $points2joins, $ways_asText, $points_asText;
if ($joinA == $joinB) {
$joinsPath = array($joinB);
foreach (array_reverse($path) as $way_key) {
array_unshift($joinsPath, $ways2joins[$way_key][1 - array_search($joinsPath[0], $ways2joins[$way_key])]);
}
return $joinsPath;
} else {
$subPaths = array();
foreach ($joins2ways[$joinA] as $way_key) {
if (!in_array($way_key, $path)) {
$new_join = $ways2joins[$way_key][1 - array_search($joinA, $ways2joins[$way_key])];
if ($subPath = findWay($new_join, $joinB, array_merge($path,array($way_key)))) $subPaths[] = $subPath;
}
}
if ($subPaths) {
if (count($subPaths) == 1) return $subPaths[0];
else {
$shortestKey = 0;
foreach ($subPaths as $key => $subPath) {
$distance_cur = 0;
foreach ($subPath as $way_key) {
$distance_cur += Vendor_Geophp::load($ways_asText[$way_key], 'wkt')->length();
}
if (!$shortestKey || ($shortestKey && $distance_cur < $distance)) {
$shortestKey = $key;
$distance = $distance_cur;
}
}
return $subPaths[$key];
}
}
else {
return null;
}
}
}
function findJoinInDB($id) {
global $joins_asText;
$join = DB::getPDO()->fetchValue("select astext(the_geom) from Rozdzielcza_test_bzyk_joins where ID='{$id}'");
if ($join) {
$join = Vendor_Geophp::load($join, 'wkt')->asText();
$key = array_search($join, $joins_asText);
if ($key) return $key;
else return null;
} else return null;
}
#echo joins2lineString($res = findWay(100,110))->asText();
#echo joins2lineString($res = findWay(25690,20134))->asText();
$timeStart = microtime();
#$path = joins2lineString(findWay(25690,23039));
$path = joins2lineString(findWay(findJoinInDB(142),findJoinInDB(147)));
$timeEnd = microtime();
if ($path) {
echo $path->asText()."\n";
echo "Dlugosc: ".$path->greatCircleLength()."\n";
} else echo "Brak drogi";
echo $ways_asText[141];
list($usecStart, $secStart) = explode(" ", $timeStart);
list($usecEnd, $secEnd) = explode(" ", $timeEnd);
$diff = $secEnd - $secStart + $usecEnd - $usecStart;
echo "\n\nCzas liczenia: ".$diff." s\n";
//$distance = 0;
//foreach ($res as $way_key) {
// $distance += Vendor_Geophp::load($ways_asText[$way_key], 'wkt')->greatCircleLength();
//}
//print_r($res);
//echo "Distance: ".$distance."m\n";