[postgis-users] Looking why st_within not working between point3d with box3d

Paul Ramsey pramsey at cleverelephant.ca
Sun Sep 13 08:38:02 PDT 2009


Depending on how dense your data is in the third dimension, you could
simply use the 2d indexing methods and usual indexing strategy, and
write your own distance calculation that honours all three dimensions.
It's fairly common for "3D" data to be fairly rich in a X/Y but to
live in a pretty narrow band in Z

P

On Sun, Sep 13, 2009 at 12:05 AM, Bruno Friedmann <bruno at ioda-net.ch> wrote:
> Thank you Paul for the precision.
> Did you think I can find a way (finding the nearest neighboor in 3d) with some of the st_ function ?
> Or should I wait as you talk about in
> http://www.mail-archive.com/postgis-users@postgis.refractions.net/msg08026.html
>
> Or should I go and use other tools like grass/R ?
>
> Thanks.
>
> Paul Ramsey wrote:
>> PostGIS is "2.5D", not 3D, which means that, while Z and M coordinates
>> are available to store data, they are not used in calculations (with a
>> few exceptions, for things like linear referencing), they are just
>> carried along for the ride. Hence what you are observing.
>>
>> The "box3d" name is confusing and dates back to the 0.X series of
>> PostGIS, which stored 3 dimensions at all times, even when only two
>> dimensions existed in the data (in which case the 3rd dimension was
>> zeroed and hidden in output). The bounding box for such a 3-d
>> structure would naturally be named, "box3d". But it was never used for
>> 3d calculation, despite the name.
>>
>> P.
>>
>> On Sat, Sep 12, 2009 at 9:39 AM, Bruno Friedmann <bruno at ioda-net.ch> wrote:
>>> Hi All
>>>
>>> I'm facing strange results which I can't explain.
>>> So any help or idea are welcome.
>>>
>>> Here the context
>>> Table of point in 3d have been setup.
>>>
>>>
>>> SELECT
>>>  st_asewkt(the_geom),
>>>  GeometryType(the_geom),
>>>  NDims(the_geom),
>>>  ZMFlag(the_geom)
>>>  from dom limit 2;
>>>
>>> which seems to return correct 3d point
>>>
>>> "SRID=21781;POINT(602499.98 233307.35 1026.73)";"POINT";3;2
>>> "SRID=21781;POINT(602499.98 233326.89 1046.81)";"POINT";3;2
>>>
>>>
>>> The full extend of data is
>>> "BOX3D(598125 233000 631.03,602499.98 235999.98 1316.91)"
>>>
>>> Now I try to select rows inside a predefined box
>>>
>>> select id,est,nord,alti_u  from dom_1106_42_03
>>> WHERE st_within(
>>>  the_geom,
>>>  st_setsrid(
>>>  st_makebox3d (
>>>        GeomFromEWKT('SRID=21781;POINT( 598995 233995 500)'),
>>>        GeomFromEWKT('SRID=21781;POINT( 599005 234005 1000)')
>>>  )
>>>  ,21781)
>>> )
>>>
>>> In this part alti Z is not above 1200 meters so I should not find anything
>>> but I've got results like this :
>>>
>>> id      est             nord     alti
>>> 2774523;598995.1600;234002.1500;1209.8700
>>> 2775215;598995.3800;234001.0900;1210.2600
>>> 2775297;598995.4000;233999.6300;1207.7600
>>>
>>> It's ok for x,y but not Z
>>> I don't understand where my problem reside.
>>>
>>> Thanks a lot in advance.
>>>
>>>
>
> _______________________________________________
> 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