biale_plamy.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. //$_SERVER['SERVER_NAME'] = 'biuro.biall-net.pl';
  3. require("../../se-lib/bootstrap.php");
  4. Lib::loadClass("Vendor_Geophp");
  5. //todo to set arguments to rebuild tables etc:
  6. $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');
  7. foreach($check_tbls as $tbl) {
  8. $query = "describe table ".$tbl;
  9. $result = DB::getPDO()->fetchall($query);
  10. echo "result chk for tbl:".$tbl." :";
  11. print_r($result);
  12. }
  13. phpinfo();
  14. die();
  15. $query = "select astext(the_geom) as multiway from Rozdzielcza_test_bzyk_drogi where numpoints(the_geom)>1";
  16. $result = DB::getPDO()->fetchall($query);
  17. $joins = array();
  18. foreach ($result as $row) {
  19. $multiway = Vendor_Geophp::load($row['multiway'], 'wkt');
  20. //echo $multiway->length();
  21. for ($i = 1; $i < $n = $multiway->numPoints(); $i++) {
  22. $way = new LineString(array($multiway->pointN($i), $multiway->pointN($i+1)));
  23. $ways[] = $way->asText();
  24. if (!in_array($multiway->pointN($i)->asText(), $joins)) $joins[] = $multiway->pointN($i)->asText();
  25. }
  26. if (!in_array($multiway->pointN($n)->asText(), $joins)) $joins[] = $multiway->pointN($n)->asText();
  27. }
  28. //$db = DB::getDB();
  29. //$db->query("truncate table Rozdzielcza_test_bzyk_ways");
  30. //foreach ($ways as $way) {
  31. // $query = "insert into Rozdzielcza_test_bzyk_ways (the_geom) values (linefromtext('".$way->asText()."'))";
  32. // $db->query($query);
  33. //}
  34. //die();
  35. // todo relacje ways <-> joins
  36. $query = "select ID, astext(the_geom) as point, astext(the_geom_nearest_way) as way, astext(the_geom_xpoint) as xpoint from Rozdzielcza_test_bzyk_punkty_adresowe";
  37. $result = DB::getPDO()->fetchall($query);
  38. $xpoints = array();
  39. foreach ($result as $row) {
  40. $points[$row['ID']] = Vendor_Geophp::load($row['point'], 'wkt');
  41. $xpoint = Vendor_Geophp::load($row['xpoint'], 'wkt');
  42. if (!($key = array_search($xpoint->asText(), $xpoints))) $key = array_push($xpoints, $xpoint->asText())-1;
  43. $xpoints2points[$key][] = $row['ID'];
  44. $points2xpoints[$row['ID']] = $key;
  45. $way = Vendor_Geophp::load($row['way'], 'wkt');
  46. if (!(in_array($xpoint->asText(), $joins))) {
  47. if (@!in_array($key, $ways2cut[array_search($way->asText(), $ways)])) {
  48. $ways2cut[array_search($way->asText(), $ways)][] = $key;
  49. } else echo ".";
  50. };
  51. }
  52. function pointsDistance($a, $b) {
  53. $line = new LineString(array($a, $b));
  54. return $line->length();
  55. }
  56. foreach ($ways2cut as $way_key => $xpoint_keys) {
  57. $distances = array();
  58. $way = Vendor_Geophp::load($ways[$way_key], 'wkt');
  59. foreach ($xpoint_keys as $xpoint_key) {
  60. $xpoint = Vendor_Geophp::load($xpoints[$xpoint_key], 'wkt');
  61. $joins[] = $xpoint->asText();
  62. $distances[$xpoint_key] = pointsDistance($way->startPoint(), $xpoint);
  63. }
  64. asort($distances);
  65. $sub_xpoints = array();
  66. foreach (array_keys($distances) as $xpoint_key) {
  67. $sub_xpoints[] = Vendor_Geophp::load($xpoints[$xpoint_key]);
  68. }
  69. $startPoint = $way->startPoint();
  70. $endPoint = $way->endPoint();
  71. $way = new LineString(array($startPoint, $sub_xpoints[0]));
  72. $ways[$way_key] = $way->asText();
  73. for ($i = 0; $i < $n = count($sub_xpoints) - 1; $i++) {
  74. $way = new LineString(array($sub_xpoints[$i], $sub_xpoints[$i+1]));
  75. $ways[] = $way->asText();
  76. }
  77. $way = new LineString(array($sub_xpoints[$n], $endPoint));
  78. $ways[] = $way->asText();
  79. }
  80. //print_r($ways);
  81. echo "ways count: ".count($ways)."\n";
  82. $db = DB::getDB();
  83. $db->query("truncate table Rozdzielcza_test_bzyk_ways");
  84. $db->query("truncate table Rozdzielcza_test_bzyk_joins");
  85. foreach ($ways as $way) {
  86. $query = "insert into Rozdzielcza_test_bzyk_ways (the_geom) values (linefromtext('".$way."'))";
  87. $db->query($query);
  88. //echo $query."\n";
  89. }
  90. foreach ($joins as $join) {
  91. $query = "insert into Rozdzielcza_test_bzyk_joins (the_geom) values (pointfromtext('".$join."'))";
  92. $db->query($query);
  93. }