<div dir="ltr"><div>> With a large data set,</div><div><br></div><div>:-) </div><div>please give more detail:</div><div>- How large? </div><div>- and what is your real "business problem"? what type of network? </div><div><br></div><div><br></div><div>> I tried to use this <a href="http://blog.cleverelephant.ca/2010/07/network-walking-in-postgis.html" target="_blank">http://blog.cleverelephant.ca/2010/07/network-walking-in-postgis.html</a> in the PostGIS.</div><div><br></div><div>As I see this is a directed "network graph", and I will try using the pgRouting tool - for a large graph! <br></div><div><i>( "pgRouting extends the PostGIS/PostgreSQL geospatial database to provide geospatial routing <b><font color="#0000ff">and other network analysis functionality.</font></b>" )</i></div><div>The pgRouting project did not exist in 2010/07 when this blogpost was written! </div><div><br></div><div><img src="cid:ii_l2ad7e2l0" alt="image.png" width="238" height="210"><br></div><div><br></div><div>so I have adapted the example network ( from the original blogpost ) </div><div> to pgRouting and this is my sample result </div><div><br></div><div>---------- ALL "downstream path" from "all deadends" sorted by descending cost ---------</div><div></div><div><span style="font-family:monospace">+------------+-----------+---------+-------------------------------------+--------------+</span><br></div><div><font face="monospace">| route_cost | start_vid | end_vid | the_geom_text | edge_ids |<br>+------------+-----------+---------+-------------------------------------+--------------+<br>| 6.24 | 3044 | 3000 | LINESTRING(4 4,3 4,2 3,1 2,1 1,0 0) | {13,9,6,3,1} |<br>| 5.83 | 3043 | 3000 | <b><font color="#0000ff">LINESTRING(4 3,4 2,3 2,2 1,1 1,0 0) | {12,8,5,2,1} |</font></b><br>| 4.83 | 3024 | 3000 | LINESTRING(2 4,2 3,1 2,1 1,0 0) | {10,6,3,1} |<br>| 4.41 | 3014 | 3000 | LINESTRING(1 4,1 3,1 2,1 1,0 0) | {11,7,3,1} |<br>| 3.41 | 3031 | 3000 | LINESTRING(3 1,2 1,1 1,0 0) | {4,2,1} |<br>+------------+-----------+---------+-------------------------------------+--------------+</font><br></div><div><div>and the second line is same as in the blogpost ( <i>"Downstream(12)" </i>example) , </div><div>just with an extra "deadends" points ; the edges :<b><font color="#0000ff"> {12,8,5,2,1} </font></b></div><div><br></div></div><div>start_vid : starting node/vertex id ( "deadends" in this example )</div><div>end_vid : ending node/vertex id constant 3000 (0,0) </div><div>node/vertex id = 3000 + X*10+Y coordinate // ( 2,1 ) --> 3021 ; (0,0) --> 3000</div><div><br></div><div><br></div><div>> Whenever geospatial functions such as St_intersects or recursive query used,<br></div><div><br></div><div>IMHO: A good scalable data model is extremely important.</div><div>pgRouting has 2 important (separated) steps.</div><div>- creating a routing topology - route optimized database ( with "start" - and "end" node/vertex )</div><div>- fast routing/graph/"network-walking" functions - without the geometry ( using Boost Graph c++ library ) <br></div><div> ( in this example I have used <a href="https://docs.pgrouting.org/3.3/en/pgr_dijkstra.html">https://docs.pgrouting.org/3.3/en/pgr_dijkstra.html</a> )</div><div><br></div><div><br></div><div>and this is my adapted "routing" topology edge table : </div><div><br></div><div><font face="monospace" size="1">DROP TABLE IF EXISTS edge_table CASCADE;<br>CREATE TABLE edge_table (<br> id bigint primary key,<br> source bigint,<br> target bigint,<br> cost float,<br> reverse_cost float,<br> the_geom geometry<br>);<br>-- network example from<br>-- <a href="http://blog.cleverelephant.ca/2010/07/network-walking-in-postgis.html">http://blog.cleverelephant.ca/2010/07/network-walking-in-postgis.html</a><br>INSERT INTO edge_table VALUES( 1, 3011, 3000, 1, -1, 'LINESTRING(1 1, 0 0)');<br>INSERT INTO edge_table VALUES( 2, 3021, 3011, 1, -1, 'LINESTRING(2 1, 1 1)');<br>INSERT INTO edge_table VALUES( 3, 3012, 3011, 1, -1, 'LINESTRING(1 2, 1 1)');<br>INSERT INTO edge_table VALUES( 4, 3031, 3021, 1, -1, 'LINESTRING(3 1, 2 1)');<br>INSERT INTO edge_table VALUES( 5, 3032, 3021, 1, -1, 'LINESTRING(3 2, 2 1)');<br>INSERT INTO edge_table VALUES( 6, 3023, 3012, 1, -1, 'LINESTRING(2 3, 1 2)');<br>INSERT INTO edge_table VALUES( 7, 3013, 3012, 1, -1, 'LINESTRING(1 3, 1 2)');<br>INSERT INTO edge_table VALUES( 8, 3042, 3032, 1, -1, 'LINESTRING(4 2, 3 2)');<br>INSERT INTO edge_table VALUES( 9, 3034, 3023, 1, -1, 'LINESTRING(3 4, 2 3)');<br>INSERT INTO edge_table VALUES(10, 3024, 3023, 1, -1, 'LINESTRING(2 4, 2 3)');<br>INSERT INTO edge_table VALUES(11, 3014, 3013, 1, -1, 'LINESTRING(1 4, 1 3)');<br>INSERT INTO edge_table VALUES(12, 3043, 3042, 1, -1, 'LINESTRING(4 3, 4 2)');<br>INSERT INTO edge_table VALUES(13, 3044, 3034, 1, -1, 'LINESTRING(4 4, 3 4)');<br></font></div><div><br></div><div>full example code - with data&code: <a href="https://gist.github.com/ImreSamu/efda6093b67391a0edafff39d8056cb5">https://gist.github.com/ImreSamu/efda6093b67391a0edafff39d8056cb5</a> <br></div><div><br></div><div>if you are interested in more examples.. check the pgRouting tutorial</div><div>for example: <b>"Pre-processing waterways data"</b><br></div><div> <a href="https://workshop.pgrouting.org/2.7/en/un_sdg/sdg11-cities.html#pre-processing-waterways-data">https://workshop.pgrouting.org/2.7/en/un_sdg/sdg11-cities.html#pre-processing-waterways-data</a><br></div><div><br></div><div>regards,</div><div> Imre</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Shaozhong SHI <<a href="mailto:shishaozhong@gmail.com" target="_blank">shishaozhong@gmail.com</a>> ezt írta (időpont: 2022. ápr. 22., P, 1:22):<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr">Whenever geospatial functions such as St_intersects or recursive query used, the PostGIS appears to spawn away to many child queries and just obliterate the CPU. Nothing finishes.<div><br></div><div>That forced me to try out to do the some tasks on the FME server.</div><div><br></div><div>I tried to use this <a href="http://blog.cleverelephant.ca/2010/07/network-walking-in-postgis.html" target="_blank">http://blog.cleverelephant.ca/2010/07/<span>network</span>-walking-in-postgis.html</a> in the PostGIS.</div><div><br></div><div>I tried to linecombiner in FME. <a href="https://www.safe.com/transformers/line-combiner/" target="_blank">LineCombiner | FME (safe.com)</a>.</div><div><br></div><div>With a large data set, the running of processors were monitored. It was estimated the PostGIS one would take 16 days to complete.</div><div><br></div><div>But, it only took a few minute to do the same thing in FME.</div><div><br></div><div>This suggests that something is not right with the PostGIS Server.</div><div><br></div><div>Have anyone got experience with configuration and improving perfomance of PostGIS Server?</div><div><br></div><div>Regards,</div><div><br></div><div>David</div></div></div></div>
_______________________________________________<br>
postgis-users mailing list<br>
<a href="mailto:postgis-users@lists.osgeo.org" target="_blank">postgis-users@lists.osgeo.org</a><br>
<a href="https://lists.osgeo.org/mailman/listinfo/postgis-users" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/postgis-users</a><br>
</blockquote></div>