[postgis-users] 3d buffer

Sufficool, Stanley ssufficool at rov.sbcounty.gov
Fri Aug 15 09:36:37 PDT 2008


Correction:
 
      /* Buffer the point */
        px := px + (dx * buffer);
        py := py + (dy * buffer);
        pz := pz + (dz * buffer); 
 
        retWKT := retWKT || ' ( ' || px::text || ' ' || py::text || ' '
|| pz::text || ' )';
        

-----Original Message-----
From: postgis-users-bounces at postgis.refractions.net
[mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of
Sufficool, Stanley
Sent: Friday, August 15, 2008 8:34 AM
To: PostGIS Users Discussion
Subject: RE: [postgis-users] 3d buffer



	Step 1: Get center of cube by averaging all points (x,y,z) on
the cube
	Step 2: Get the delta of each points (x,y,z) from the center
point and divide by distance from the center and then add/subtract that
delta from the points (x,y,z) multiplied by the buffer number
	 
	This would expand the CUBE from the center by the given amount.
	 
	Someone correct this if needed since I have absolutely no
practical application or data to drive this code.
	 
	VERY PSEUDO CODE (since there is no cube geometry type?):
	 
	CREATE FUNCTION st_buffercube(theCube geometry, buffer double
precision) 
	returns geometry AS $BODY$
	 
	declare i int;
	 
	/* Centroid of cube */
	declare cx double precision; 
	declare cy double precision; 
	declare cz double precision;
	 
	/* Cube point */
	declare px double precision; 
	declare py double precision; 
	declare pz double precision;
	 
	/* Cube point delta */
	declare segLength double precision;
	declare dx double precision; 
	declare dy double precision; 
	declare dz double precision;
	 
	/* Output ?CUBE? */
	declare retWKT character varying(4096);
	 
	BEGIN
	 
	    cx := 0;
	    cy := 0;
	    cz := 0;
	    for i IN 1..st_npoints(theCube) LOOP
	        cx := cx + st_x(pointn(theCube,i));
	        cy := cy + st_y(pointn(theCube,i));
	        cz := cz + st_z(pointn(theCube,i));
	    END LOOP;
	 
	    /* Compute centroid of cube */
	    cx := cx / st_npoints(theCube);
	    cy := cy / st_npoints(theCube);
	    cz := cz / st_npoints(theCube);
	 
	    /* WHAT WOULD THE APPROPRIATE STORAGE TYPE FOR THIS BE ???
*/
	    retWKT := 'POLYGON( ';
	    for i in 1..st_npoints(theCube) loop
	        px := st_x(pointn(theCube,i)); 
	        py := st_y(pointn(theCube,i)); 
	        pz := st_z(pointn(theCube,i));
	 
	        dx := st_x(pointn(theCube,i)) - cx; 
	        dy := st_y(pointn(theCube,i)) - cy; 
	        dz := st_z(pointn(theCube,i)) - cz;
	        /* Divide by distance from center point */
	        segLength := sqrt( (cx -px) ^ 2  + (cy - py) ^ 2 + (cz -
pz) ^ 2);
	        dx := dx / segLength;
	        dy := dy / segLength;
	        dz := dz /segLength;
	        
	        /* Buffer the point */
	        px := px + dx;
	        py := py + dy;
	        pz := pz + dz;
	 
	        retWKT := ' ( ' || px::text || ' ' || py::text || ' ' ||
pz::text || ' )';
	        
	    end loop;
	 
	    retWKT := ' )';
	    
	    return setsrid(retWKT::geometry, st_srid(theCube));
	END;
	$BODY$
	  LANGUAGE 'plpgsql'
	 

		-----Original Message-----
		From: postgis-users-bounces at postgis.refractions.net
[mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of
eehab hamzeh
		Sent: Friday, August 15, 2008 1:51 AM
		To: postgis-users at postgis.refractions.net
		Subject: [postgis-users] 3d buffer
		
		
		What i mean by 3d buffer are i have a room which is like
a box and i need to find all the areas that this room Box that will
intersect if the room are extended and get larger....
		
		
		
		buffer FROM (SELECT gid,buffer(r.the_geom,10) as buffer
FROM room r WHERE r.roomname='guest room') AS foo USING UNIQUE gid USING
SRID=31467"
		
		i need such query to take the 3d dimension in
consideration and make it not just only in 2d 
		



		Thanks
		
		ihab
		
		
		
		
________________________________

		Get news, entertainment and everything you care about at
Live.com. Check it out! <http://www.live.com/getstarted.aspx>  

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20080815/ce9b4845/attachment.html>


More information about the postgis-users mailing list