Message posté par : Nicolas Ribot
----------------------------------------
Je suis pas fan, perso, de vues qui mettent en jeu du spatial qui prend du temps à
exécuter.
je préfère une vraie table, ou alors une vue matérialisée, qui stocke la requête utilisée
et peut etre rafraichie.
Pour faire une recherche de plus proches voisins sur tous les éléments d'une table vs
tous les éléments d'une autre, vous pouvez utiliser un JOIN LATERAL, qui offre la
fonctionnalité puissante de pouvoir référencer dans la sous-requete du FROM des colonnes
du SELECT de la première requête.
Dans votre exemple (j'ai ptet pas tout compris non plus :D ), je ferais une recherche
de plus proche voisin (dans la sous-requête LATERAL..., le "LIMIT k" permet de
choisir les k plus proches voisins d'une geométrie); puis une jointure sur la table
bezeichnung pour remonter les infos voulues:
-----------------
Code :
-- recherche du plus proche voisin (LIMIT 1) de chaque _prellbockdist dans la table
_kilometrierung
with knn as (
SELECT p.id, p.name, p.angle,
t.linie,
t.km
FROM _prellbockdist p
CROSS JOIN LATERAL
(SELECT a.linie, a.km
FROM _kilometrierung a
ORDER BY p.geom <-> a.geom
LIMIT 1) AS t
) -- puis jointure finale pour remonter l'info bezeichnung
select k.id, k.name, k.angle, k.linie, k.km,
i.bezeichnung
from knn k join _symbolindex_bahnplan i ON k.name::text = i.symbolnr::text;
-----------------
Nicolas
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=335411#p335411
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net