IdGeo

(SERIE 1/3) Comment relier les points les plus proches (points sans séquence logique): l’approche « TAMPONS »

Comment relier les points les plus proches par des lignes?
Comment convertir une couche de points en lignes reliant les points les plus proches? A la limite cette question a de nombreuses réponses mais à condition que les points soient séquencés… Mais quand il n’y a pas de séquences logiques entre les points à relier (abscisse curviligne par exemple d’un point le long d’un linéaire) le problème est tout autre…

Sur les différents forums de référence (GEOREZO et FORUM SIG) des solutions sont proposées mais elles ne conviennent pas à ma problématique de par la nature des données ponctuelles en entrée avec:
– des identifiants associés au hasard empêchant tout tri,
– des courbes empêchant des tris sur les coordonnées X ou Y,
– des longueurs entre les points très variables empêchant l’utilisation de tampons…

intro

Il est souhaité en sortie 2 shapes:
– un de points avec un identifiant s’incrémentant d’amont en aval,
– un couche de ligne reliant tous les points les plus proches.

Contrainte: Le travail doit être effectué sur QGIS…

Une première solution est une approche que j’appellerai « par les tampons »: l’idée est de générer une ligne suivant approximativement les points d’entrée. Cette ligne doit être constituée de points dont les identifiants suivent une séquence ascendante d’amont en aval, attributs que nous joindrons aux points du réseau. Nous nous retrouvons ainsi avec des points du réseau séquencés et qui pourront être exploités avec l outil Point 2 Path.

Pour générer cette ligne, on créé dans un premier temps des tampons dont le rayon est strictement supérieur à la distance max séparant 2 points du réseau en entrée:
– S’assurer en premier lieu de cette distante en allant utiliser dans QGIS l’outil Matrice de distance: extraire le max de cette table (ici 96.30). Attention au niveau du calcul des distantes point à point il faut prendre les 2 points les plus proches (point amont et point aval par rapport à un point):

1_matrice_distance 2_valeur_max
– Créer des tampons dont le rayon est strictement supérieur à la valeur précédente (distance max arrondie au sup / 2, on prendra ici 50m):

3_tampons

– Transformer la couche de polygones en lignes puis exploser la couche de lignes en segments pour n’en retenir et extraire que la moitié:

4_tampons_vers_lignes

Explosion de la ligne en segments:

5bis_tampons_vers_lignes_explode

Sur la couche issue de l’explosion rajouter un champ id_obj et le mettre à jour à partir de l’identifiant de l’objet:

6bis_tamons_lignes_exploded_champ_idobj

 

7bis_remplir_champ_id_obj

Sélectionner la moitié des segments:

8bis_select_moitie_segments

9bis_enregistrement_moitie_segment

Les données ainsi créées seront utilisées pour faire du référencement linéaire, méthode utilisée notamment pour créer des abscisses curvilignes.

Ici l’extension qui sera utilisée sera LRS (Linear Reference System): elle nous permettra de créer et calibrer une droite référencée qui permettra pour une couche de points proches de mesurer leur distance à l’origine de la droite.

Première étape = calibration de l’outil. Pour cela on utilisera la couche des segments issus de la moitié des contours des tampons générés initialement. Pour calibrer cette droite constituée de segments nous utiliserons les points de départ et d’arrivée et les valeurs stockées dans le champ id_obj (0 pour le départ et le max pour l’arrivée). Pour que l’outil fonctionne correctement il nécessite le paramétrage d’un identifiant de route qui sera généré dans la couche de segments et dans la couche de points de calibration:

LRS

Préparation des données de calibration:

– Sur la couche de ligne obtenue précédemment, ajouter un champ id_route et le mettre à jour avec l’identifiant ‘A’:

LRS_1_id_route_sur_segments LRS_2_id_route_sur_segments

– Utiliser l’outil « extraire les noeuds » (menu vecteur / outils de géométrie) pour extraire les sommets de la droite:

complement1_extraction_noeuds

– Pour cette couche de points sélectionner manuellement 2 points: le plus en amont et le plus en aval

complement2_selection_noeuds_amont_aval

– Inverser la sélection et supprimer tous les autres points

complement3_suppression_noeuds_non_interet

– La couche de points de mesures de référence est prête: un champ identifiant spécifiant à quelle ligne s’applique les mesures, mesures représentées par le champ ID_obj (pour rappel on cherche ici à obtenir une séquence ascendante le long du linéaire et non des mesures réelles):

complement4_resultat_pts_calib_mesure

 

Calibration de l’outil LRS: (cette étape peut prendre du temps, l’outil peut planter s’il y a trop de noeuds à gérer…)

 

complement5_calibration

 

 

Deuxième étape = utilisation de la droite référencée pour l’appliquer au jeu de données (points que l’on cherche à séquencer):

– Tout d’abord pour ces points il faut qu’ils présentent l’attribut de la route à laquelle ils doivent être référencés: là aussi il faut rajouter un id_route:

LRS_6_prepa_data_a_referencer LRS_7_prepa_data_a_referencer

– Lancement de la mesure du référencement des points:

complement6_mesure

 

Résultat:

complement7_resultat_mesure

Nous disposons maintenant d’une couche de points référés selon une séquence ascendante de données numériques de l’amont vers l’aval. L’outil de création de lignes à partir de points ‘Points to Path » peut maintenant être utilisé:

END_POINTS_TO_PATH END_POINTS_TO_PATH_verif

Après vérification la droite passe bien comme prévu par tous les points référencés!!!!

Au niveau de cette méthode seule l’étape d’extraction des points dont l’identifiant est minimum ou maximum se fait à la main car qgis a quelques problèmes avec les regroupement de données… Envoyer les données dans une base spatialite pourrait résoudre ce problème, c’est ce que nous allons exploré par la suite avec également l’utilisation des outils « réseau » (modules v.net de grass) de GRASS…

 

A SUIVRE:

série 2/3: approche par les réseaux et modules v.net de GRASS

série 3/3: approche spatialite et fonctions d’analyse spatiale…

 

 

 

 

 

 

20 janvier 2015

0Réponses sur(SERIE 1/3) Comment relier les points les plus proches (points sans séquence logique): l'approche "TAMPONS""

Laisser Un Message

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

20 − 1 =

IdGeo.fr - 1, allée Maurice Magre, 31770 Colomiers - 05 34 55 60 65