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

Paragon Corporation lr at pcorp.us
Mon Feb 16 01:44:39 PST 2009


Guy,

What spatial ref sys is your data?  Is it longlat or meter/ft based?

As I think Steve Woodbridge mentioned, I think you'll want to take a look at
the linear referencing functions documented here
http://postgis.refractions.net/documentation/manual-svn/ch07.html#Linear_Ref
erencing

In particular -- ST_Line_Interpolate_point
http://postgis.refractions.net/documentation/manual-svn/ST_Line_Interpolate_
Point.html

So if you know the overlap is 200m in and the network component is 400m and
you are using a non-long lat coordinate system, then your fraction will be
0.50

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 Guy
Thomas
Sent: Monday, February 16, 2009 2:31 AM
To: postgis-users at postgis.refractions.net
Subject: [postgis-users] Re: Which postGIS functions to use?

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.ht
> ml
> 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.h
>> tml
>> 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
_______________________________________________
postgis-users mailing list
postgis-users at postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users





More information about the postgis-users mailing list