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";