[Portugal] Postgis 2.0 - Análise de Vizinho mais próximo usando index GIST (função <->)

Alexandre Neto senhor.neto gmail.com
Quarta-Feira, 2 de Maio de 2012 - 04:54:10 EDT


Estou a tentar usar a nova função <->)  (Geometry Distance
Centroid<http://postgis.refractions.net/docs/geometry_distance_centroid.html>)
para em cada registo da minha tabela (cosn1) calcular a distância ao
poligono mais próximo com a mesma classe.

Tentei o seguinte código SQL:

WITH index_query AS (
  SELECT g1.gid As ref_gid, ST_Distance(g1.the_geom,g2.the_geom) As ENN
FROM "cosn1" As g1, "cosn1" As g2
WHERE g1.gid <> g2.gid AND g1.class = g2.class
ORDER BY g1.gid, g1.the_geom <-> g2.the_geom)
  SELECT DISTINCT ON (ref_gid) ref_gid, ENN
   FROM index_query
  ORDER BY ref_gid, ENN;

Mas depois apercebi-me da seguinte nota:


Note: Index only kicks in if one of the geometries is a constant (not in a
subquery/cte). e.g. 'SRID=3005;POINT(1011102 450541)'::geometry instead of
a.geom

O que quer dizer que o Indice Espacial não é utilizado, e que a consulta
demora praticamente o mesmo tempo que a versão para postgis 1.5:

SELECT DISTINCT ON(g1.gid)  g1.gid As ref_gid,
ST_Distance(g1.the_geom,g2.the_geom) As ENN
FROM "cosn1" As g1, "cosn1" As g2
WHERE g1.gid <> g2.gid AND g1.class = g2.class
ORDER BY g1.gid, ST_Distance(g1.the_geom,g2.the_geom)

Alguém tem alguma sugestão para que possa contornar esta limitação da
função?

Obrigado,

Alexandre Neto
-------------- próxima parte ----------
Um anexo em HTML foi limpo...
URL: http://lists.osgeo.org/pipermail/portugal/attachments/20120502/b8219d1b/attachment.html


Mais informações acerca da lista Portugal