[postgis-users] How to get the distance between geometry inmeters?

Kevin Neufeld kneufeld at refractions.net
Thu Mar 20 11:07:34 PDT 2008


Hi R H,

Are you certain that your input geometries are in a meter projection?  
David is correct.  Distance() always returns the cartesian distance in 
the *same* units as the input.  It's impossible to input something in 
meters in this function and get something in degrees.

Looking at your SQL you posted earlier, I have the suspicion that your 
input geometries are in lat/long (4269) and you simply updated the srid 
of the geometries to be 26912, thinking that this would change the 
projection of your geometries.  Am I off here?  To verify, can you post 
the ewkt representation of a small geometry here?

Cheers,
Kevin

R H wrote:
> sorry in the example I said "returns cartesian distance", I meant 
> degrees.  So my input was in a meter projection and was returning degrees.
>
>     ------------------------------------------------------------------------
>     Date: Thu, 20 Mar 2008 12:08:11 -0500
>     From: david.bitner at gmail.com
>     To: postgis-users at postgis.refractions.net
>     Subject: Re: [postgis-users] How to get the distance between
>     geometry inmeters?
>
>     Distance() always returns "cartesian distance" in whatever units
>     it is fed.  If it is fed data that is in meters -- the output will
>     be in meters.  If it is fed degrees -- the output will be in
>     degrees and totally useless.  I don't quite understand the problem
>     that you are having
>
>     On Thu, Mar 20, 2008 at 11:15 AM, R H <enoop at hotmail.com
>     <mailto:enoop at hotmail.com>> wrote:
>
>         Thanks for the reply.  I think I got it figured out.  The
>         projections I was putting into distance() where in meters.  I
>         used a projection that is in degrees and then transformed to
>         meters.  It appears to be working now.
>          
>         I'm not sure I understand why?
>         This is what I had previously
>         geom = sird(26912) meter projection
>          
>         select distance(geom,geom) returns cartesian distance
>         select distance(transform(geom, 26912), transform(geom,
>         26912)) returns cartesian distance
>          
>         then I changed geom = sird(4269) degree projection
>         select distance(transform(geom, 26912), transform(geom,
>         26912)) returns meter
>          
>         How are any of these statements different?  Based on order of
>         operations isn't the inner most parentheses executed first? 
>         Therefore being exactly the same as the first select?  I guess
>         it's working so I will stop worrying about it.
>
>             ------------------------------------------------------------------------
>             From: lr at pcorp.us <mailto:lr at pcorp.us>
>
>             To: postgis-users at postgis.refractions.net
>             <mailto:postgis-users at postgis.refractions.net>
>             Subject: RE: [postgis-users] How to get the distance
>             between geometry inmeters?
>             Date: Thu, 20 Mar 2008 05:37:30 -0400
>
>
>             RH,
>              
>             Yes this is the same as putting 2 geoms with the *same
>             *meter projection into ST_Distance.  The transform
>             effectively flattens out a small section of space so you
>             are measuring in cartesian space which is actually what
>             you want to do since it simplifies the math.
>              
>             Your example below transform(st_distance(geom,geom),srid) 
>             should give you an error since you are effectively taking
>             a distance (which would be in double precision) and then
>             trying to transform that.  You can only transform
>             geometries not distances.
>              
>             What sort of error are you getting with ST_Distance and
>             ST_DWithin?  Keep in mind that both your geometries have
>             to be in the same meter projection otherwise an error
>             would be thrown.
>              
>             Hope that helps,
>             Leo & Regina
>              
>              
>
>             ------------------------------------------------------------------------
>             *From:* postgis-users-bounces at postgis.refractions.net
>             <mailto:postgis-users-bounces at postgis.refractions.net>
>             [mailto:postgis-users-bounces at postgis.refractions.net
>             <mailto:postgis-users-bounces at postgis.refractions.net>]
>             *On Behalf Of *R H
>             *Sent:* Wednesday, March 19, 2008 6:03 PM
>             *To:* PostGIS Users Discussion
>             *Subject:* RE: [postgis-users] How to get the distance
>             between geometry inmeters?
>
>             isn't this the same as putting two geom w/ a meter
>             projection into st_distance(), st_distance() still returns
>             a cartesian distance not a distances in meters?  Wouldn't
>             you need to do something like...
>             transform(st_distance(geom,geom),srid)??? 
>              
>             I only ask because I am having a simular problem.  My
>             projections are in a meter projection, but I can't get
>             st_distance() or st_dwithin() to use meters?  any thoughts?
>
>
>                 ------------------------------------------------------------------------
>                 Subject: RE: [postgis-users] How to get the distance
>                 between geometry in meters?
>                 Date: Wed, 19 Mar 2008 06:56:24 -0400
>                 From: robe.dnd at cityofboston.gov
>                 <mailto:robe.dnd at cityofboston.gov>
>                 To: postgis-users at postgis.refractions.net
>                 <mailto:postgis-users at postgis.refractions.net>
>
>                 You'll need to transform to a meter based projection
>                 to do that.  If for example you are in the U.S, SRID
>                 2163 US National Atlas Equal Area works pretty good
>                 for measurement.  It is not as accurate as UTM or
>                 State Plane, but its pretty good and covers all of US
>                 I believe and probably works for some of Canada as
>                 well (not sure about non-continental e.g. Hawaii,
>                 Alaska). 
>                  
>                 e.g.
>                  
>                 SELECT road.rd_name, ht.ht_name,
>                 ST_Distance(ST_Transform(roads.the_geom,2163) ,
>                 ST_Transform(hotel.the_geom,2163))  as dist_meters
>                 FROM road, hotel
>                 WHERE <some criteria here>
>                  
>                 If you are somewhere else and your locations are
>                 within that projection, you can use that.  Look at the
>                 utmzone function in the wiki that will help you
>                 determing the right UTM zone SRID for your data
>                  
>                 http://postgis.refractions.net/support/wiki/index.php?plpgsqlfunctions
>                  
>                 So you would use something liek
>                 SELECT utmzone(ST_Centroid(the_geom)) as srid
>                  
>                 to get the right UTM zone SRID
>                  
>                  
>                 Hope that helps,
>                 Regina
>                  
>                  
>
>                 ------------------------------------------------------------------------
>                 *From:* postgis-users-bounces at postgis.refractions.net
>                 <mailto:postgis-users-bounces at postgis.refractions.net>
>                 [mailto:postgis-users-bounces at postgis.refractions.net
>                 <mailto:postgis-users-bounces at postgis.refractions.net>]
>                 *On Behalf Of *Sinboy Chang
>                 *Sent:* Wednesday, March 19, 2008 3:09 AM
>                 *To:* postgis-users at postgis.refractions.net
>                 <mailto:postgis-users at postgis.refractions.net>
>                 *Subject:* [postgis-users] How to get the distance
>                 between geometry in meters?
>
>                 i want to get the distance between geometry,just like
>                 road or hotel poi,but ST_Distance() return the result
>                 in /cartesian dintance./
>                 So how can get the distance() by meters?
>                 ------------------------------------------------------------------------
>
>                 *The substance of this message, including any
>                 attachments, may be confidential, legally privileged
>                 and/or exempt from disclosure pursuant to
>                 Massachusetts law. It is intended solely for the
>                 addressee. If you received this in error, please
>                 contact the sender and delete the material from any
>                 computer. *
>                 ------------------------------------------------------------------------
>
>                 *Help make the earth a greener place. If at all
>                 possible resist printing this email and join us in
>                 saving paper.
>                 *
>
>
>
>         _______________________________________________
>         postgis-users mailing list
>         postgis-users at postgis.refractions.net
>         <mailto:postgis-users at postgis.refractions.net>
>         http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
>
>
>     -- 
>     ************************************
>     David William Bitner 
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> 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