Dessiner les limites d'un ensemble de points à l'aide de QGIS?

9

J'ai un ensemble de points que je voudrais changer en polygone.

entrez la description de l'image ici

entrez la description de l'image ici

J'ai essayé la coque concave mais je n'obtiens pas le polygone voulu comme vous pouvez le voir ci-dessous,

entrez la description de l'image ici

Et lorsque j'utilise la triangulation Denaulay, je dois supprimer les triangles extérieurs.

entrez la description de l'image ici

Existe-t-il un moyen efficace de faire de même?

J'ai également essayé la coque convexe.

entrez la description de l'image ici

Stephen Jacob
la source
Essayez-vous Vecteur -> Outils de géotraitement -> Coque (s) convexe (s) ... ou Boîte à outils de géotraitement -> Outils de géométrie vectorielle -> Coque convexe?
Dmitry Baryshnikov
Oui, j'ai essayé ça. Cependant, je pensais que cela ne s'applique pas à la forme dont j'ai besoin. Je mettrai à jour la question.
Stephen Jacob
3
avez-vous les lignes montrées sur votre première image ou seulement les points?
radouxju
1
J'ai une question: quel est votre objectif? que représentent les données? rivière ? route? J'ai peur que si vous avez des formes en "S" ou des formes torsadées, cela ne fonctionnera pas, même avec du python ...
Keiko
2
@StephenJacob - Comment vos points sont-ils commandés? S'ils ont un ordre dans le sens horaire ou anti-horaire, il est possible de convertir d'abord vos points en lignes (par exemple en utilisant l' outil Convertir les points en ligne (s) de SAGA ), puis de convertir les lignes en poygon (par exemple, l' outil Lignes en polygones ).
Joseph

Réponses:

5

Je suppose que vous savez quels points appartiennent à la "gauche" ou à la "droite", car sinon, il existe de nombreuses solutions. Si c'est le cas, vous pouvez utiliser la triangulation delaunay suivie d'une sélection des triangles "centraux". Avec cette méthode, pas besoin d'avoir les points dans un ordre précis. Tout ce que vous devez considérer est le fait que les triangles dont vous avez besoin doivent toucher au moins un point de chaque côté.

ouvrir la table attributaire> sélectionner par expression> "code" = 1

vecteur> outil de recherche> sélectionner par emplacement (nouvelle sélection, intersection)

entrez la description de l'image ici

ouvrir la table des attributs> inverser la sélection des points (ctrl + R)

vecteur> outil de recherche> sélectionner par emplacement (supprimer de la sélection, disjoint)

entrez la description de l'image ici

vecteur> outil de géotraitement> dissoudre

entrez la description de l'image ici

radouxju
la source
3

J'ai le même résultat que @radouxju.

Opérations:

  1. Sélectionnez 1 polyligne [sélectionnez en cliquant]
  2. Mettez à jour votre table de polyligne et affectez un nombre à chaque entité [calculatrice de champ]
  3. Sélectionnez les points qui coupent une polyligne [outil de requête spatiale]
  4. Mettre à jour les points sélectionnés par la valeur de la polyligne précédemment affectée [calculatrice de champ]
  5. Gardez le point de sélection et sélectionnez les triangles delaunay qui coupent ces points sélectionnés [outil de requête spatiale]
    entrez la description de l'image ici
    entrez la description de l'image ici

  6. Inversez la sélection de points ou sélectionnez les points qui coupent l'autre polyligne [sélection par expression] ou [inversion de sélection]

  7. Supprimer de la sélection actuelle les triangles delaunay qui sont disjoints avec les autres points [outil de requête spatiale]
    entrez la description de l'image ici
    entrez la description de l'image ici

  8. Fusionner les entités par sélection [outil de géotraitement> dissoudre]
    entrez la description de l'image ici
    entrez la description de l'image ici


IMPORTANT : vous DEVEZ avoir les polylignes pour obtenir ce résultat!

Keiko
la source
Merci @Keiko, votre réponse a été utile pour interpréter la réponse de radouxju
Stephen Jacob
Vous êtes les bienvenus @StephenJacob! C'était juste du travail d'équipe! ;-)
Keiko
1

Si vous avez de l'expérience avec python, vous pouvez utiliser la bibliothèque Shapely et créer un polygone à partir des points des deux lignes. Vous devrez dire à python quels sont les points de début et de fin des deux lignes.

from shapely.geometry import Point, Polygon, LineString
import geopandas as gpd
import pandas as pd
line1 = [(1,1),(2,1.2),(3,1)]
line2 = [(1,2),(2,2.2),(3,2)]
# you need to reverse the order of one line to make it a polygon
line2reverse = list(reversed(line2))
polgonList2 = line1 + line2reverse
Polygon(polgonList2)

Encore mieux: vous pouvez également utiliser des géopandas pour ce faire. les géopandas vous permettent d'enregistrer facilement dans plusieurs formats, y compris les fichiers de formes

d = {'identifier' : [1, 2],
 'name' : ["Netherlands", "Germany"],
 "line1": [[(1,1),(2,1.2),(3,1)], [(1,1),(2,1.2),(3,1)]],
 "line2": [[(1.1,2.1),(2.1,2.3),(3.1,2.2)],[(1,2),(2,2.2),(3,2)]]
}

df = pd.DataFrame(d)
def makePolygon(row):
    line2reverse = list(reversed(row["line2"]))
    return Polygon(line1+line2reverse)    
geometries = []

for index, row in df.iterrows():
    geometries.append(makePolygon(row))
crs = {'init': 'epsg:4326'} 
gdf = gpd.GeoDataFrame(df, crs=crs, geometry=geometries)
gdf.to_file('MyGeometries.shp', driver='ESRI Shapefile')

vous pouvez lire les géométries de ligne en utilisant la fonction geopandas gpd.read_file ().

Ordre des sommets des polygones en général SIG: dans le sens horaire ou antihoraire

https://nbviewer.jupyter.org/gist/rutgerhofste/b01c17aa6851ea577f10c21a4c3717bc

RutgerH
la source
Comment convertir cela en un fichier de forme?
Stephen Jacob
1
Vous pouvez utiliser plusieurs outils mais je suis un fan des géopandas. Utilisez gdf.to_file ('MyGeometries.shp', driver = 'ESRI Shapefile')
RutgerH