[postgis-users] Erase from PostGIS line table using polygon table (like Erase in ArcGIS)

mdomnita mdomnita at gmail.com
Thu Feb 20 05:49:37 PST 2014


I have two sets of data: a line table (roads) and a polygon table
(localities)

Both sets are very large and contain thousands of geometries.

I need all portions of geometries from the line table that lay outside the
polygon table (in my case all the parts of roads outside localities);

I tried something like:

create table roadsdifference as (select
 r.osm_id as osm_id, ST_Difference(r.geom,c.geom) geom
 from
roads r join localities c on ST_Crosses(c.geom,r.geom));


And it works if each road joins only one locality. In case I have roads
crossing two or more localities I get partly overlapping multigeometries,
one for each locality (I know this is how a join works).

I also tried:

create table localitiesunion as select st_union(geom) geom from localities;

create table roadsdifference as (select
 r.osm_id as osm_id, ST_Difference(r.geom,c.geom) geom
 from
roads r join localitiesunion c on ST_Crosses(c.geom,r.geom));


But this option either takes forever or throws a topology error and crashes.

As I said, I have about 50k locality polygons and 5 mil. road linestrings.

Using the Erase function in ArcGIS does the job ok but I have to convert the
tables to shapefiles, process them, convert them back etc. and this is a lot
of time-consuming manual work. I would like an automated solution that I can
include in a script (or an .sql file) and that does not assume buying an
expensive software.

Any other ways or ideas on how to do this?




--
View this message in context: http://postgis.17.x6.nabble.com/Erase-from-PostGIS-line-table-using-polygon-table-like-Erase-in-ArcGIS-tp5005691.html
Sent from the PostGIS - User mailing list archive at Nabble.com.


More information about the postgis-users mailing list