#1 Wed 19 January 2022 10:38
- Kiecane
- Participant actif
- Date d'inscription: 31 Oct 2021
- Messages: 91
somme jointure spatiale
Bonjour,
Je travaille sur ArcGIS et je rencontre le problème suivant :
Je dispose de deux couches, l'une qui correspond à la BD haie de l'IGN et l'autre qui correspond à un maillage hexagonal de 100 m d'espacement que j'ai créé. Je cherche à calculer le linéaire de haies (=la longueur) présent dans chaque maille. Pour cela j'ai commencé par intersecter ma couche de haies avec mon maillage. Puis, j'ai recalculé la longueur de mes haies. Par la suite, j'ai réalisé une jointure spatiale, en utilisant l'option Join_one_to_many et intersect. Le problème, c'est dans la table attributaire de la jointure créée, je n'ai pas la somme du linéaire de haies présentes dans une maille, mais la valeur maximale de longueur de haie observable dans cette maille. Quelqu'un pourrait m'indiquer comment modifier cela ?
Merci d'avance pour votre aide
Hors ligne
#2 Wed 19 January 2022 11:07
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: somme jointure spatiale
[edit]
Fausse manip, j'ai supprimé par erreur ma réponse précédente et je ne peux plus la retrouver à priori !
Dernière modification par Sylvain M. (Thu 20 January 2022 11:07)
Sylvain M.
Hors ligne
#3 Thu 20 January 2022 15:00
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: somme jointure spatiale
Voici à peu près ce que je conseillais dans mon message d'hier :
Pour gérer les statistiques des champs joints, il faut gérer le "field_mapping" (appariement des champs), comme indiqué sur l'aide :
https://desktop.arcgis.com/fr/arcmap/10 … l-join.htm
Qui renvoi notamment vers :
https://desktop.arcgis.com/fr/arcmap/10 … ontrol.htm
Mais pour ce qui concerne votre besoin, ce travail est beaucoup plus simple en SQL, si vous avez accès à un moteur SQL (ArcSDE, PostGreSQL, Spatialite, ou même les "couches virtuelles" dans QGis)
Voici la requête en supposant que vous avez :
- une couche "mailles" avec un identifiant (id)
- une couche "haies_inter_mailles" avec l'id des mailles (id_maille), et un champ "longueur"
Code:
SELECT m.id, sum(h.longueur) as lineaire_haies FROM mailles m JOIN haies_inter_mailles h ON (m.id = h.id_maille) GROUP BY m.id
Dernière modification par Sylvain M. (Thu 20 January 2022 15:06)
Sylvain M.
Hors ligne
#4 Thu 20 January 2022 15:13
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: somme jointure spatiale
La même chose, mais en SQL spatial (ce qui évite d'avoir à faire l'intersection en préalable) :
Code:
SELECT m.id, sum(length(st_intersection(m.geom, h.geom))) as lineaire_haies, m.geom FROM mailles m JOIN haies h ON ST_Intersects(m.geom, h.geom) GROUP BY m.id, m.geom
Sylvain M.
Hors ligne