6 votos

Agrandar un polígono sin cambiar su forma o posición

Tengo un archivo de forma de polígono único (EPSG: 3044) que quiero ampliar usando QGIS 2.18.16. Intenté usar el plugin de transformación afín vectorial, pero cada vez que intento cambiar el tamaño del polígono, toda la capa cambia de posición y forma. ¿Hay alguna herramienta en QGIS donde pueda hacer esta tarea o es posible con el plugin de transformación afín y simplemente no puedo encontrar los valores correctos?

Lo que tengo: Algunos puntos csv y un borde de país. Los puntos no tienen la precisión posicional correcta. Por lo tanto, quiero ampliar el borde del país para que todos los puntos quepan en el polígono.

Lo que obtengo cuando cambio la escala X e Y de 1,0 a 2,0: introduzca aquí la descripción de la imagen

0 votos

El almacenamiento intermedio tiene la desventaja de producir esquinas redondeadas, por lo tanto, optaría por extraer el polígono deseado de la capa, transformarlo / agrandarlo y luego pegarlo de nuevo. ¿Se asume que hay más de una característica en su capa?

0 votos

Intenté hacer un buffer y tienes razón... el resultado dio esquinas redondeadas que no quiero. La capa consta solo de un polígono que quiero agrandar, simplemente no sé cómo hacerlo.

0 votos

La herramienta de transformación de la caja de herramientas de GRASS-GIS es bastante autoexplicativa. ¿Qué sucede cuando utilizas esa?

12voto

LamNS Puntos 21

Tanto GRASS (como señala Erik Lohmann) como SAGA tienen herramientas que pueden lograr esto. He logrado esto en el pasado usando la herramienta SAGA > Vector General > Transformar capa vectorial.

  1. Para evitar que tu forma "se desplace", primero necesitarás derivar el centroide. Ejecuta Centroide, utilizando como entrada capa_poligonal. Aquí tienes un ejemplo, con el centroide etiquetado usando la expresión x($geometry)||' '||y($geometry).

polígono con centroide

  1. Ejecuta Transformar capa vectorial:

    • Formas = capa_poligonal
    • Factor de Escala X/Y = el coeficiente por el cual quieres agrandar. En este ejemplo, he especificado un factor de escala de 2 para ambos, lo que significa que mi salida será el doble del tamaño de la entrada.
    • Para los parámetros X e Y, introduce las coordenadas del centroide. Estos valores actúan como los puntos de anclaje desde los cuales se escalara tu entrada.

diálogo de transformación

Resultado de la forma anterior, con el centroide de la nueva forma visible:

polígono transformado

1 votos

¡La herramienta SAGA, con la ayuda de los centroides, hizo el trabajo! ¡Gracias!

0 votos

¿Se puede adaptar este enfoque para procesamiento por lotes, por ejemplo si tuvieras una capa con cientos de polígonos a los que quisieras aplicar esto?

0 votos

¡Claro que sí! Simplemente envuelve el proceso de transformación del centroide en un modelo y luego procesa el modelo por lotes. También cabe destacar que desde mi respuesta original, la versión más reciente de QGIS incluye una herramienta de transformación afín integrada, y puede aceptar anulaciones definidas por datos, por lo que podrías calcular el centroide e insertar esos valores para la traducción.

2voto

mmattke Puntos 611

Acabo de tener el mismo problema, y resulta que geopandas permite hacer precisamente lo que necesitaba (es decir, reducir un polígono sin cambiar su centroide) https://geopandas.org/en/stable/docs/reference/api/geopandas.GeoSeries.scale.html

Se ve algo así:

import geopandas as gpd
polygon = 'yourpolygon.shp'

polygon_shrunk = gpd.read_file(polygon)
polygon_shrunk = temp.scale(x=0.8, y=0.8, origin='center')
polygon_shrunk.to_file('path_to_shrunk_polygon.shp')

1 votos

Esta es la mejor alternativa para mí. Sin embargo, este código no funcionó para mí. Escribí mi propio código: importar geopandas de geopandas importar GeoSeries de shapely.geometry importar Polígono polígono = geopandas.read_file('2021_sv_peanut_plot_boundary.shp') polígono_reducido = polígono.escala(0.8,0.8,origen='centro') polígono_reducido.to_file('2021_sv_peanut_plot_boundary_resized‌​.shp')

1voto

Paul Childs Puntos 111

Parece que tienes objetivos muy conflictivos y no puedo permitir que esta pregunta se quede así como está.

Dices que no quieres cambiar la forma y que no quieres esquinas redondas, pero no dices por qué.

La respuesta anterior logrará lo que estás intentando hacer pero no será adecuada para tu problema subyacente.

Dices que tus puntos no son muy precisos. ¿Se vuelven más inexactos cuanto más lejos están de Alemania? ¿Y lo hacen de forma lineal? ¿Y en una dirección fija radialmente hacia afuera? No puedo imaginar que esto sea nunca el caso y dado que es la única razón por la que quisieras agrandar tu forma con una expansión afín, es seguro decir que no deberías estar realizando una expansión afín para ajustar tus puntos.

Por ejemplo, echa un vistazo al polígono rosa y verde de la respuesta aceptada. En una sección sus límites se tocan. Una expansión afín no proporciona ninguna ventaja al poder incluir puntos inexactos aquí. ¿Imagina qué pasaría con Sylt con una expansión afín? Se movería y aunque pueda capturar algunos puntos inexactos en la costa lejos de Alemania, excluiría puntos en el lado continental de la isla, si no potencialmente excluiría todo.

Si, sin embargo, tus puntos inexactos tienen un error que no está correlacionado con su ubicación, entonces lo que QUIERES es un buffer. Sí, dará bordes redondeados y sí, cambiará la forma, pero si quieres comprobar si los puntos están lo suficientemente cerca, ESA es la operación que quieres.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X