<div dir="ltr"><div>Steve,<br></div><div><br></div><div>Thank you, I will follow your Instructions. I don&#39;t expect a lot of problems with turn restrictions because maneuvers table is still empty and will be filled after routing become functional.</div>

<div>I still have some baby problems to make pgRouting functional.</div><div><br></div><div>For example what is correct range of tolerance if i use meters not degrees in assign vertex?</div><div><br></div><div>Miroslav</div>

<div><br></div><div class="gmail_quote">2011/3/23 Stephen Woodbridge <span dir="ltr">&lt;<a href="mailto:woodbri@swoodbridge.com">woodbri@swoodbridge.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Charles,<br>
<br>
Thank you for posting that. I am glad I read the whole thread because I was just about to did up my old code and dust it off to post.  There is no need for that as your implementation accurately reflects mine.<br>
<br>
Miroslav,<br>
<br>
Regarding turn restrictions, you should search the archives for this as I have been fairly vocal about the limitations. To summarize:<br>
<br>
1. turn restrictions only work with shooting star<br>
2. If you have multiple turn restrictions, I think you have to enter the related links multiple times, ie: once for each restriction<br>
3. IMHO, we need to rework the turn restrictions to make adding them more intuitive and easier<br>
4. before you try to implement a large number of them, I would verify that you can in fact add multiple turn restrictions in a trivial graph that is easy to verify if it works as expected, because it is my sense that this area has not been used to any great extent.<br>


