[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