Hello again!<br><br>Doing as proposed I get an error.<br><br>wizbase=# select addgeometrycolumn('public','allhousefinal','the_geom3d',4326,'MULTIPOLYGON',3);<br>                          addgeometrycolumn<br>
---------------------------------------------------------------------<br> public.allhousefinal.the_geom3d SRID:4326 TYPE:MULTIPOLYGON DIMS:3<br>(1 row)<br><br>wizbase=# update allhousefinal set the_geom3d = st_union(the_geom, st_setsrid(st_makepoint(st_x(st_pointonsurface(the_geom)),st_y(st_pointonsurface(the_geom)), result_hig*3),st_srid(the_geom)));<br>
ERROR:  new row for relation "allhousefinal" violates check constraint "enforce_geotype_the_geom3d"<br><br>As you can see the geometry type is MULTIPOLYGON, so I think the problem is somewhere around st_makepoint. <br>
Can you please help me out?<br><br>Nikolai<br><br>Re: [postgis-users] <span class="il">Calculate</span> <span class="il">z</span>
 <span class="il">value</span> <span class="il">based</span> <span class="il">on</span> <span class="il">attribute</span><br>
        <span class="il">field</span><br>
To: PostGIS Users Discussion <<a href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a>><br>
Message-ID: <<a href="mailto:20110419175447.GG13611@keybit.net">20110419175447.GG13611@keybit.net</a>><br>
Content-Type: text/plain; charset=us-ascii<br>
<br>
<span class="il">On</span> Tue, Apr 19, 2011 at 01:45:48PM -0400, 
Stephen Woodbridge wrote:<br>
> <span class="il">On</span> 4/19/2011 8:52 AM, Gis Mage wrote:<br>
> >Hello list!<br>
> ><br>
> >I've got a table in PostGIS with the_geom <span class="il">field</span>
 with 2 dimensions.<br>
> >I wonder how can I add a <span class="il">z</span> dimension 
and fill it up with values from<br>
> ><span class="il">attribute</span> <span class="il">field</span>
 elev (its type is integer) ?<br>
><br>
> One way would be to add a new geometry column and then populate it,<br>
> maybe something like (untested):<br>
><br>
> select addgeomtrycolumn('myschema', 'mytable', 'geom3d', 4326, 
'POINT', 3);<br>
><br>
> update mytable set geom3d=setsrid(makepoint(st_x(<div id=":7">the_geom),<br>
> st_y(the_geom), z_column::double percision), 4326);<br>
<br>
A geometry type agnostic way would be to union whatever you have<br>
with a 3d point known to be contained in it. GEOS would then use<br>
the only <span class="il">Z</span> <span class="il">value</span> to fill
 up an elevation grid used to elevate<br>
the resulting geometry:<br>
<br>
 -- untested query<br>
 update mytable set geom3d = st_union(the_geom,<br>
        st_setsrid(st_makepoint(<br>
                st_x(st_pointonsurface(the_geom)),<br>
                st_y(st_pointonsurface(the_geom)),<br>
                z_column), st_srid(the_geom)));<br>
<br>
--strk;<br>
<br>
  ()   Free GIS & Flash consultant/developer<br>
  /\   <a href="http://strk.keybit.net/services.html" target="_blank">http://strk.keybit.net/services.html</a><br>
</div>