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(); $query = "select astext(the_geom) as multiway ,ID as ID_Way from Rozdzielcza_test_bzyk_drogi where numpoints(the_geom)>1"; $result = DB::getPDO()->fetchall($query); $joins_asText = array(); foreach ($result as $row) { $multiway = Vendor_Geophp::load($row['multiway'], 'wkt'); //echo $multiway->length(); for ($i = 1; $i < $n = $multiway->numPoints(); $i++) { $way = new LineString(array($multiway->pointN($i), $multiway->pointN($i+1))); $ways_asText[] = $way->asText(); $ways_2ID_Way[]=$row['ID_Way']; if (!in_array($multiway->pointN($i)->asText(), $joins_asText)) $joins_asText[] = $multiway->pointN($i)->asText(); } if (!in_array($multiway->pointN($n)->asText(), $joins_asText)) $joins_asText[] = $multiway->pointN($n)->asText(); } $query = "select ID, astext(the_geom) as point, astext(the_geom_nearest_way) as way, astext(the_geom_xpoint) as xpoint, ID_Way from Rozdzielcza_test_bzyk_punkty_adresowe"; $result = DB::getPDO()->fetchall($query); $xpoints = array(); foreach ($result as $row) { $points[$row['ID']] = Vendor_Geophp::load($row['point'], 'wkt'); $points2ID_Way[$row['ID']] = $row['ID_Way'] ; $points_asText[$row['ID']] = $points[$row['ID']]->asText(); $xpoint = Vendor_Geophp::load($row['xpoint'], 'wkt'); if (!($key = array_search($xpoint->asText(), $xpoints))) $key = array_push($xpoints, $xpoint->asText())-1; $xpoints2points[$key][] = $row['ID']; $points2xpoints[$row['ID']] = $key; $way = Vendor_Geophp::load($row['way'], 'wkt'); if (!(in_array($xpoint->asText(), $joins_asText))) { if (@!in_array($key, $ways2cut[array_search($way->asText(), $ways_asText)])) { $ways2cut[array_search($way->asText(), $ways_asText)][] = $key; } else echo "."; }; } function pointsDistance($a, $b) { $line = new LineString(array($a, $b)); return $line->length(); } foreach ($ways2cut as $way_key => $xpoint_keys) { $distances = array(); $way = Vendor_Geophp::load($ways_asText[$way_key], 'wkt'); foreach ($xpoint_keys as $xpoint_key) { $xpoint = Vendor_Geophp::load($xpoints[$xpoint_key], 'wkt'); $key = array_push($joins_asText, $xpoint->asText())-1; foreach ($xpoints2points[$xpoint_key] as $point_key) { $points2joins[$point_key] = $key; } $distances[$xpoint_key] = pointsDistance($way->startPoint(), $xpoint); } asort($distances); $sub_xpoints = array(); foreach (array_keys($distances) as $xpoint_key) { $sub_xpoints[] = Vendor_Geophp::load($xpoints[$xpoint_key]); } $startPoint = $way->startPoint(); $endPoint = $way->endPoint(); $way = new LineString(array($startPoint, $sub_xpoints[0])); $ways_asText[$way_key] = $way->asText(); for ($i = 0; $i < $n = count($sub_xpoints) - 1; $i++) { $way = new LineString(array($sub_xpoints[$i], $sub_xpoints[$i+1])); $ways_asText[] = $way->asText(); } $way = new LineString(array($sub_xpoints[$n], $endPoint)); $ways_asText[] = $way->asText(); } foreach (array_keys($ways_asText) as $way_key) { $way = Vendor_Geophp::load($ways_asText[$way_key], 'wkt'); $ways_lenghts[$way_key] = $way->length(); for ($i = 1; $i <= 2; $i++) { $join = $way->pointN($i)->asText(); $join_key = array_search($join, $joins_asText); //if (!$join_key) echo "."; $ways2joins[$way_key][] = $join_key; $joins2ways[$join_key][] = $way_key; } } /* // $val=array(A=>asd,B=>cos) --- // // cos cos> array(0=asd,1=asd) asd asd array(A=>asd,B=>array(0=>asd,1=>asd)) asd asd asd // $pozA[1]=dupa // $pozA[2]=jasiu */ // function defination to convert array to xml function array_to_xml( $data, &$xml_data ) { foreach( $data as $key => $value ) { $key_=""; if( is_numeric($key) ){ $key_ = 'item'; } if( is_array($value) ) { $subnode = $xml_data->addChild($key_); $subnode->addAttribute('id', $key); array_to_xml($value, $subnode); } else { $subnode=$xml_data->addChild("$key_",htmlspecialchars("$value")); if( is_numeric($key) ){ $subnode->addAttribute('id', $key); } } } } file_put_contents('points2ID_Way.txt',serialize($points2ID_Way)); //for better debug to see variables in editor i make also print_r ob_start();print_r($points2ID_Way); $contents = ob_get_contents();ob_end_clean(); file_put_contents('points2ID_Way_print_r.txt',$contents); $xml_data = new SimpleXMLElement(''); array_to_xml($points2ID_Way,$xml_data); print $xml_data->asXML("points2ID_Way.xml"); unset($xml_data); file_put_contents('ways_2ID_Way.txt',serialize($ways_2ID_Way)); //for better debug to see variables in editor i make also print_r ob_start();print_r($ways_2ID_Way); $contents = ob_get_contents();ob_end_clean(); file_put_contents('ways_2ID_Way_print_r.txt',$contents); $xml_data = new SimpleXMLElement(''); array_to_xml($ways_2ID_Way,$xml_data); print $xml_data->asXML("ways_2ID_Way.xml"); unset($xml_data); file_put_contents('ways2joins.txt',serialize($ways2joins)); //for better debug to see variables in editor i make also print_r ob_start();print_r($ways2joins); $contents = ob_get_contents();ob_end_clean(); file_put_contents('ways2joins_print_r.txt',$contents); $xml_data = new SimpleXMLElement(''); array_to_xml($ways2joins,$xml_data); print $xml_data->asXML("ways2joins.xml"); unset($xml_data); file_put_contents('joins2ways.txt',serialize($joins2ways)); ob_start();print_r($joins2ways); $contents = ob_get_contents();ob_end_clean(); file_put_contents('joins2ways_print_r.txt',$contents); $xml_data = new SimpleXMLElement(''); array_to_xml($joins2ways,$xml_data); print $xml_data->asXML("joins2ways.xml"); unset($xml_data); file_put_contents('points2joins.txt',serialize($points2joins)); ob_start();print_r($points2joins); $contents = ob_get_contents();ob_end_clean(); file_put_contents('points2joins_print_r.txt',$contents); $xml_data = new SimpleXMLElement(''); array_to_xml($points2joins,$xml_data); print $xml_data->asXML("points2joins.xml"); unset($xml_data); file_put_contents('joins_asText.txt',serialize($joins_asText)); ob_start();print_r($joins_asText); $contents = ob_get_contents();ob_end_clean(); file_put_contents('joins_asText_print_r.txt',$contents); $xml_data = new SimpleXMLElement(''); array_to_xml($joins_asText,$xml_data); print $xml_data->asXML("joins_asText.xml"); unset($xml_data); file_put_contents('ways_asText.txt',serialize($ways_asText)); ob_start();print_r($ways_asText); $contents = ob_get_contents();ob_end_clean(); file_put_contents('ways_asText_print_r.txt',$contents); $xml_data = new SimpleXMLElement(''); array_to_xml($ways_asText,$xml_data); print $xml_data->asXML("ways_asText.xml"); unset($xml_data); file_put_contents('points_asText.txt',serialize($points_asText)); ob_start();print_r($points_asText); $contents = ob_get_contents();ob_end_clean(); file_put_contents('points_asText_print_r.txt',$contents); $xml_data = new SimpleXMLElement(''); array_to_xml($points_asText,$xml_data); print $xml_data->asXML("points_asText.xml"); unset($xml_data); /* function findWay($join_key, $point_key, $path = array()) { global $ways2joins, $joins2ways, $points2joins, $ways_asText, $joins2ways, $points, $points2xpoints, $xpoints2joins, $ways_lengths, $res; //echo implode('->',$path)."\n\n"; if ($join_key == $points2joins[$point_key]) $res[] = $path; else { foreach ($joins2ways[$join_key] as $way_key) { if (!in_array($way_key, $path)) { // $joins = $ways2joins[$way_key]; // $back_join_subkey = array_search($join_key, $joins); // $new_join_subkey = 1 - $back_join_subkey; // $new_join = $joins[$new_join_subkey]; $new_join = $ways2joins[$way_key][1 - array_search($join_key, $ways2joins[$way_key])]; findWay($new_join, $point_key, array_merge($path,array($way_key))); } } } } */ //print_r($ways2joins); //for ($i = 0; $i < count($points); $i++) { // if (isset($res)) unset($res); // findWay(2000, $i); // print_r($res); //} //print_r($ways); echo "ways count: ".count($ways_asText)."\n"; $db = DB::getDB(); $db->query("truncate table Rozdzielcza_test_bzyk_ways"); $db->query("truncate table Rozdzielcza_test_bzyk_joins"); foreach ($ways_asText as $way) { $query = "insert into Rozdzielcza_test_bzyk_ways (the_geom) values (linefromtext('".$way."'))"; $db->query($query); //echo $query."\n"; } foreach ($joins_asText as $join) { $query = "insert into Rozdzielcza_test_bzyk_joins (the_geom) values (pointfromtext('".$join."'))"; $db->query($query); }