|
|
@@ -63,29 +63,19 @@ init_sh_check();
|
|
|
|
|
|
$query = "select astext(the_geom) as multiway from Rozdzielcza_test_bzyk_drogi where numpoints(the_geom)>1";
|
|
|
$result = DB::getPDO()->fetchall($query);
|
|
|
-$joins = array();
|
|
|
+$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[] = $way->asText();
|
|
|
- if (!in_array($multiway->pointN($i)->asText(), $joins)) $joins[] = $multiway->pointN($i)->asText();
|
|
|
+ $ways_asText[] = $way->asText();
|
|
|
+ if (!in_array($multiway->pointN($i)->asText(), $joins_asText)) $joins_asText[] = $multiway->pointN($i)->asText();
|
|
|
}
|
|
|
- if (!in_array($multiway->pointN($n)->asText(), $joins)) $joins[] = $multiway->pointN($n)->asText();
|
|
|
+ if (!in_array($multiway->pointN($n)->asText(), $joins_asText)) $joins_asText[] = $multiway->pointN($n)->asText();
|
|
|
}
|
|
|
|
|
|
-//$db = DB::getDB();
|
|
|
-//$db->query("truncate table Rozdzielcza_test_bzyk_ways");
|
|
|
-//foreach ($ways as $way) {
|
|
|
-// $query = "insert into Rozdzielcza_test_bzyk_ways (the_geom) values (linefromtext('".$way->asText()."'))";
|
|
|
-// $db->query($query);
|
|
|
-//}
|
|
|
-//die();
|
|
|
-
|
|
|
-// todo relacje ways <-> joins
|
|
|
-
|
|
|
-$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";
|
|
|
+$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 limit 100";
|
|
|
$result = DB::getPDO()->fetchall($query);
|
|
|
$xpoints = array();
|
|
|
foreach ($result as $row) {
|
|
|
@@ -98,9 +88,9 @@ foreach ($result as $row) {
|
|
|
|
|
|
$way = Vendor_Geophp::load($row['way'], 'wkt');
|
|
|
|
|
|
- if (!(in_array($xpoint->asText(), $joins))) {
|
|
|
- if (@!in_array($key, $ways2cut[array_search($way->asText(), $ways)])) {
|
|
|
- $ways2cut[array_search($way->asText(), $ways)][] = $key;
|
|
|
+ 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 ".";
|
|
|
};
|
|
|
}
|
|
|
@@ -112,10 +102,13 @@ function pointsDistance($a, $b) {
|
|
|
|
|
|
foreach ($ways2cut as $way_key => $xpoint_keys) {
|
|
|
$distances = array();
|
|
|
- $way = Vendor_Geophp::load($ways[$way_key], 'wkt');
|
|
|
+ $way = Vendor_Geophp::load($ways_asText[$way_key], 'wkt');
|
|
|
foreach ($xpoint_keys as $xpoint_key) {
|
|
|
$xpoint = Vendor_Geophp::load($xpoints[$xpoint_key], 'wkt');
|
|
|
- $joins[] = $xpoint->asText();
|
|
|
+ $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);
|
|
|
@@ -128,19 +121,56 @@ foreach ($ways2cut as $way_key => $xpoint_keys) {
|
|
|
$startPoint = $way->startPoint();
|
|
|
$endPoint = $way->endPoint();
|
|
|
$way = new LineString(array($startPoint, $sub_xpoints[0]));
|
|
|
- $ways[$way_key] = $way->asText();
|
|
|
+ $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[] = $way->asText();
|
|
|
+ $ways_asText[] = $way->asText();
|
|
|
}
|
|
|
$way = new LineString(array($sub_xpoints[$n], $endPoint));
|
|
|
- $ways[] = $way->asText();
|
|
|
-
|
|
|
+ $ways_asText[] = $way->asText();
|
|
|
}
|
|
|
+echo "\n";
|
|
|
+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;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
+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++) {
|
|
|
+// $res = array();
|
|
|
+ if (isset($res)) unset($res);
|
|
|
+ findWay(2000, $i);
|
|
|
+ print_r($res);
|
|
|
+}
|
|
|
//print_r($ways);
|
|
|
|
|
|
-echo "ways count: ".count($ways)."\n";
|
|
|
+echo "ways count: ".count($ways_asText)."\n";
|
|
|
|
|
|
/*
|
|
|
$db = DB::getDB();
|
|
|
@@ -148,14 +178,14 @@ $db->query("truncate table Rozdzielcza_test_bzyk_ways");
|
|
|
$db->query("truncate table Rozdzielcza_test_bzyk_joins");
|
|
|
|
|
|
|
|
|
-foreach ($ways as $way) {
|
|
|
+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 as $join) {
|
|
|
+foreach ($joins_asText as $join) {
|
|
|
$query = "insert into Rozdzielcza_test_bzyk_joins (the_geom) values (pointfromtext('".$join."'))";
|
|
|
$db->query($query);
|
|
|
}
|
|
|
-*/
|
|
|
+*/
|