[pgrouting-users] alphashape with less than 3 points crashing server process

McDonaldR McDonaldR at angus.gov.uk
Fri Apr 15 07:03:55 PDT 2016


Hello

I've got some SQL wrapped up in a function to calculate alphashapes for multiple input points.  The input points have all been assigned a "nearest_node" id and this is used in the SQL.  The problem is where I have one point at the end of a long road and when I try to calculate an alphashape with a value that does not return 3 points to make a polygon it crashes the server process.  In PgAdmin I see the log has the following:

2016-04-15 14:40:15 BST  LOG  server process (PID 5044) was terminated by exception 0xC0000005
2016-04-15 14:40:15 BST  LOG  terminating any other active server processes
2016-04-15 14:40:15 BST  WARNING  terminating connection because of crash of another server process

So, I guess my question is, is there any way I can get my function to fail gracefully when I hit this exception and stop my connection terminating and the process crashing?

Postgres 9.2.15 64bit
PostGIS 2.2.1
pgRouting 2.1.0
Windows Server 2008 r2

My SQL (could probably be done better)

CREATE TEMPORARY TABLE node AS
              SELECT id,
                   ST_X(geometry) AS x,
                   ST_Y(geometry) AS y,
                   geometry
                   FROM (
                       SELECT source AS id,
                             ST_Startpoint(geometry) AS geometry
                             FROM itn_network
                       UNION
                       SELECT target AS id,
                             ST_Startpoint(geometry) AS geometry
                             FROM itn_network
                   ) AS node;

SELECT ST_SetSRID(ST_MakePolygon(ST_AddPoint(foo.openline, ST_StartPoint(foo.openline))),27700) AS geometry
          FROM (
            SELECT ST_Makeline(points ORDER BY id) AS openline
            FROM (
              SELECT row_number() over() AS id, ST_MakePoint(x, y) AS points
              FROM pgr_alphashape('
                   SELECT *
                   FROM node
                       JOIN
                       (SELECT * FROM pgr_drivingDistance(''
                             SELECT gid AS id,
                             source::int4 AS source,
                             target::int4 AS target,
                             cost_time::float8 AS cost,
                             rcost_time::float8 AS reverse_cost
                             FROM itn_network'',
                             35819, --for this node
                             700, --this fails when I set it to 600
                             true,
                             true)) AS dd ON node.id = dd.id1'::text)
            ) AS a
          ) AS foo;

Thanks

Ross


Ross McDonald | GIS Data Coordinator | Resources Department, IT Division | Angus Council, Angus House, Orchardbank Business Park, Forfar, DD8 1AT
T: 01307 476419 | F: 01307 476401 | E: mcdonaldr at angus.gov.uk<mailto:mcdonaldr at angus.gov.uk>



This message is strictly confidential. If you have received this in error, please inform the sender and remove it from your system. If received in error you may not copy, print, forward or use it or any attachment in any way. This message is not capable of creating a legal contract or a binding representation and does not represent the views of Angus Council. Emails may be monitored for security and network management reasons. Messages containing inappropriate content may be intercepted. Angus Council does not accept any liability for any harm that may be caused to the recipient system or data on it by this message or any attachment.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/pgrouting-users/attachments/20160415/39f4545b/attachment.html>


More information about the Pgrouting-users mailing list