[postgis-users] problems with the postgis functions ST_BuildArea(), St_Collect() and ST_Union()

Daniel Grum daniel.grum at unibw.de
Wed Dec 9 05:48:55 PST 2009


Hi,

I want to create an fog of war. I use a start-polygon and in this should 
be the area screened transparent where the user has build some buildings.

Here is the SQL-script that works if the user has a building of every 
building-type but if he only has an "haupthaus" no geom will be 
created???!!!

But at the beginning the user only has the building: haupthaus-->and for 
this starting situation a fog of war has to be created.


      UPDATE fog_of_war


      SET the_geom = (SELECT
      ST_BuildArea(St_Collect(grenze_by.the_geom,ST_Union(
                                     ST_Union(ST_Union(         
      ST_Union(ST_Union(ST_Expand(holzfaeller.the_geom, 2000)),
                                                                                   
      ST_Union(ST_Expand(steinbruch.the_geom,2000))),
                                                                                   
      ST_Union(ST_Union(ST_Expand(erzmine.the_geom, 2000)),
                                                                                   
      ST_Union(ST_Expand(kaserne.the_geom,2000)))),
                                     ST_Union(            
      ST_Union(ST_Union(ST_Expand(wohnhaus.the_geom, 2000)),
                                                                    
      ST_Union(ST_Expand(saegewerk.the_geom,2000))),
                                                                    
      ST_Union(ST_Union(ST_Expand(strassen.the_geom, 1000)),
                                                                    
      ST_Union(ST_Expand(haupthaus.the_geom,6000))))),
                                     ST_Union(            
      ST_Union(ST_Expand(wachturm.the_geom, 3000)),  
                                                                    
      ST_Union(ST_Expand(lager.the_geom,2000))))))
      FROM     public.grenze_by grenze_by,public.holzfaeller holzfaeller,
                      public.steinbruch steinbruch,public.erzmine
      erzmine,public.kaserne kaserne,                                 
      public.wohnhaus wohnhaus, public.saegewerk saegewerk,
      public.strassen strassen,                           
      public.haupthaus haupthaus, public.lager lager,public.wachturm
      wachturm
      GROUP BY grenze_by.the_geom);



I know that the functions are very convoluted, but for me there is no 
other way to union/collect the different areas of the buildings.

Please give me some tips how I can solve the problem?

Are there other PostGIS functions that can solve this problem better 
than the function st_union?

Thanks,
--daniel



More information about the postgis-users mailing list