Me gustaría crear polígonos a lo largo de una línea para usarlos para AtlasCreator en el siguiente paso.
ArcMap tiene una herramienta llamada Strip Index Index Features .
Con esta herramienta puedo elegir la altura y el ancho de mis polígonos (por ejemplo, 8 km x 4 km) y producirlos / rotarlos a lo largo de la línea automáticamente.
Uno de los atributos generados de cada polígono es el ángulo de rotación que necesito para rotar mis flechas norte en Atlas Generator después.
¿Alguien tiene una idea de cómo resolver esta tarea en QGIS / con pyQGIS? Los algoritmos Grass o SAGA o un modelo de caja de herramientas de prossessing que podría usarse dentro de un complemento personalizado también estaría bien;) Edit1: necesito no solo las extensiones de impresión sino también los polígonos en sí, ya que quiero imprimir un mapa con todos los polígonos / extensiones como algún tipo de mapa general.
Edit2: estoy ofreciendo una recompensa ya que todavía estoy buscando una solución PyQGIS que pueda usarse en un complemento QGIS sin la necesidad de instalar un software aparte de QGIS (sin RDBMS como PostGIS / Oracle)
Respuestas:
¡Interesante pregunta! Es algo que quería probar yo mismo, así que probé.
Puede hacer esto en PostGRES / POSTGIS con una función que genera un conjunto de polígonos.
En mi caso, tengo una tabla con una característica (una MULTILINESTRING) que representa una línea de ferrocarril. Necesita usar un CRS en metros, estoy usando osgb (27700). He hecho 4km x 2km 'páginas'.
Aquí puede ver el resultado ... lo verde es la red de carreteras, sujeta a un búfer de 1 km alrededor del ferrocarril, que corresponde a la altura de los polígonos muy bien.
Aquí está la función ...
Usando esta función
Aquí hay un ejemplo; Páginas de 4 km x 2 km, epsg: 27700 y superposición del 10%
Después de ejecutar esto, puede exportar desde PgAdminIII a un archivo csv. Puede importar esto a QGIS, pero es posible que necesite configurar el CRS manualmente para la capa: QGIS no usa el SRID en EWKT para configurar el CRS de capa para usted: /
Agregar atributo de demora
Probablemente esto sea más fácil de hacer en postgis, se puede hacer en expresiones QGIS pero necesitará escribir algo de código. Algo como esto...
Advertencias
Está un poco pirateado, y solo tuvo la oportunidad de probar en un conjunto de datos.
No estoy 100% seguro de qué dos vértices necesitará elegir en la actualización de ese atributo de demora
query
... podría necesitar experimentar.Debo confesar que no tengo idea de por qué necesito hacer una fórmula tan complicada para rotar el polígono para que coincida con el segmento de línea actual. Pensé que podría usar la salida de ST_Azimuth () en ST_Rotate (), pero aparentemente no.
fuente
Hay diferentes soluciones. Y esto puede funcionar con polilíneas simples y múltiples entidades seleccionadas
diagrama de bloques:
Parámetros
bucle en OrderNodes
crea tu primer punto como ancla
para cada vértice agréguelo en dict x, y, id y calcule un vector
Puede cambiar esta propuesta si no es realmente clara o no comenta.
fuente
Respuesta de Steven Kays en pyqgis. Simplemente seleccione las líneas en su capa antes de ejecutar el script. La secuencia de comandos no admite la combinación de líneas, por lo que no puede funcionar en la capa con multilínea
fuente
Las dos respuestas (en el momento de la publicación) son ingeniosas y están bien explicadas. Sin embargo, también existe una solución MUY simple pero efectiva para esto (suponiendo que acepte todos sus mapas alineados con el Norte hacia arriba de la manera tradicional, en lugar de una dirección aleatoria del Norte basada en el río). Si quieres rotaciones, es posible pero un poco más complejo (ver abajo).
Primero eche un vistazo a mi publicación aquí . Esto le proporciona una guía práctica para crear coberturas de mapas para Atlas. El método que desea es una adaptación de 'Workflow 2' en el tutorial. Divide tu entidad lineal por vértices o longitud y amortigua las entidades por cualquier cantidad. La cantidad de búfer dictará parcialmente la superposición (pero ver más abajo), pero lo más importante, crea una función con un área. Puede usar cualquier cantidad de complementos para dividir las líneas, pero GRASS v.split.length y v.split.vert son buenas opciones (disponibles en Processing Toolbox).
Una vez que haya habilitado Atlas Generation en Map Composer y haya seleccionado su capa almacenada, vuelva a la pestaña de elementos y seleccione su objeto de mapa. Marque 'Controlado por Atlas', y en su caso de uso, optaría por la función Margen alrededor. Esto controlará su superposición entre mapas (alternativamente, puede preferir la escala fija).
Puede obtener una vista previa de su Atlas utilizando el botón Vista previa del Atlas en la barra de herramientas superior del compositor y ver cuántas páginas producirá. Tenga en cuenta que puede elegir exportar todas las páginas en un solo PDF o como archivos separados.
Para que el mapa gire a lo largo de la línea, hay un campo de rotación en las propiedades del elemento del Compositor de mapas. Deberá establecer una expresión (use el pequeño botón a la derecha del cuadro de rotación). Seleccione variable como su opción y luego Editar. Aparecerá un generador de expresiones y allí podrá acceder a la geometría o los campos de las características del atlas. Luego puede construir un expreso para rotar el mapa de acuerdo con la rotación de las entidades (puede calcular la demora utilizando los puntos de inicio y final de cada segmento de línea y un poco de trigonometría). Repita el mismo proceso para rotar su flecha Norte (usando la misma expresión o variable calculada previamente).
fuente