<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Message</TITLE>
<META content="text/html; charset=us-ascii" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 6.00.6001.17184"></HEAD>
<BODY>
<DIV><SPAN class=031413715-02062008><FONT color=#0000ff size=2 face=Arial>No, 
just translate/reposition the child entity based on the width/height of the 
parent entity. However, in thinking about this, it should be 1 * 
width/height/depth plus a predefined constant for the spacing between the 
entities.</FONT></SPAN></DIV>
<BLOCKQUOTE style="MARGIN-RIGHT: 0px" dir=ltr>
  <DIV></DIV>
  <DIV dir=ltr lang=en-us class=OutlookMessageHeader align=left><FONT size=2 
  face=Tahoma>-----Original Message-----<BR><B>From:</B> 
  postgis-users-bounces@postgis.refractions.net 
  [mailto:postgis-users-bounces@postgis.refractions.net] <B>On Behalf Of 
  </B>Burgholzer,Robert<BR><B>Sent:</B> Monday, June 02, 2008 8:04 
  AM<BR><B>To:</B> PostGIS Users Discussion; PostGIS Users 
  Discussion<BR><B>Subject:</B> RE: [postgis-users] Creating a Flow Diagram with 
  PostGIS<BR><BR></FONT></DIV><!-- Converted from text/plain format -->
  <P><FONT size=2>Stanley,<BR>Do I read this right that you have a facility in 
  here to scale the child object based on some factor 
  (ratio_x)?<BR><BR>r.b.<BR><BR><BR>-----Original 
  Message-----<BR>From:   
  postgis-users-bounces@postgis.refractions.net on behalf of Sufficool, 
  Stanley<BR>Sent:   Mon 6/2/2008 10:53 
  AM<BR>To:     PostGIS Users 
  Discussion<BR>Cc:    <BR>Subject:        
  RE: [postgis-users] Creating a Flow Diagram with PostGIS<BR><BR>Here's my 
  possibly buggy 2 cents:<BR><BR>This stores all geometry as geometry, not x,y 
  attribute values. The<BR>intent is to allow moving entities and have the 
  database handle the<BR>updates to related 
  entities.<BR><BR>=========================================<BR><BR>create table 
  entity(<BR>        entity_id serial not 
  null primary key,<BR>        the_geom 
  geometry not null,<BR>        is_calculated 
  bit not null<BR>);<BR><BR>-- Your Entity to Entity relationships with offset 
  multipliers for<BR>-- placement relative to the parent entity extents and 
  position which<BR>-- is also relative to it's parent level entity 
  position<BR>create table entity_relation 
  (<BR>        parent_entity_id int not 
  null,<BR>        child_entity_id int not 
  null,<BR>        ratio_x float4 not 
  null,<BR>        ratio_y float4 not 
  null,<BR>        ratio_z float4 not 
  null,<BR>        primary 
  key(parent_entity_id,child_entity_id 
  )<BR>);<BR><BR><BR>/*<BR>        I havent 
  done triggers, but this should be a trigger function on<BR>UPDATE of parent 
  geomentry<BR>       <BR>        
  PURPOSE: placement of child entities in relation to the 
  parent<BR>entity,<BR>        
          Watch for Recursion!!  
  1-->2-->3-->1<BR>        
          Step 1: Center child on 
  parent<BR>        
          Step 2: Offset by er.offset_N of 
  parent extents<BR>        
          Step 3: Mark child as updated to 
  prevent recursion<BR>*/<BR>update c<BR>SET c.the_geom =<BR>select 
  st_translate(<BR>        -- Center the 
  child on parent geometry<BR>        
  st_translate(<BR>        
          
  c.the_geom,<BR>        
          st_x(st_centroid(p.the_geom)) 
  -<BR>st_x(st_centroid(c.the_geom)), <BR>        
          st_y(st_centroid(p.the_geom)) 
  -<BR>st_y(st_centroid(c.the_geom)),<BR>        
          st_z(st_centroid(p.the_geom)) 
  -<BR>st_z(st_centroid(c.the_geom))   
         <BR>        
  },<BR>        --Translate to the left, 
  right, top, bottom, front, back of the<BR>parent geometry by the ratio 
  (x,y,x)  stored in entity_relation of the<BR>parent entity 
  width/height<BR>        ( 
  st_xmax(p.the_geom) - st_xmin(p.the_geom) ) * 
  er.ratio_x,<BR>        ( 
  st_ymax(p.the_geom) - st_ymin(p.the_geom) ) * 
  er.ratio_y,<BR>        ( 
  st_zmax(p.the_geom) - st_zmin(p.the_geom) ) * 
  er.ratio_z<BR>),<BR>is_calculated = 1<BR>from entity as c<BR>join 
  entity_relation as er<BR>        on 
  c.entity_id = er.child_entity_id<BR>join entity as 
  p<BR>        on er.parent_entity_id = 
  p.entity_id<BR>WHERE is_calculated=0   --To prevent recursive 
  updates<BR>AND p.entity_id = OLD.entity_id --Update from the OLD trigger 
  record<BR><BR><BR><BR><BR><BR><BR>-----Original Message-----<BR>From: 
  postgis-users-bounces@postgis.refractions.net<BR>[<A 
  href="mailto:postgis-users-bounces@postgis.refractions.net">mailto:postgis-users-bounces@postgis.refractions.net</A>] 
  On Behalf Of Bob<BR>Pawley<BR>Sent: Sunday, June 01, 2008 2:17 PM<BR>To: 
  PostGIS Users Discussion<BR>Subject: Re: [postgis-users] Creating a Flow 
  Diagram with PostGIS<BR><BR><BR>Hi Robert<BR><BR>I managed to get the function 
  working - in part.<BR><BR>      UPDATE 
  graphics.process_dgm<BR>        Set 
  the_geom = translate(the_geom, (x1 - st_x(the_geom)), (y1 
  -<BR>st_y(the_geom)))<BR> where graphics.process_dgm.id = 
  '178'<BR> and graphics.process_dgm.id = '181';<BR><BR>This will move a 
  point from one location to another depending on what I<BR>insert into the x 
  and y column.<BR><BR>But when I attempt to move the geometry that I want moved 
  I get a<BR>message<BR>"Argument to X() must be a point".<BR><BR>What am I 
  doing wrong??<BR><BR>Bob<BR><BR><BR><BR><BR>----- Original Message 
  -----<BR>From: "Burgholzer,Robert" 
  <rwburgholzer@deq.virginia.gov><BR>To: "PostGIS Users Discussion" 
  <postgis-users@postgis.refractions.net><BR>Sent: Friday, May 30, 2008 
  11:54 AM<BR>Subject: [postgis-users] Creating a Flow Diagram with 
  PostGIS<BR><BR><BR>Bob,<BR>I am taking this online, since it is relevant to 
  PostGIS, and I want to<BR>make<BR>sure that others review my comments for 
  veracity<BR><BR>Original Question:<BR>> At the moment I am importing dxf 
  files, representing process and<BR>> devices, into Postgis.<BR>><BR>> 
  Say I want to make two processes A & B.<BR>><BR>>  I import the 
  DXF graphic representing A and B into Postgis.<BR>><BR>> I want B to be 
  the first process and the output of B goes to A which<BR>> is situated to 
  the right of or below B.<BR>><BR>> Using ST_Translate I need to know the 
  distance in both x and y from<BR>> the library to where I want to place the 
  images and plug thos values<BR>> into the Transform function. Perhaps there 
  is a method of building a<BR>> function to do this?<BR>><BR>> 
  Bob<BR>><BR>><BR><BR>My response:<BR>You do not want to use transform 
  for the location.  It has nothing to do<BR><BR>with the location, only to 
  the projection, i.e., spatial coordinate<BR>system.<BR>You DO want translate 
  for location, however.  Transform might be useful<BR>if<BR>your objects 
  are not imported from a standard library that you generate,<BR>or<BR>are not 
  in the projection that you  wish to use for your interface.<BR><BR>CASE 1 
  (Objects are in same projection as your "Workspace"):<BR>In this case, we 
  don't really have to "know" where the starting location<BR>is,<BR>since we 
  have functions that can derive this.  Also, since our shapes<BR>are 
  in<BR>the same projection as the workspace, we only need the 
  translate<BR>function.<BR>For this example, we are storing our components in a 
  table called<BR>"widget_table", and the geometry column is "the_geom".  
  Let's assume<BR>that<BR>your original shape location coordinates are (x0, y0, 
  z0), which can be<BR>obtained from the geometry column by using the function 
  st_x, st_y, and<BR>st_z, and you want to move them to be located at 
  (x1,y1,z1).  For this,<BR>the<BR>following translate call would 
  work:<BR><BR>UPDATE widget_table SET the_geom = translate(the_geom, (x1 
  -<BR>st_x(the_geom)), (y1 - st_y(the_geom)), (z1 - st_z(the_geom))) 
  ;<BR><BR>CASE 2 (you are importing user defined shapes, or shapes in 
  disparate<BR>projections):<BR>In this case you WOULD need transform(), to take 
  them from whatever<BR>their<BR>source projection is, into whatever their base 
  projection is, as follows<BR><BR>(assuming that the workspace coordinate 
  system is decimal degrees):<BR><BR>UPDATE widget_table SET the_geom = 
  transform(the_geom, 4326);<BR><BR>Then, you would need to relocate them to 
  some other point by using the<BR>function above.  That function could be 
  encapsulated into its own PG<BR>function of course, something like 
  relocate(x1,y1,z1) which would hide<BR>all<BR>of the calls to st_x,y and 
  z.<BR><BR><BR>The catch of course, is that it is essential that we KNOW the 
  projection<BR>of<BR>our shapes before importing them.  That is actually 
  the real sticky part<BR><BR>here, not the movement of 
  them.<BR><BR>HTH,<BR>r.b.<BR><BR><BR>Quoting Bob Pawley 
  <rjpawley@shaw.ca>:<BR><BR>> 
  Robert<BR>><BR><BR><BR><BR><BR>------------------------------------------------------------------------<BR>--------<BR><BR><BR>> 
  _______________________________________________<BR>> postgis-users mailing 
  list postgis-users@postgis.refractions.net<BR>> <A 
  href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</A><BR>><BR><BR>_______________________________________________<BR>postgis-users 
  mailing list postgis-users@postgis.refractions.net<BR><A 
  href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</A><BR>_______________________________________________<BR>postgis-users 
  mailing list<BR>postgis-users@postgis.refractions.net<BR><A 
  href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</A><BR><BR><BR></FONT></P></BLOCKQUOTE></BODY></HTML>