[postgis-users] meters to degrees

269 views
Skip to first unread message

Michal

unread,
Mar 6, 2011, 5:38:29 PM3/6/11
to postgi...@postgis.refractions.net
Hello everyone,

I am new to Postgres and PostGIS. I have encountered one problem, that I
can not deal with.I have table with various points that have SRID=3044,
which should be UTM zone including Jutland. I have created function to
loop through all points in table and check if they are within given
radius(using geometry and function st_point_inside_circle). Now to the
problem, for some reason st_point_inside_circle takes radius in degrees,
which is very inconvenient for me. I would really need to change to
metres. If anyone has a suggestion, pls let me know.

Thank you for help

Michal

_______________________________________________
postgis-users mailing list
postgi...@postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users

michal nagy

unread,
Mar 7, 2011, 2:28:40 AM3/7/11
to postgi...@postgis.refractions.net

Paragon Corporation

unread,
Mar 7, 2011, 3:14:24 AM3/7/11
to PostGIS Users Discussion
 
We cover this topic in detail in the first chapter of our book which is a free download.
 
 
Leo and Regina


From: postgis-us...@postgis.refractions.net [mailto:postgis-us...@postgis.refractions.net] On Behalf Of michal nagy
Sent: Monday, March 07, 2011 2:29 AM
To: postgi...@postgis.refractions.net
Subject: [postgis-users] meters to degrees

michal nagy

unread,
Mar 7, 2011, 5:41:50 AM3/7/11
to PostGIS Users Discussion
Well, it sitll does not solve my problem. As I said I am using geometry(planar) with SRID 3044, where units are degrees, therefore when using st_dwithin will still take input in degrees.

2011/3/7 Paragon Corporation <l...@pcorp.us>

Mike Toews

unread,
Mar 7, 2011, 6:28:19 AM3/7/11
to PostGIS Users Discussion
You are using EPSG:3044, correct? http://spatialreference.org/ref/epsg/3044/

This projection has units of metres. ST_DWithin and related functions use the same units of length as defined in the projection, which in this case is metres, not degrees. You may need to elaborate with an example.

-Mike

michal nagy

unread,
Mar 7, 2011, 12:56:31 PM3/7/11
to PostGIS Users Discussion
Ok,

basically I have table location(id int, point geometry(POINT)) and function getallpointsincircle(longitude, latitude, radius) which gives set of internal indexes from location table if point in table is in the radius of parameters of function. Inside function I am using st_dwithin 
declare
t2_row location%rowtype;
po geometry;
begin
po:=st_geomfromtext('POINT('||lon||' '||lat||')',3044);

for t2_row in select * from location
loop
if st_dwithin(t2_row.point,po, radius) is true
then return next t2_row.id;
end if;
end loop;
return;
end;

idst_astext
12
POINT(7.4545 44)
13
POINT(7.49785 44)
14
POINT(7.6845 44)
15
POINT(7.96311 44)
16
POINT(55.859755 9.847419)

these are test values in location table, as you can see point(16) has measured coords, others are bogus. 
Now, when I execute my function select getallpointsincircle(56.162882,10.203944,45000.0), all the indexes are returned. Approximately the distance between these places is 40 km. But when I exchange 45000.0 with 0.46 i will get proper index(16 in this case).



2011/3/7 Mike Toews <mwt...@gmail.com>

Mike Toews

unread,
Mar 7, 2011, 1:45:42 PM3/7/11
to michal nagy, PostGIS Users Discussion
Hi Michal,

It looks like you declared your data in location.point using
longitude/latitude, rather than easting/northing. If you want to store
your data in projected EPSG:3044, you need to first transform it from
geographic units, e.g.:

SELECT ST_AsEWKT(ST_Transform(ST_SetSRID(ST_MakePoint(7.4545, 44.0),
4326), 3044));

looks like
"SRID=3044;POINT(376090.362129178 4873033.87926193)"

Now these units are in metres. You had previously declared your point
with Easting 7.4545 m and Northing 44.0 m, which is theoretically
somewhere near the equator. With geometry, you need to use all degrees
or all metres. You cannot mix units arbitrarily without transforming
them using ST_Transform.

If you are doing many things with mixed long/lat and measured metres,
you might want to take a look at the geography data type:
http://postgis.refractions.net/docs/ch04.html#PostGIS_Geography

-Mike

Reply all
Reply to author
Forward
0 new messages