Message posté par : Nicolas Ribot
----------------------------------------
Un mix des critères suivant les cas, mais forcément facile sans essais-erreur avant:
-----------------
Code :
-- fonction utilitaire indice de compacité
create function st_compactnessindex(geom geometry) returns double precision
language sql
as
$$
select (4*pi()*st_area(geom))/(nullif(st_perimeter(geom), 0)^2)
$$;
-- cross join entre les deux tables pour afficher les infos complètes: (attention a ne
faire que sur des toutes petites tables :) )
select b1.gid, b2.gid as gid2,
st_area(b1.geom) as area1,
st_area(b2.geom) as area2,
st_hausdorffdistance(b1.geom, b2.geom) as hdist,
st_compactnessindex(b1.geom) as cidx1,
st_compactnessindex(b2.geom) as cidx2
from bat b1, bat2 b2
order by b1.gid, b2.gid;
gid gid2 area1 area2 hdist cidx1 cidx2
1 1 30102.74632169168 10128.92332806234 440.72335319776073 0.7553205231982011 0.7690827522505548
1 2 30102.74632169168 15296.523827591263 526.4486281851497 0.7553205231982011 0.577661001599545
1 3 30102.74632169168 7604.686539527581 688.2669119454129 0.7553205231982011 0.7718128198540396
1 4 30102.74632169168 3565.029900548586 789.2677104729362 0.7553205231982011 0.6487170062843381
2 1 9982.209118296534 10128.92332806234 166.03757945814021 0.7520901102347395 0.7690827522505548
2 2 9982.209118296534 15296.523827591263 225.80428866661123 0.7520901102347395 0.577661001599545
2 3 9982.209118296534 7604.686539527581 307.9930222870181 0.7520901102347395 0.7718128198540396
2 4 9982.209118296534 3565.029900548586 383.91744716803595 0.7520901102347395 0.6487170062843381
3 1 15312.825406454136 10128.92332806234 306.8291476836387 0.5812664559062624 0.7690827522505548
3 2 15312.825406454136 15296.523827591263 167.9001063856627 0.5812664559062624 0.577661001599545
3 3 15312.825406454136 7604.686539527581 253.21470668281214 0.5812664559062624 0.7718128198540396
3 4 15312.825406454136 3565.029900548586 286.18462597116365 0.5812664559062624 0.6487170062843381
4 1 7842.313400643993 10128.92332806234 332.946308288149 0.7894012461036052 0.7690827522505548
4 2 7842.313400643993 15296.523827591263 212.14948803325382 0.7894012461036052 0.577661001599545
4 3 7842.313400643993 7604.686539527581 167.49632002821605 0.7894012461036052 0.7718128198540396
4 4 7842.313400643993 3565.029900548586 129.59800191041765 0.7894012461036052 0.6487170062843381
5 1 3626.474313185553 10128.92332806234 496.41182281643984 0.6267715798896841 0.7690827522505548
5 2 3626.474313185553 15296.523827591263 376.5383130683794 0.6267715798896841 0.577661001599545
5 3 3626.474313185553 7604.686539527581 320.1022569335611 0.6267715798896841 0.7718128198540396
5 4 3626.474313185553 3565.029900548586 166.65195621986115 0.6267715798896841 0.6487170062843381
-- filtre sur un des critères: par ex moins de 10% d'ecart de surface:
with tmp as (
select b1.gid, b2.gid as gid2,
st_area(b1.geom) as area1,
st_area(b2.geom) as area2,
st_hausdorffdistance(b1.geom, b2.geom) as hdist,
st_compactnessindex(b1.geom) as cidx1,
st_compactnessindex(b2.geom) as cidx2
from bat b1, bat2 b2
) select *
from tmp
where abs(area1 - area2)/area1 < 0.1;
gid gid2 area1 area2 hdist cidx1 cidx2
2 1 9982.209118296534 10128.92332806234 166.03757945814021 0.7520901102347395 0.7690827522505548
3 2 15312.825406454136 15296.523827591263 167.9001063856627 0.5812664559062624 0.577661001599545
4 3 7842.313400643993 7604.686539527581 167.49632002821605 0.7894012461036052 0.7718128198540396
5 4 3626.474313185553 3565.029900548586 166.65195621986115 0.6267715798896841 0.6487170062843381
-----------------
Nico
----------------------------------------
Ce message est accompagné de fichiers, pour les télécharger, suivre le lien ci-dessous.
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=332560#p332560
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