Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 11 February 2019 18:36

Arthur Vander Linden
Juste Inscrit !
Date d'inscription: 11 Feb 2019
Messages: 3

Croisement d'une base de données et d'une couche polygone

Bonjour à tous,

Je me tourne vers vous aujourd'hui car je suis en panne sèche d'inspiration, de stratégies à mettre en place pour réaliser cette tâche complexe.

Mise en situation :

J'ai en ma possession une base de donnée reprenant environs 6.000.000 de points étendu sur tout un territoire, correspondant à autant d'observation de plante et d'animaux sur le terrain. A chacun de ses points sont liés tout un tas d'information (environ 40 colonnes) dans la table des attributs qui sont importantes à conserver pour le résultat final (dont les coordonnées géographique, des codes d'identification de l'espèces, les dates, etc.)

De l'autre côté, j'ai un couche qui reprend 45.000 polygones autour desquels j'ai réalisé 3 différents buffer (tampons) : buffer 500 m, buffer 1000 m et buffer 2000 m. Ces polygones représentent des zones dans lesquelles je souhaite savoir qu'elles ont été les observations réalisées.

Résultat recherché :

Je cherche à intégrer les 6.000.000 d'observations dans les polygones. Ces 6.000.000 d'observations sont séparés en 3 couches shapefile. Une couche correspondant aux observations que je souhaite inclure dans le buffer 500, une autre pour le buffer 1000 et une autre pour le buffer 2000.

Le résultat final serait de pouvoir, pour chacun des 45 000 polygones, pour dire par exemple pour le polygone n°4859:
- Dans une zone de 500m autour (buffer 500), on a observé les points n° 3, 85, 4569, 29394, 38888 et 983338
- Dans une zone de 1000m (buffer 2000) autour, on a observé etc, etc, etc
- IDEM zone 2000m (buffer 2000)

Ci-dessous, un exemple illustré avec 3 polygones du buffer 2000 et environ 400 points.
https://ibb.co/rt3yPXt

Avez-vous une idée de la stratégie à appliquer, comment est-ce que je pourrais réaliser ceci ?

Merci d'avance pour vos éventuelles réponses, Arthur

Hors ligne

 

#2 Mon 11 February 2019 19:45

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: Croisement d'une base de données et d'une couche polygone

Vous gérez 6 millions de points en shapefile ?
C'est le genre de problème qui se gère bien en SQL.
Voulez-vous avoir une ligne dans la table d'attribut pour chaque point contenu pour le polygone 4859 (on aurait donc de multiples occurrences du polygone 4859) ? Ou une ligne pour le 4859 avec un champ qui contient la liste des points contenus ?

Dernière modification par carteq (Mon 11 February 2019 19:46)

Hors ligne

 

#3 Tue 12 February 2019 09:48

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3199
Site web

Re: Croisement d'une base de données et d'une couche polygone

Bonjour,

Je rejoins l'avis de carteq sur le shapefile, le couple postgresql/postgis c'est tout de même bien mieux pour gérer ce genre de choses.
Ensuite je pense qu'il y a un petit soucis de modélisation du justement à l'utilisation du format shp (40 colonnes attributaires ça m'interpelle ).

Je vous conseille donc d'étudier votre problème sous l'angle des bases de données relationnelles à cartouche spatiale. Cela vous ouvrira de nombreuses possibilités.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#4 Tue 12 February 2019 14:27

mame1985
Participant assidu
Lieu: Montréal
Date d'inscription: 16 Oct 2010
Messages: 444

Re: Croisement d'une base de données et d'une couche polygone

Bonjour

Tu peux utiliser la selection by location.


Mame

Hors ligne

 

#5 Wed 13 February 2019 15:16

Arthur Vander Linden
Juste Inscrit !
Date d'inscription: 11 Feb 2019
Messages: 3

Re: Croisement d'une base de données et d'une couche polygone

Merci pour vos réponses, je vais essayer de prendre en main l'outil que vous m'avez proposé.

Pour l'instant, j'ai utilisé l'outil intersecte entre les polygones et les points et le résultat n'est pas mauvais. J'ai trois couches pour mes trois buffers, avec dans chacune des couches une ligne pour chaque points, points qui se sont démultiplié vu le chevauchement des polygones.

Comme j'ai au préalable attribué un ID spécifique pour chaque polygones, et un ID spécifique pour chaque type d'observation, je peux maintenant utiliser les données et connaître pour points le(s) polygones associés.

Un nouveau problème se pose à moi :

J'ai maintenant pour chaque ligne, deux coordonnées XY : les coordonnées des centroïdes du polygone associé et celles du point. J'aimerai, pour chacune des lignes, réaliser un calcul de la la distance entre le XY de l'observation et le XY du centroïde du polygone associé.

Une partie de ma table attributaire se présente donc comme suit :
FID - ID observation - X obs - Y obs - ID polygone - X pol - Y pol

Donc 4 colonnes contenant deux jeux de coordonnées.

Merci d'avance pour vos retours !

Arthur

Hors ligne

 

#6 Wed 13 February 2019 16:51

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: Croisement d'une base de données et d'une couche polygone

La formule de l'hypothénuse dans la calculatrice de champs peut-être ?

Code:

sqr( exp(X_obs - X_pol),2)+ exp(Y_obs - Y_pol),2) )

Hors ligne

 

#7 Wed 13 February 2019 19:16

Arthur Vander Linden
Juste Inscrit !
Date d'inscription: 11 Feb 2019
Messages: 3

Re: Croisement d'une base de données et d'une couche polygone

Ca semble évident, vu comme ça ! Un grand merci, ça fonctionne parfaitement

Merci pour votre aide !

Dernière modification par Arthur Vander Linden (Wed 13 February 2019 21:10)

Hors ligne

 

Pied de page des forums

Powered by FluxBB