[postgis-users] st_union

Martin Davis mbdavis at refractions.net
Tue Apr 13 14:35:43 PDT 2010


Snap-rounding might help somewhat, to deal with very small slivers.  But 
(as usual in data cleaning issues) its usefulness is going to be 
dependent on the nature of the errors in the dataset.  In my experience, 
snap-rounding is more of a technique for improving the robustness of 
overlay computation, rather than a general technique for gap/sliver 
elimination.  If the only thing wrong with the data is due to some minor 
jitter in the coordinate precision, then SR can work.  But often 
datasets have gaps/slivers which are relatively large, to the point 
where you would have to snap to a very coarse grid to get rid of them 
all.  This would lose too much precision in the coordinates. At this 
point more specific algorithms are required to remove slivers.

But SR would certainly be worth having in the toolbox, for use when 
necessary.

One slight issue is that SR has to be performed globally on a dataset, 
not on pairwise geometries.  So it could be built in to the ST_union 
aggregate, but I'm not sure how you'd provide it in a more granular way.

strk wrote:
> I was having similar issues with unioning country boundaries
> from the gadm dataset [1], and was thinking how would snaprounding
> deal with the issue (ie: what brings in, what dangers introduces).
> What do you think Martin ?
> Maybe it'd be worth exposing the snapping version more, possibly
> taking a tolerance explicitly.
>
> [1] http://www.gadm.org/
>
> --strk;
>
>   ()   Free GIS & Flash consultant/developer
>   /\   http://strk.keybit.net/services.html
>
> On Tue, Apr 13, 2010 at 09:05:07AM -0700, Martin Davis wrote:
>   
>> PostGIS (actually GEOS, which mirrors JTS) doesn't use a tolerance 
>> during geometry union operations.  It's possible that Arc does, which is 
>> why you're seeing a difference.
>>
>> What this indicates is that your data is not 100% cleanly noded.  You 
>> could try snapping all your data to a small-size grid - that can 
>> sometimes fix problems of this sort.  Although it may also introduce 
>> gaps...
>>
>> Lee wrote:
>>     
>>> Hi all, First post but have been lurking for a long time.
>>>
>>> In the process of migrating some geoprocessing procedures over to our open 
>>> source stack, I came across a difference in results from postgis' st_union 
>>> vs. arcgis' dissolve.  From what I can tell these functions should be 
>>> synonymous in theory, despite their naming. (?)
>>>
>>> It seems like st_union is not doing a "clean" union, some slivers are 
>>> remaining.  
>>> Original parcel fabric: http://quimby.ca/original.jpg
>>> Dissolved by ArcGIS: http://quimby.ca/dissolved_by_arcgis.jpg
>>> st_union by postgis: http://quimby.ca/dissolved_by_postgis.jpg
>>>
>>> The input to both functions was the same table in postgis. I am defining 
>>> the geometry simply as  select 
>>> st_union(current_assessment_parcel.the_geom) AS the_geom
>>>
>>> Postgresql 8.4.1
>>> Postgis 1.4
>>>
>>> Is this simply a difference in tolerance? or am I seeing something else 
>>> here.
>>>
>>> Thanks,
>>> Lee.
>>>       
>
>   

-- 
Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022




More information about the postgis-users mailing list