[postgis-users] Re: Which postGIS functions to use?

Guy Thomas gt at fks.be
Sun Feb 15 23:31:29 PST 2009


Sorry if I wasn't clear enough. I know the length of the overlapping 
piece of the quay with the network component. I want to calculate the 
end coordinate (a point) of the quay on the network component.

quay
x--------------------y

       network component
       a--------------k-----------------b

The overlap is, let's say, 200m. I want to calculate point k, its 
coordinates, on the network component starting from point a, k being 
200m away from a.

postgis-users-request at postgis.refractions.net wrote:
> Send postgis-users mailing list submissions to
> 	postgis-users at postgis.refractions.net
> 
> To subscribe or unsubscribe via the World Wide Web, visit
> 	http://postgis.refractions.net/mailman/listinfo/postgis-users
> or, via email, send a message with subject or body 'help' to
> 	postgis-users-request at postgis.refractions.net
> 
> You can reach the person managing the list at
> 	postgis-users-owner at postgis.refractions.net
> 
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of postgis-users digest..."
> 
> 
> Today's Topics:
> 
>    1. Why Multiply? Why not? ( Mohamad Solikin (via Multiply) )
>    2. RE: Which postGIS functions to use? (Paragon Corporation)
>    3. Re: Which postGIS functions to use? (Stephen Woodbridge)
>    4. PostGIS functions inside triggers (Eduin Yezid Carrillo Vega)
> 
> 
> ----------------------------------------------------------------------
> 
> Message: 1
> Date: Sun, 15 Feb 2009 1:43:34 -0500
> From: " Mohamad Solikin (via Multiply) " <multiply at multiply.com>
> Subject: [postgis-users] Why Multiply? Why not?
> To: postgis-users at postgis.refractions.net
> Message-ID: <200902150643.n1F6hqCr021656 at px526-fe.Multiply.com>
> Content-Type: text/plain; charset=utf-8
> 
> 
> Check out my Multiply site
> 
> I set up a Multiply site with my pictures, videos and blog and I want 
> to add you as my friend so you can see it. First, you need to join 
> Multiply! Once you join, you can also create your own site and share 
> anything you want, with anyone you want.
> 
> Here's the link:
> http://multiply.com/si/5iVP2eBXx98C1NJENpUzPg
> 
> Thanks,
> Mohamad
> 
> 
> 
> 
> 
> 
> 
> Stop e-mails, view our privacy policy, or report abuse: 
> http://multiply.com/bl/5iVP2eBXx98C1NJENpUzPg
> We haven't added your email address to any lists, nor will we share it
> with anyone at any time.
> Copyright 2009 Multiply Inc.
> 6001 Park of Commerce, Boca Raton, FL 33487, USA
> 
> 
> 
> ------------------------------
> 
> Message: 2
> Date: Sun, 15 Feb 2009 05:39:28 -0500
> From: "Paragon Corporation" <lr at pcorp.us>
> Subject: RE: [postgis-users] Which postGIS functions to use?
> To: "'PostGIS Users Discussion'"
> 	<postgis-users at postgis.refractions.net>
> Message-ID: <F96D34A9696B465F9FE7D73585115CC7 at b>
> Content-Type: text/plain;	charset="us-ascii"
> 
> I don't quite understand your question.
> 
> Are you trying to get the length of the intersection of the 2?  So that part
> of the network component that falls within the quay?
> 
> In that case it would be something of the form
> 
> SELECT ST_Length(ST_Intersection(netcomponent.the_geom, quay.the_geom)) 
> 
> Which assumes your netcomponent is defined as a LINESTRING (you can use
> ST_MakeLine
> http://postgis.refractions.net/documentation/manual-svn/ST_MakeLine.html 
> if you have 2 points and no line)
> 
> And quay is some sort of polygon.
> 
> Hope that helps,
> Regina
> 
> -----Original Message-----
> From: postgis-users-bounces at postgis.refractions.net
> [mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of
> gt at fks.be
> Sent: Saturday, February 14, 2009 11:31 AM
> To: postgis-users at postgis.refractions.net
> Cc: guythomas at telenet.be
> Subject: [postgis-users] Which postGIS functions to use?
> 
> I have a "network component" (= part of a waterway) defined by 2
> coordinates.
> I know how to calculate the length of that component.
> 
> However, another component, let's say a quay, overlaps with the component. I
> know how far it overlaps (in meters) with the component from the beginning
> coordinate and I want to calculate the end coordinate of the quay (that
> should be on the network component).
> 
> How do I do this?
> 
> Thank you
> 
> 
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
> 
> 
> 
> 
> ------------------------------
> 
> Message: 3
> Date: Sun, 15 Feb 2009 11:15:40 -0500
> From: Stephen Woodbridge <woodbri at swoodbridge.com>
> Subject: Re: [postgis-users] Which postGIS functions to use?
> To: PostGIS Users Discussion <postgis-users at postgis.refractions.net>
> Message-ID: <49983FAC.3010603 at swoodbridge.com>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> 
> I'm not sure if I understand you question correctly, but here is a 
> solution for my understanding.
> 
> So you have a network component that is partially overlapped by the quay 
> and you know the length along the network component where the overlap 
> starts or stops. You can extract the part of the network component that 
> overlap with ST_Intersection or ST_Difference as Regina suggests. You 
> can also do this using the linear referencing functions which might be 
> faster:
> 
>  From start of netcomponent to your distance of intersection:
> 
> SELECT ST_line_substring(netcomponent.the_geom, 0.0, 
> dist_meters/ST_length_spheroid(netcomponent.the_geom,spheroid))
> 
>  From your distance of intersection to the end of the netcomponent:
> 
> SELECT ST_line_substring(netcomponent.the_geom, 
> dist_meters/ST_length_spheroid(netcomponent.the_geom,spheroid), 1.0)
> 
> If you just want the point of intersection with the quay then this 
> should do it:
> 
> SELECT ST_locate_along_measure(netcomponent.the_geom, 
> dist_meters/ST_length_spheroid(netcomponent.the_geom,spheroid))
> 
> All these functions assume your geometry is in units degrees and you 
> will need to define an appropriate value for spheroid like:
> 
> SPHEROID[<NAME>,<SEMI-MAJOR AXIS>,<INVERSE FLATTENING>]
> 
> for example:
> 
> 'SPHEROID["GRS_1980",6378137,298.257222101]'
> 
> -Steve
> 
> Paragon Corporation wrote:
>> I don't quite understand your question.
>>
>> Are you trying to get the length of the intersection of the 2?  So that part
>> of the network component that falls within the quay?
>>
>> In that case it would be something of the form
>>
>> SELECT ST_Length(ST_Intersection(netcomponent.the_geom, quay.the_geom)) 
>>
>> Which assumes your netcomponent is defined as a LINESTRING (you can use
>> ST_MakeLine
>> http://postgis.refractions.net/documentation/manual-svn/ST_MakeLine.html 
>> if you have 2 points and no line)
>>
>> And quay is some sort of polygon.
>>
>> Hope that helps,
>> Regina
>>
>> -----Original Message-----
>> From: postgis-users-bounces at postgis.refractions.net
>> [mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of
>> gt at fks.be
>> Sent: Saturday, February 14, 2009 11:31 AM
>> To: postgis-users at postgis.refractions.net
>> Cc: guythomas at telenet.be
>> Subject: [postgis-users] Which postGIS functions to use?
>>
>> I have a "network component" (= part of a waterway) defined by 2
>> coordinates.
>> I know how to calculate the length of that component.
>>
>> However, another component, let's say a quay, overlaps with the component. I
>> know how far it overlaps (in meters) with the component from the beginning
>> coordinate and I want to calculate the end coordinate of the quay (that
>> should be on the network component).
>>
>> How do I do this?
>>
>> Thank you
>>
>>
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at postgis.refractions.net
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>>
>>
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at postgis.refractions.net
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
> 
> 
> 
> ------------------------------
> 
> Message: 4
> Date: Sun, 15 Feb 2009 12:16:26 -0500
> From: Eduin Yezid Carrillo Vega <yecarrillo at gmail.com>
> Subject: [postgis-users] PostGIS functions inside triggers
> To: postgis-users at postgis.refractions.net
> Message-ID:
> 	<75b8f7010902150916h29b26a31gac02da86fd31d2c8 at mail.gmail.com>
> Content-Type: text/plain; charset=ISO-8859-1
> 
> Maybe I miss something, but ST_Contains isn't available inside this
> trigger. It returns empty values trying to get which polygon in table2
> contains a recently inserted point on table1. table1.the_geom value is
> filled correctly but table1.table2_id value is null. Tried ST_Within
> and ST_Intersects also.
> 
> 
> CREATE TABLE table1
> (
>   table1_id serial NOT NULL,
>   lon character varying(30),
>   lat character varying(30),
>   table2_id character varying(200),
>   the_geom geometry,
>   CONSTRAINT table1_pkey PRIMARY KEY (table1_id),
>   CONSTRAINT enforce_dims_the_geom CHECK (ndims(the_geom) = 2),
>   CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) =
> 'POINT'::text OR the_geom IS NULL),
>   CONSTRAINT enforce_srid_the_geom CHECK (srid(the_geom) = 4326)
> )
> WITH (OIDS=FALSE);
> 
> CREATE TRIGGER table1_change
>   AFTER INSERT OR UPDATE OR DELETE
>   ON table1
>   FOR EACH ROW
>   EXECUTE PROCEDURE table1_change();
> 
> CREATE TABLE table2
> (
>   gid serial NOT NULL,
>   table2_id character varying,
>   the_geom geometry,
>   CONSTRAINT table1_pkey PRIMARY KEY (table2_id),
>   CONSTRAINT enforce_dims_the_geom CHECK (ndims(the_geom) = 2),
>   CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) =
> 'MULTIPOLYGON'::text OR the_geom IS NULL),
>   CONSTRAINT enforce_srid_the_geom CHECK (srid(the_geom) = 4326)
> )
> WITH (OIDS=FALSE);
> 
> 
> CREATE OR REPLACE FUNCTION table1_change()
>   RETURNS trigger AS
> $BODY$
> DECLARE
>   the_point geometry;
>   a_row table2%ROWTYPE;
> BEGIN
>   IF tg_op = 'INSERT' THEN
> 
>      SELECT ST_GeomFromText('POINT(' || new.lat || ' ' || new.lon ||
> ')',4326) INTO the_point;
> 
>      SELECT * FROM table2 WHERE ST_Contains(table2.the_geom,
> the_point) INTO a_row;
> 
>      UPDATE table1 SET
>         table2_id = a_row.table2_id,
>         the_geom = the_point
> 	  WHERE table1_id=new.table1_id;
> 
>   END IF;
>   RETURN new;
> END
> $BODY$
>   LANGUAGE 'plpgsql' VOLATILE
>   COST 100;
> ALTER FUNCTION table1_change() OWNER TO postgres;
> 
> 
> Triggered with:
> INSERT INTO table1(table1_id, lon, lat)  VALUES
> (999,-73.138583333333,7.0854783333333);
> 
> 
> Eduin Yesid Carrillo Vega
> Ingeniero Civil, Esp. Sistemas de Información Geográfica
> Bogotá D.C., Colombia
> 
> 
> ------------------------------
> 
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
> 
> 
> End of postgis-users Digest, Vol 76, Issue 15
> *********************************************
> 

-- 
Guy Thomas                                    guy.thomas at fks.be
fks bvba - Formal and Knowledge Systems       http://www.fks.be/
Stationsstraat 108                            Tel:  ++32-(0)11-21 49 11
B-3570 ALKEN                                  Fax:  ++32-(0)11-22 04 19



More information about the postgis-users mailing list