<br>
-Steve<div><div class="h5"><br>
<br>
On 3/23/2011 7:43 AM, Charles Galpin wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Miroslav<br>
<br>
This is an implementation I have been using which I made after a<br>
discussion with Stephen on this subject. It is essentially an<br>
implementation of his ideas and works fine for me, but ymmv.<br>
<br>
Otherwise search the email archives as I believe he posted his here<br>
at some point as well.<br>
<br>
hth charles<br>
<br>
On Mar 23, 2011, at 6:44 AM, Miroslav Novta wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello list,<br>
<br>
I want to use the assign_vertices_3d() function developed by<br>
Stephen Woodbridge. I want to use it for iGO shp map format with<br>
&quot;turn restrictions&quot; too.<br>
<br>
Is there source code and documentation available on any public<br>
repository I may access?<br>
</blockquote>
<br>
-- Function: assign_vertex_id3d(character varying, double precision,<br>
character varying, character varying, character varying, character<br>
varying)<br>
<br>
-- DROP FUNCTION assign_vertex_id3d(character varying, double<br>
precision, character varying, character varying, character varying,<br>
character varying);<br>
<br>
CREATE OR REPLACE FUNCTION assign_vertex_id3d(geom_table character<br>
varying, tolerance double precision, geo_cname character varying,<br>
gid_cname character varying, source_zlevel_cname character varying,<br>
target_zlevel_cname character varying) RETURNS character varying AS<br>
$BODY$ DECLARE _r record; source_id int; target_id int; srid<br>
integer; BEGIN<br>
<br>
BEGIN DROP TABLE vertices_tmp; EXCEPTION WHEN UNDEFINED_TABLE THEN<br>
END;<br>
<br>
EXECUTE &#39;CREATE TABLE vertices_tmp (id serial)&#39;;<br>
<br>
--    FOR _r IN EXECUTE &#39;SELECT srid FROM geometry_columns WHERE<br>
f_table_name=&#39;&#39;&#39;|| quote_ident(geom_table)||&#39;&#39;&#39;;&#39; LOOP --      srid<br>
:= _r.srid; --    END LOOP;<br>
<br>
srid :=<br>
Find_SRID(&#39;public&#39;,quote_ident(geom_table),quote_ident(geo_cname));<br>
<br>
<br>
EXECUTE &#39;SELECT addGeometryColumn(&#39;&#39;vertices_tmp&#39;&#39;, &#39;&#39;the_geom&#39;&#39;,<br>
&#39;||srid||&#39;, &#39;&#39;POINT&#39;&#39;, 3)&#39;; CREATE INDEX vertices_tmp_idx ON<br>
vertices_tmp USING GIST (the_geom);<br>
<br>
FOR _r IN EXECUTE &#39;SELECT &#39; || quote_ident(gid_cname) || &#39; AS id,&#39; ||<br>
&#39; ST_MakePoint(ST_X(StartPoint(&#39;|| quote_ident(geo_cname) ||&#39;)),<br>
ST_Y(StartPoint(&#39;|| quote_ident(geo_cname) ||&#39;)), &#39;||<br>
quote_ident(source_zlevel_cname) ||&#39;) AS source,&#39; || &#39;<br>
ST_MakePoint(ST_X(EndPoint(&#39;|| quote_ident(geo_cname) ||&#39;)),<br>
ST_Y(EndPoint(&#39;|| quote_ident(geo_cname) ||&#39;)), &#39;||<br>
quote_ident(target_zlevel_cname) ||&#39;) AS target&#39; || &#39; FROM &#39; ||<br>
quote_ident(geom_table) LOOP<br>
<br>
source_id := point_to_id3d(setsrid(_r.source, srid), tolerance);<br>
target_id := point_to_id3d(setsrid(_r.target, srid), tolerance);<br>
<br>
EXECUTE &#39;update &#39; || quote_ident(geom_table) || &#39; SET source = &#39; ||<br>
source_id || &#39;, target = &#39; || target_id || &#39; WHERE &#39; ||<br>
quote_ident(gid_cname) || &#39; =  &#39; || _<a href="http://r.id" target="_blank">r.id</a>; END LOOP;<br>
<br>
RETURN &#39;OK&#39;;<br>
<br>
END; $BODY$ LANGUAGE &#39;plpgsql&#39; VOLATILE STRICT COST 100; ALTER<br>
FUNCTION assign_vertex_id3d(character varying, double precision,<br>
character varying, character varying, character varying, character<br>
varying) OWNER TO postgres;<br>
<br>
<br>
-- Function: point_to_id3d(geometry, double precision)<br>
<br>
-- DROP FUNCTION point_to_id3d(geometry, double precision);<br>
<br>
CREATE OR REPLACE FUNCTION point_to_id3d(p geometry, tolerance double<br>
precision) RETURNS bigint AS $BODY$<br>
<br>
DECLARE _r record; _id bigint; _srid integer;<br>
<br>
BEGIN<br>
<br>
_srid := Find_SRID(&#39;public&#39;,&#39;vertices_tmp&#39;,&#39;the_geom&#39;);<br>
<br>
SELECT ST_Length3D(ST_MakeLine(the_geom,p)) AS d, id<br>
<br>
INTO _r FROM vertices_tmp WHERE<br>
<br>
the_geom&amp;&amp;  Expand(p, tolerance) AND<br>
ST_Length3D(ST_MakeLine(the_geom,p))&lt;  tolerance<br>
<br>
ORDER BY d LIMIT 1;<br>
<br>
IF FOUND THEN<br>
<br>
_id:= _<a href="http://r.id" target="_blank">r.id</a>;<br>
<br>
ELSE<br>
<br>
INSERT INTO vertices_tmp(the_geom) VALUES (SetSRID(p,_srid));<br>
_id:=lastval();<br>
<br>
END IF;<br>
<br>
RETURN _id;<br>
<br>
END; $BODY$ LANGUAGE &#39;plpgsql&#39; VOLATILE STRICT COST 100; ALTER<br>
FUNCTION point_to_id3d(geometry, double precision) OWNER TO<br>
postgres;<br>
<br>
<br>
_______________________________________________ Pgrouting-users<br>
mailing list <a href="mailto:Pgrouting-users@lists.osgeo.org" target="_blank">Pgrouting-users@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/pgrouting-users" target="_blank">http://lists.osgeo.org/mailman/listinfo/pgrouting-users</a><br>
</blockquote>
<br>
_______________________________________________<br>
Pgrouting-users mailing list<br>
<a href="mailto:Pgrouting-users@lists.osgeo.org" target="_blank">Pgrouting-users@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/pgrouting-users" target="_blank">http://lists.osgeo.org/mailman/listinfo/pgrouting-users</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Miroslav Novta<br>
</div>