Hallo Apostolis and welcome

If you look at your query the result you get is the only possible.

When you do:
.....   FROM table1 AS a, table2 AS b ;
without any where-clause you will get all possible combinations.

This is the great thing when handling spatial data with sql, that you have 
complete freedom and there is no code in the background making any decisions 
for you. 

So, what you have to do is find out what you really want to do. How do you want 
your polygons to be unioned. If you for example want to union all polygons that 
intersect you should do:

select st_union(a.the_geom, b.the_geom) from table1 a, table2 b where 
st_intersects(a.the_geom, b.the_geom)

or the same thing like:

select st_union(a.the_geom, b.the_geom) from table1 a inner join table2 b on 
st_intersects(a.the_geom, b.the_geom)

>From the result you maybe want to union your polygons so you only get one big 
>polygon per row in table 1, then you could instead do for example:

select st_union(st_union(a.the_geom, b.the_geom)) from table1 a inner join 
table2 b on st_intersects(a.the_geom, b.the_geom) group by id_in_table1

then you use st_union vertically outside your original union.

The thing is to get to know how the rows from the both tables are mixed in 
different situations and get to know how the spatial functions can handle that. 
Many of the functions in PostGIS can work both in the form 
ST_function(a.the_geom, b.the_geom) and as aggregate functions like
st_function(the_geom) .... group by some_field

About populating the geometry_columns table that is not done automatically. 
Often you don't need your new table represented like if you are just going to 
use your table for further calculations in PostGIS. Then it would be just 
annoying overhead.

But when you need it, for example if you are going to show your data in 
geoserver, then you can easily populate the geometry_columns table with the 
function Populate_Geometry_Columns:  
http://postgis.org/documentation/manual-svn/Populate_Geometry_Columns.html

Once you see the pattern, how to combine sql with spatial functionality, you 
will find it quite annoying waiting for "tools" in other softwares to execute 
:-)


Regards
Nicklas





2011-01-03 skrev ÁÐÏÓÔÏËÏÓ ËÅËÅÍÔÆÇÓ :

I try to execute the basic functionalities of GIS (union, sym_difference, 
buffer, intersect...) with PostGIS 1.5, but i encounter some problems.
>I create a new table to store results of overlay analysis, and i observe that 
>every entity of new thematic layer is triplicate!!
>Specifically, i want to union two layers which include 15 and 3 entities 
>respectively, and i use the following command:
>   CREATE TABLE tablename  AS
>   SELECT ST_UNION (a.the_geom, b.the_geom)
>   FROM table1 AS a, table2 AS b ;
>and i note that the above SQL query relate each entity from one layer with 
>each entity from other, like a cross join!!!
>What happened??
>Also, i find that the new thematic layer isn't add to the table 
>"geometry_columns"!!!Why??
>
>Thanks,
>Apostolis
_______________________________________________
postgis-users mailing list
postgis-users@postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users

Reply via email to