¿Dibujando el límite del conjunto de puntos usando QGIS?

9

Tengo un conjunto de puntos que me gustaría cambiar a un polígono.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Intenté el casco cóncavo pero no obtengo el polígono previsto como puedes ver a continuación,

ingrese la descripción de la imagen aquí

Y cuando uso la triangulación Denaulay, necesito eliminar los triángulos exteriores.

ingrese la descripción de la imagen aquí

¿Hay una manera eficiente de hacer lo mismo?

También probé el casco convexo.

ingrese la descripción de la imagen aquí

Stephen Jacob
fuente
¿Intentas Vector -> Herramientas de geoprocesamiento -> Casco (s) convexo (s) ... o Caja de herramientas de geoprocesamiento -> Herramientas de geometría vectorial -> Casco convexo?
Dmitry Baryshnikov
Sí, lo intenté. Sin embargo, pensé que esto no se aplica a la forma que necesito. Actualizaré la pregunta.
Stephen Jacob
3
¿tienes las líneas que se muestran en tu primera imagen o solo los puntos?
radouxju
1
Tengo una pregunta: ¿cuál es tu objetivo? ¿Qué representan los datos? río? la carretera ? Me temo que si tienes formas "S" o formas retorcidas, no funcionará, incluso con python ...
Keiko
2
@StephenJacob - ¿Cómo se ordenan sus puntos? Si tienen un orden en el sentido de las agujas del reloj o en sentido contrario, es posible convertir primero los puntos en líneas (p. Ej., Utilizando la herramienta Convertir puntos de SAGA en línea (s) ) y luego convertir las líneas en un polígono (p. Ej ., Herramienta Líneas a polígonos ).
Joseph

Respuestas:

5

Supongo que sabe qué puntos pertenecen a la "izquierda" o "derecha", porque de lo contrario hay muchas soluciones. Si es así, puede utilizar la triangulación delaunay seguida de una selección de los triángulos "centrales". Con este método, no es necesario tener los puntos en un orden específico. Todo lo que necesita considerar es el hecho de que los triángulos que necesita deben tocar al menos un punto de cada lado.

abrir tabla de atributos> seleccionar por expresión> "código" = 1

vector> herramienta de investigación> seleccionar por ubicación (nueva selección, intersección)

ingrese la descripción de la imagen aquí

abrir tabla de atributos> invertir la selección de los puntos (ctrl + R)

vector> herramienta de investigación> seleccionar por ubicación (eliminar de la selección, disjunto)

ingrese la descripción de la imagen aquí

vector> herramienta de geoprocesamiento> disolver

ingrese la descripción de la imagen aquí

radouxju
fuente
3

Tengo el mismo resultado que @radouxju.

Operaciones:

  1. Seleccione 1 polilínea [seleccionar al hacer clic]
  2. Actualice su tabla de polilínea y afecte un número a cada entidad [calculadora de campo]
  3. Seleccione los puntos que intersecan una polilínea [herramienta de consulta espacial]
  4. Actualice los puntos seleccionados por el valor de polilínea afectado previamente [calculadora de campo]
  5. Mantenga el punto de selección y seleccione los triángulos delaunay que intersecan estos puntos seleccionados [herramienta de consulta espacial]
    ingrese la descripción de la imagen aquí
    ingrese la descripción de la imagen aquí

  6. Invierta la selección de puntos o seleccione los puntos que se cruzan con la otra polilínea [selección por expresión] o [selección invertida]

  7. Elimine de la selección actual los triángulos delaunay que son disjuntos con los otros puntos [herramienta de consulta espacial]
    ingrese la descripción de la imagen aquí
    ingrese la descripción de la imagen aquí

  8. Combinar las características por selección [herramienta de geoprocesamiento> disolver]
    ingrese la descripción de la imagen aquí
    ingrese la descripción de la imagen aquí


IMPORTANTE : ¡DEBE tener las polilíneas para obtener este resultado!

Keiko
fuente
Gracias @Keiko, tu respuesta fue útil para interpretar la respuesta de radouxju
Stephen Jacob
De nada @StephenJacob! ¡Era solo trabajo en equipo! ;-)
Keiko
1

Si tiene experiencia con Python, puede usar la biblioteca Shapely y crear un Polígono a partir de los puntos en las dos líneas. Deberá decirle a Python cuáles son los puntos de inicio y finalización de ambas líneas.

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)

Aún mejor: también puedes usar geopandas para hacer esto. geopandas le permite guardar fácilmente en múltiples formatos, incluidos los archivos de forma

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')

Puede leer las geometrías de línea usando la función geopandas gpd.read_file ().

Orden de vértices poligonales en general SIG: en sentido horario o antihorario

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

RutgerH
fuente
¿Cómo convertir esto en un archivo de forma?
Stephen Jacob
1
Puedes usar varias herramientas pero soy fanático de las geopandas. Use gdf.to_file ('MyGeometries.shp', driver = 'ESRI Shapefile')
RutgerH