Identifiez les points d'un fichier de formes qui n'ont aucun autre point à moins de x km avec QGIS

11

C'est probablement une question naïve mais je me bats en tant que nouvel utilisateur de QGIS.

J'ai un très grand fichier de formes (275 000 points, mais je peux le diviser en 10 sous-régions si nécessaire pour un traitement plus rapide).

Je veux identifier tous les points qui n'ont pas d'autre point à moins de 200 mètres, puis coder chacun de ces points avec la valeur "unique" dans un champ du fichier.

Pour tous les autres points qui font partie des clusters locaux, je veux ensuite les coder comme "cluster".

Après avoir atteint cet objectif, je souhaite ensuite sélectionner un seul pour chaque cluster sur une base aléatoire à conserver dans l'ensemble de données, en rejetant les autres.

Actuellement, je ne parviens pas à atteindre l'étape 1, donc toute aide serait la bienvenue.

Leigh Bettenay
la source

Réponses:

0

Vous pouvez également essayer une auto-jointure en utilisant le plug- in NNJoin dans QGIS.

Pour chaque entité de la couche en entrée, elle trouvera l'entité la plus proche (en excluant elle-même en cas d'auto-jointure) et inclura la distance et tous les attributs de l'entité la plus proche dans le jeu de données généré. Cela prendrait un certain temps pour votre jeu de données (j'ai essayé avec un jeu de données ponctuel avec environ 175000 fonctionnalités, et cela prend quelques minutes ...).

Håvard Tveite
la source
9

Vous pouvez utiliser Vector> Outils d'analyse> Matrice de distance et une jointure pour réaliser ce que vous demandez.

J'utiliserai la couche d'aéroport de données d'échantillons qgis pour illustrer. Ceci est un petit ensemble de données, donc je ne sais pas comment cela se passera avec un fichier de formes de 275 000 points.

1. Créez une matrice de distance en utilisant votre couche comme destination et cible.

N'oubliez pas de cocher "Utiliser uniquement les points cibles les plus proches (k)" et de le régler sur 1.

entrez la description de l'image ici

2. Ouvrez le CSV avec ajouter un calque de texte délimité

Choisissez "Virgule" comme délimiteur et définissez la définition de la géométrie sur Aucune géométrie

entrez la description de l'image ici

3. Créez une jointure dans la couche d'origine avec la table nouvellement créée

entrez la description de l'image ici

4. Utilisez la calculatrice de champs pour remplir un champ avec les valeurs souhaitées

En raison de la jointure, nous avons maintenant accès aux valeurs de la table de distance à partir de la table d'attributs des aéroports, il est donc assez facile de créer un nouveau champ et de le remplir avec des valeurs "groupées" et "uniques" en fonction des valeurs de la matrice de distance . en raison de mes données d'exemple, j'ai utilisé la valeur 1200000 (1200 km), vous devez l'adapter à votre cas (200).

entrez la description de l'image ici

À la fin, votre couche devrait avoir un nouveau champ appelé point_type avec différentes valeurs en fonction de la distance minimale au point le plus proche.

entrez la description de l'image ici

Alexandre Neto
la source
Cela ressemble à une solution élégante. Cependant j'ai une complication. Je sais qu'il y a des points qui ont des emplacements IDENTIQUES (ceux-ci résultent de synonymes de noms lors de la capture de données d'origine). Dans un cas, j'en ai identifié 3 sur le même point. Je pense que votre solution suppose (raisonnablement) que tous les points sont situés de manière unique. Existe-t-il un moyen évident de filtrer ma couverture pour éliminer d'abord les points au même endroit?
Leigh Bettenay
@LeighBettenay Si cette réponse répond à votre question d'origine, je pense que vous devriez l'accepter (coche verte), pour récompenser l'effort des répondeurs, et rechercher / poser votre exigence supplémentaire en tant que nouvelle question. +1 pour une excellente première question!
PolyGeo
@PolyGeo Désolé, je suis tout nouveau sur ce forum et je ne connais pas le protocole. Heureux de "coche verte" une merveilleuse réponse mais malheureusement ne sais pas comment !!
Leigh Bettenay
Cliquez simplement sur la coche grise sous le vote de la question (coin gauche de la question). Merci
Alexandre Neto