4 votos

Colocación automática de polígonos a partir del rastro

Dispongo de un shapefile con >300 puntos que corresponden a los puntos donde se realizaron parcelas de muestreo de vegetación a 10m de la carretera a ambos lados. Las parcelas tienen unas dimensiones de 20mx50m. La tabla de atributos tiene una fila para cada parcela y una columna que indica si la parcela se realizó en el lado izquierdo o derecho de la carretera. Necesito colocar un polígono de 20m medidos perpendicularmente a la carretera de dichas dimensiones, a ambos lados del punto GPS (como se muestra en la imagen inferior)

enter image description here

Tengo un shapefile de senderos topográficos del que extraje índices que tiene una columna de ángulos (que creo que debería ser útil) que espero utilizar para determinar el ángulo perpendicular para la colocación de polígonos. Las geometrías están perfectamente alineadas (shapefile de puntos y shapefile de líneas).

Points lie on the survey route, 20m perpendicular in both directions need to have survey plot polygons of 50mx20m (dark blue lines only cover river name)

He buscado una variedad de cosas en StackExchange y Google, pero esto es bastante único y complejo problema de geometría que creo que no se ha abordado antes. Soy consciente de que puedo crear un polígono para cada punto y luego moverlo manualmente, pero yo esperaba no hacerlo ya que en total habrá más de 600 polígonos. Estoy en QGIS 3.4.4 Madeira, Windows 10.

EDITAR

Cada punto (que representa dos parcelas de vegetación, una a cada lado) tiene una marca de tiempo, por lo que está claro qué dirección es hacia adelante a medida que se hace más tarde. A partir de esto, deberíamos poder determinar qué lado estaba a la derecha y cuál a la izquierda del topógrafo. Los polígonos deben ser paralelos a la ruta de reconocimiento (shapefile lineal).

0 votos

¿Cómo que en el lado izquierdo/derecho de la carretera? ¿Se refiere a carreteras de un solo sentido?

0 votos

Quiero decir en el sentido de la marcha. Para cada parcela (punto) tengo un sello de fecha y hora que indica la dirección de desplazamiento. Así que a medida que aumenta el tiempo podemos decir que el topógrafo se está moviendo hacia adelante y de esto podemos determinar izquierda o derecha. ¿Queda más claro?

0 votos

Ya veo. Para resolver este problema se puede implementar algún código python en forma de la acción de capa que generaría los rectángulos deseados.

4voto

ghotan Puntos 29

De este modo, obtendrá un rectángulo de 20 x 50 m a un lado del punto de medición, orientado hacia la siguiente medición.

single_sided_buffer(
  offset_curve(
    make_line(
      project($geometry, -25, azimuth(
                               $geometry, 
                               geometry(
                                get_feature_by_id('your_layer', $id+1)))) 
      , project($geometry, 25, azimuth(
                              $geometry, 
                              geometry(
                               get_feature_by_id('your_layer', $id+1)))))
  , 10) 
, 20)

Puedes crear dos rectángulos y combinarlos en uno.

union(
 single_sided_buffer(
  offset_curve(
   make_line(project($geometry, -25, azimuth($geometry, geometry(get_feature_by_id('your_layer', $id+1)))), project($geometry, 25, azimuth($geometry, geometry(get_feature_by_id('your_layer', $id+1))))), 10), 20),
 single_sided_buffer(
  offset_curve(
   make_line(project($geometry, -25, azimuth($geometry, geometry(get_feature_by_id('your_layer', $id+1)))), project($geometry, 25, azimuth($geometry, geometry(get_feature_by_id('your_layer', $id+1))))), -10), -20))

Notas:

  • make_line() crea una línea de 50m desde el punto de medición
  • offset_curve() desplaza la línea hacia un lado 10m.
  • single_sided_buffer() crea un buffer de 20m a partir de la línea de offset.

enter image description here

0 votos

Gracias, he intentado ejecutarlo pero recibo un error de sintaxis no válido exec(open('C:/Users/NICHOL~1/AppData/Local/Temp/tmpphpalusf.‌​py'.encode('utf-8'))‌​.read()) Traceback (most recent call last): File "C:\PROGRA~1\QGIS3~1.4\apps\Python37\lib\code.py", line 90, in runcode exec(code, self.locals) File "<input>", line 1, in <module> File "<string>", line 4 project($geometry, -25, azimuth( ^ SyntaxError: invalid syntax

0 votos

Parece que no le gustan los símbolos $, ¿es algo que se utiliza en pyQGIS 3? ¿Indica columna como en R?

0 votos

@Nebulloyd Estas son expresiones QGIS. Puedes utilizar Geometry by expression (Processing - Herramientas de geometría vectorial) o Geometry generator .

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