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
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_dwithindeclare 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_astext12POINT(7.4545 44)13POINT(7.49785 44)14POINT(7.6845 44)15POINT(7.96311 44)16POINT(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>
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