Thanks. Just to clear things up, :point_or_poly bind variable needs a "geometry"<div>type passed in to it, right?</div><div><br></div><div>Thanks,</div><div>Ed  <br><br><div class="gmail_quote">On Sat, Oct 27, 2012 at 1:57 PM, Sandro Santilli <span dir="ltr"><<a href="mailto:strk@keybit.net" target="_blank">strk@keybit.net</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Sat, Oct 27, 2012 at 01:37:05PM +0200, Ed Linde wrote:<br>
<br>
> Is there a way to know for a user defined "k" what the k-nearest polygons<br>
> to a given polygon or point are in postgis?<br>
<br>
</div>-- Simple answer:<br>
SELECT gid from polygons<br>
 ORDER BY ST_Distance(the_geom, :point_or_poly)<br>
 LIMIT :k;<br>
<br>
More complex: if you have PostGIS-2.0 and need<br>
more speed the following versions do use a spatial<br>
index, if defined on "polygons":<br>
<br>
-- k nearest to bounding box of polygons:<br>
SELECT gid FROM polygons<br>
 ORDER BY the_geom <#> :point_or_poly<br>
 LIMIT :k;<br>
<br>
-- k nearest to polygon center:<br>
SELECT gid FROM polygons<br>
 ORDER BY the_geom <-> :point_or_poly<br>
 LIMIT :k;<br>
<br>
-- k nearest to polygon shape:<br>
-- NOTE: assumes the k closest objects<br>
--       are among the k*10 objects<br>
--       closer to boundingbox<br>
--<br>
WITH k_times_10_closer AS (<br>
  SELECT gid, the_geom FROM polygons<br>
   ORDER BY the_geom <#> :point_or_poly<br>
   LIMIT :k*10<br>
)<br>
SELECT gid from k_times_10_closer<br>
 ORDER BY ST_Distance(the_geom, :point_or_poly)<br>
 LIMIT :k;<br>
<br>
--strk;<br>
<br>
 <a href="http://www.cartodb.com" target="_blank">http://www.cartodb.com</a> - Map, analyze and build applications with your data<br>
<br>
                                       ~~ <a href="http://strk.keybit.net" target="_blank">http://strk.keybit.net</a><br>
<br>
_______________________________________________<br>
postgis-users mailing list<br>
<a href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br>
<a href="http://postgis.refractions.net/mailman/listinfo/postgis-users" target="_blank">http://postgis.refractions.net/mailman/listinfo/postgis-users</a><br>
</blockquote></div><br></div>