[postgis-users] PostGIS 2.0 Wishlist

ValiSystem vali.system at free.fr
Tue Apr 24 10:36:25 PDT 2007


On 23 avr. 07, at 21:32, Paul Ramsey wrote:

> FYI, I'm working on the overall wishlist document at this URL:
>
> http://docs.google.com/Doc?id=dg99qr76_2dgt26j
> --  
>
>   Paul Ramsey
>   Refractions Research
>   http://www.refractions.net
>   pramsey at refractions.net
>   Phone: 250-383-3022
>   Cell: 250-885-0632


		Hello,

	I saw that you plan a nearest neighbor implementation for PostGIS  
2.0. Last year, two students worked for me on that subject, i've been  
thinking to give you the result (my company owns the copyright, and  
we don't plan to do any business with this stuff), but i wanted to do  
a cleanup, checking the code and do some improvement before posting  
it. But i didn't take the time, and be sure that i'm sorry.

	I've been talking about that last month on IRC, to see if someone  
were interested, someone answered positive, but i'm on a rush a work  
and i did not worried about that anymore.

	Anyway, the algorithm is the Hjaltason & Samet one [1], and as far a  
i tested it, it was pretty good. But the current implementation has  
many problems :
  - it's all commented in french, and even some parts of code are in  
french (damned students)
  - the implementation works only with BBOXes, and not the actual  
geometry. AFAIK it could be possible to use the distance() function,  
but it needs to plays with datatypes to find the accurate  
implementation.
  - the function is not integrated to postrgesql correctly, you  
cannot use it in query, only in one call, where you give tables  
names, etc as parameters and even some attributes name might be hard  
coded. Nothing critical, but dirty job to be done.
   - it has been written somewhat quickly, by novice programmers.

But, the good news are :
  - there has been a worry of quality, since the student took care to  
write it in VC1 by himself.
  - it has worked correctly without visible bug on a 100 000 rows  
table in a small amount of time (i don't remember the exact values of  
the benchmark).

For the ones who are interested, the algorithm used is a kNN one (k  
Nearest Neighbors), so that you can get one or several results,  
ordered by distance.
To sum up quickly, the general algorithm plays with the R-Tree, it  
explores it in depth (choosing the correct branches), and fill in an  
array while going back up. When the R-Tree structure has been  
explored enough to ensure that the returned list is effectively the  
kNN ones (obvious, but an R-Tree is a quite tricky structure, so, not  
so easy to ensure :) ) the algorithm finishes.

So, I don't know if anyone is really interested with that piece of  
code, but, just in case, because it may avoid some hours of hard  
work. Anyway if someone wants to use it, it's pretty sure that i'll  
give some help. I didn't do that by myself, but i'd be happy to work  
with someone.

Nicolas.

[1] not sure, but i think that it is this one : http:// 
citeseer.ist.psu.edu/hjaltason98incremental.html





More information about the postgis-users mailing list