<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Włściwa sciezka routingu, pgrouting, segmentacja geometri]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=191&amp;type=atom"/>
	<updated>2009-04-24T13:30:09Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=191</id>
		<entry>
			<title type="html"><![CDATA[Włściwa sciezka routingu, pgrouting, segmentacja geometri]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=759#p759"/>
			<content type="html"><![CDATA[Witam wszystkich bardzo serdecznie !

Nie wiedziałem nawet żę jest polskie forum PostgreSQL, super sprawa ! Mam problem z routingiem jaki wykonałem z tutorialu z strony:


[url]http://pgrouting.postlbs.org/wiki/WorkshopFOSS4G2007[/url]

Kożystam z Geoservera, Openlayers, postgresql, pgrouting.

Wyniki działania routingu są widoczne na stronie poniżej.

[url]http://img509.imageshack.us/img509/9250/routing.jpg[/url]

Jak widzicie wszyustko śmiga nawet bezproblemowo. Choć nie jest wszystko wykonane tak jakbym chciał. Problemy są z punktem startowym i końcowym. Ponieważ nie wystepują od zaznaczenia tylko od poczatku geometrii w bazie danych.

Musze jakims sposobem dokonać segmentacji geometrii i uwzględnić ją w zapytaniach do bazy. Sporo czytałem w internecie i znalazłem te 2 funkcje

[i]line_locate_point();
line_substring();[/i]

Już myślałem ze moge je jakoś wykożystać lecz niestey sa one tylko i wyłączbie do geopmetri liniowych (linestring) a ja mam multilinestring jak widzicie na screenie poniżej.

[url]http://img22.imageshack.us/img22/2484/dbase900913.jpg[/url]

Zaczalem szukać dalej i znalazłem funkcje 'line_interpolate_point'. Próbowałem ją użyć ale zwracało tylko puste wiersze
[i]
SELECT line_interpolate_point(GeometryN(the_geom,900913),
line_locate_point(GeometryN(the_geom,900913),PointFromText('POINT(1725140.73233 6788749.88889)'))) FROM zielona_gora_routing  [/i]

Nie wiem co teraz zrobić. Jestm tak blisko rozwiazania ale nie umiem tego wykonać. Czy możę mi ktoś pomoc. Oto moja funkcja znajdująca najbliższa krawędz, przypuszczam że musze ja zaktualizować w jakiś sposób


[i]$start = split(' ',$_REQUEST["startpoint"]);
$startPoint = array($start[0], $start[1]);[/i]

[i]  // Retrieve end point
$end = split(' ',$_REQUEST["finalpoint"]);
$endPoint = array($end[0], $end[1]);[/i]

[i]$startEdge = findNearestEdge($startPoint);
$endEdge   = findNearestEdge($endPoint);[/i]


[i]//FUNCTION!!!!!!
unction findNearestEdge($lonlat) {
  	    // Connect to database
    $con = pg_connect("dbname=".PG_DB." host=".PG_HOST." user=".PG_USER);
	$lonlat1=$lonlat[0]-200;
	$lonlat2=$lonlat[1]-200;
	$lonlat3=$lonlat[0]+200;
	$lonlat4=$lonlat[1]+200;[/i]

[i]    $sql = "SELECT gid, source, target, the_geom,
			 distance(the_geom, GeometryFromText(
                  'POINT(".$lonlat[0]." ".$lonlat[1].")', 900913)) AS dist
            FROM ".TABLE."
            WHERE the_geom && setsrid(
                  'BOX3D(".$lonlat1."
                         ".$lonlat2.",
                         ".$lonlat3."
                         ".$lonlat4.")'::box3d, 900913)
            ORDER BY dist LIMIT 1";[/i]

[i]    $query = pg_query($con,$sql);[/i]

[i]    $edge['gid']      = pg_fetch_result($query, 0, 0);
    $edge['source']   = pg_fetch_result($query, 0, 1);
    $edge['target']   = pg_fetch_result($query, 0, 2);
    $edge['the_geom'] = pg_fetch_result($query, 0, 3);[/i]

[i]    // Close database connection
    pg_close($con);[/i]

[i]    return $edge;
  }
[/i]


Jest to funkcja znajdująca się oryginalnie na stronie z tutorialem do którego link przedstawiłem wcześniej ([url]http://pgrouting.postlbs.org/wiki/Workshop-ClosestEdge[/url]). Proszę bardzo o jakąkolwiek pomoc. Z góry dziękuje

Pozdrawiam
Paweł]]></content>
			<author>
				<name><![CDATA[paweluz]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=890</uri>
			</author>
			<updated>2009-04-24T13:30:09Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=759#p759</id>
		</entry>
</feed>
