J'ai une table PostGIS avec quelques polygones (stockés en utilisant le type de données géographiques). Ils représentent des régions sur une terre sphérique.
Pour chaque paire de sommets choisis parmi tous les polygones, je veux calculer si ces deux sommets sont "visibles" l'un pour l'autre. (Il existe n * ( n -1) / 2 paires de ce type, où n est le nombre total de sommets uniques sur tous les polygones du tableau.) Par «visibles les uns pour les autres», je veux dire que le chemin du grand cercle entre les deux sommets n'intersectent aucun des polygones du tableau.
Quel est le moyen le plus rapide de faire ce calcul, de préférence dans PostgreSQL / PostGIS?
J'ai quelque chose qui fonctionne, mais c'est lent. Je viens de parcourir naïvement toutes les paires et de voir si la chaîne de lignes entre elles intersecte des polygones. (Le type de données géographiques de PostGIS gère pour moi toutes les mathématiques difficiles de la sphère.) Je me demande donc s'il existe une structure de données ou un algorithme intelligent qui pourrait accélérer les choses.
Réponses:
Déduisez ce qui n'est pas visible. Supposons que vous vous teniez à un sommet sur la plage, en regardant deux sommets éloignés d'un polygone voisin. Ensuite, vous pouvez supposer que tout sommet dans tout le secteur derrière ces sommets est invisible de ce sommet.
la source