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

Printemps des cartes 2024

#1 Tue 16 May 2017 13:17

Shinsky
Juste Inscrit !
Date d'inscription: 24 Apr 2017
Messages: 3

QGIS: Extraction données d'une couche polyligne vers une couche point

Bonjour,

Petite interrogation sur les fonctionnalités de QGIS:
J'ai deux couches dans mon projet; l'une est une couche de polylignes qui porte des données; l'autre une couche de point portant seulement un identifiant unique.
Malheureusement, les points ne sont pas parfaitement disposés sur les lignes et je ne peux pas me permettre de les replacer un à un car le jeu de données est de l'ordre de 90 000 points.

Jusqu'à maintenant j'étais partis sur cette démarche :
(1) Créer un buffer autour des lignes;
(2) Faire une jointure spatiale entre les buffers et les points.
Cela fonctionne correctement mais il y a toujours le risque d'avoir un buffer qui récupère des points qui ne sont pas sensés se trouvés sur la ligne donnée.

C'est pourquoi j'aurai souhaité savoir s'il existait une solution autre et potentiellement plus précise pour faire ce travail ? Une fonctionnalité pour reprojeter les points peut-être ?

J'espère que je ne suis pas trop confus dans ma demande.

Merci d'avance, Valentin

Hors ligne

 

#2 Tue 16 May 2017 14:12

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

Re: QGIS: Extraction données d'une couche polyligne vers une couche point

Bonjour,

Vous avez 3 solutions, en gros, depuis QGIS : une solution par outil. Et la solution dev python depuis QGIS.

- La solution GRASS : utiliser le module v.net pour lier votre point au réseau. Cela créera une ligne de connexion dont le départ est votre point d'origine et dont l'extrêmité est le point projeté orthogonalement.

- La solution Spatialite : sous QGIS, on peut bénéficier de toutes les fonctions spatialite, sans pour autant avoir créé de base spatialite préalablement, en passant par les couches virtuelles : Couche > Ajouter une couche > Ajouter une couche virtuelle. On utilisera alors la fonction closestpoint
https://gis.stackexchange.com/questions … ar-feature

- La solution PostGIS nécessitant d'avoir installé un serveur : utiliser la fonction st_closespoint
http://postgis.net/docs/ST_ClosestPoint.html

- La solution dev python, sans doute la plus ardue, et que je conseillerais moins, mais cela ne mange pas de pain de la citer, pour laquelle on peut s'inspirer de ce post :
https://gis.stackexchange.com/questions … ighborhood


geodata au cerema et petits billets en géomatique

Hors ligne

 

#3 Wed 17 May 2017 10:15

JMBrossard
Participant occasionnel
Date d'inscription: 4 May 2017
Messages: 11

Re: QGIS: Extraction données d'une couche polyligne vers une couche point

Bonjour,

Qu'est-ce que tu veux obtenir exactement comme résultat ? Replacer géographiquement tes points sur tes lignes ou joindre des attributs de tes lignes à tes points ? (où les deux peut-être...)

Si c'est la deuxième proposition et que tu ne travaille pas avec une base de données (SpatiaLite, PostGre,etc) le plus simple serait bien de passer par un v.net.connect.

Dans les paramètres de l'outil, tu peux rentrer une distance maximale. Les points trop loin du réseau ne seront pas pris en compte, ce qui peut te servir à repérer de trop grosses erreurs de position par exemple.
A la sortie du calcul, tu obtient un nouveau réseau constituer des arcs de ton réseau ligne initial + les arcs permettant de relier tes points à tes lignes.
Dans la table attributaire de ce nouveau réseau, les attributs de ton ancien réseau sont conservés mais les attributs des nouveaux arcs sont vides.
Il faut donc les remplir.

La manipulation à faire : Avoir 2 couches du nouveau réseau enregistré distinctement. Dans l'une, tu conserve uniquement les arcs avec des informations attributaires en supprimant les autres. Dans l'autre, tu conserve seulement les arcs avec aucune information attributaire (correspondant aux arcs points->lignes).
Tu fais ensuite une jointure spatiale entre ta couche tes arcs points->lignes et ta couche du réseau en prenant comme prédicat géométrique "touche".

Tu obtiens alors une nouvelle couche de tes arcs avec les informations attributaires correspondantes. Il ne reste plus qu'a rebasculer cette information dans la couche des points.
Une jointure spatiale serait possible mais tu es obligé d'indiquer une marge d'erreur pour que cela fonctionne. Il persiste en effet des petites erreurs, tes points ne sont pas exactement sur ta ligne. Si tu passe par là, utilise le prédicat "Intersect" avec une distance de 1.

Pour s'affranchir de ça, tu peux utiliser l'outil "distance au plus proche centre" de QGIS. Cela te crééra une nouvelle couche de points avec les informations de tes lignes, plus la distance entre ton point et ton arc le plus proche (distance généralement inférieur à 0.01 sur mon jeu test)

Cette manipulation ne renseigne que la table attributaire de tes points, ce que je soupçonne être ton objectif.

En espérant avoir été assez clair dans mes manipulations !

Hors ligne

 

Pied de page des forums

Powered by FluxBB