[postgis-users] Simple question: How to get projected distance?
Lance Arlaus
lance.nospam.1 at codeberet.com
Fri Aug 12 12:49:32 PDT 2005
Thanks Gustavo. Simple oversight on my part - long/lat, not lat/long -
arggghh!! Works like a charm now. Told you, I'm new to this.
One last question - Is this cycle of WGS84 -> UTM -> WGS84 considered best
practice i.e. is this the easiest way to accomplish what I need? It would
imply that I need to add logic to figure the right intermediate UTM zone.
-Lance
-----Original Message-----
From: postgis-users-bounces at postgis.refractions.net
[mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of Gustavo
Henrique Sberze Ribas
Sent: Friday, August 12, 2005 1:17 PM
To: PostGIS Users Discussion
Subject: RE: [postgis-users] Simple question: How to get projected distance?
Hi,
> Here's what I've tried and the problems I've encountered:
> 1. Tagging the points with an SRID of 4326 (WGS 84) and
> directly querying for the distance. Since it's not a projected coordinate
> system, it just gives the Cartesian distance. Pretty useless.
Don't apply 2D planar formulas to an ellipsoidal coordinate system.
It makes no sense.
> 2. Use distance_sphere() to calculate the distance. Great, I
> get distances, but can't create shapes, etc.
Why not? If you don't need much precision you can say
that 1 degree ~ 100km.
> 3. Transform the points into a UTM projection and create
> polygons and query for distance on the transformed points.
> This works, however the system must work across the US and
> I'd have to have a table for each UTM zone and add a
> lot of logic to accommodate not to mention separate indexes,
> etc. Very ugly option.
Agreed.
> 4. Transform into UTM, perform the operations, and transform the UTM
> coordinates back into WGS 84 lat/long, storing the resulting
> points in one table with the appropriate indexes attached for efficient
querying.
> Ideally, I'd like to end up with a set of WGS 84 defined geometries that
I
> can query. Unfortunately, this doesn't work. Transforming the points
back
> into WGS 84 yields nonsense results.
That's strange, I do exactly that and it works just fine. Here's an
example that
creates a circle of radius 100m around a lat/long point:
select
transform(
setSRID(
buffer(
transform(
'SRID=4326;POINT(-47.2407989501953 -22.7394008636475)',32723
),
100
),
32723
),
4326
)
I project the point to UTM using the same WGS84 ellipsoid, then I buffer
it
to create a "circle" (32 sided polygon). Finally I translate the circle
coordinates
back to lat/lon WGS84.
> I thought this would be very simple. At this point, I'm
> quite frustrated. What am I doing wrong??
Remember: Point(Longitude Latitude).
--
Gustavo
> Some of my results:
> -- Create WGS84 point and transform into UTM zone 18N
> ASText(Transform(PointFromText('POINT(40.8117 -74.218)',
> 4326), 32618));
> Result: "POINT(2192975.52043048 -10779305.4033352)"
>
> -- Create WGS84 point, transform into UTM zone 18N, and transform back
> ASText(Transform(Transform(PointFromText('POINT(40.8117
> -74.218)', 4326),
> 32618), 4326));
> Result: "POINT(-75 -90)"
>
>
> Thanks,
> Lance
>
> Lance Arlaus wrote:
> > I know this is a simple question, but I'm just getting started with
> > PostGIS and I can't seem to perform a simple calculation.
> >
> > I just need to calculate the distance between two points.
> What am I
> > doing wrong?
> >
> >
> >
> > Query:
> >
> > SELECT distance(PointFromText('POINT(40.8117 -74.218)', 32617),
> > PointFromText('POINT(40.8272 -74.1242)', 32617))
> >
> > Returns:
> >
> > 0.095.
>
> This is the distance in the input units. Since the values you
> are using
> are decimal degrees the result is 0.095... decimal degrees
> and probably
> assumes that you are computing this in a flat X-Y plane.
>
> > Of course if I do the following, I get a reasonable answer
> (about 10km),
> > but it's not exactly what I want
>
> OK, what is it that you want?
>
> > SELECT distance_sphere(PointFromText('POINT(40.8117 -74.218)',
> > 32617), PointFromText('POINT(40.8272 -74.1242)', 32617))
>
> This is better than you first try because this is computing the arc
> distance along the great circles between the two points.
>
> > Even constructing a line and taking the length doesn't work
> and I've
> > tried all SRIDs.
> >
>
> SRIDs are an attribute associated with the geometry, like,
> red, green,
> blue. Changing them will not change the answer unless you
> pass them to a
> utility that is actively aware of them. They are there to you
> don't try
> to compare or manipulate two points that were stored in
> different SRIDs.
>
> The standard use of them is to use them to perform
> projections from the
> objects stored SRID to some common workspace that would be good for
> manipulation.
>
> The SRID for WGS84 is I believe 4326
>
> To do things right you need to understand the projection
> space that you
> data is in and how it effects calculations and the postGIS functions.
>
> >
> > Sorry to ask such a simple question.
> >
> > Also, is there a document that describes the well known
> SRIDs? I'm not
> > sure which one to use. For example, the data I've got
> references WGS
> > 84, but there's a ton of SRIDs defined. I've found docs
> describing the
> > format of the specification, but how are the SRIDs created
> (who serves
> > as the clearinghouse for this info)?
>
> HTH,
> -Steve
> _______________________________________________
> 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
>
_______________________________________________
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