2 votos

Detectar automáticamente dónde desembocan los ríos, directamente en el mar o en otro río

Estoy usando este conjunto de datos de los ríos de Francia. Me gustaría distinguir automáticamente entre los ríos que desembocan directamente en el mar y los que desembocan en otro río y dibujar un mapa sólo con esos ríos. ¿Cómo puedo hacerlo?

Cada río de este conjunto de datos tiene un código SANDRE estándar y puede consultarse en línea ( ejemplo ), pero parece que no registran la información que necesito. No me importa tener que escribir código para hacerlo, pero me gustaría algo fiable (es decir, sin "conjeturas"). Por ejemplo, ¿hay alguna forma de saber si un punto final de un río está en otro río? Si es así, podría buscar ríos en los que ninguno de los dos extremos esté en un río. Sin embargo, por lo que sé, los shapefiles no almacenan si un vértice está "en" otra línea.

Estoy abierto a cualquier tipo de enfoque. Sin embargo, me gustaría utilizar este conjunto de datos porque creo que es probablemente el más exhaustivo (es un conjunto de datos del gobierno francés).

5voto

chhh Puntos 1154

Puede hacer una superposición (intersecciones/toques) de sus líneas fluviales con un polígono que represente el mar.

Antes de poder hacer esto, se necesita una capa poligonal que represente el mar. Lo mejor es utilizar datos para el mar creados por la misma institución de la que tienes tus ríos para que puedas estar seguro de que los conjuntos de datos coinciden. Esto es importante para no tener errores topológicos como ríos que no llegan al mar porque son demasiado cortos y no tocan la línea de costa (aunque sea por una fracción de milímetro).

Uno de estos casos es el del río Le Var que llega al Mediterráneo entre el aeropuerto de Niza y Saint-Laurent-du-Var. Pero como se puede ver en la siguiente captura de pantalla, combinando su conjunto de datos del río con los polígonos de OpenStreetMap para el Mediterráneo, hay un pequeño hueco de unos 30 metros (véase el rectángulo rojo) entre el punto final del río (línea azul oscura) y la costa (línea negra):

enter image description here

Como alternativa, cuando utilice cualquier otro polígono para el mar, que aplique un pequeño buffer a los polígonos del mar. Lo he intentado con una parte del Mediterráneo que limita con Francia utilizando los polígonos del mar que obtuve de OpenStreetMap . El tamaño del búfer debe ser lo suficientemente grande para evitar el problema mencionado anteriormente y lo suficientemente pequeño para no alcanzar las líneas de los ríos en el interior que de hecho no tocan la costa. Un valor de 100 metros podría ser un buen comienzo. En cualquier caso, compruebe sus datos en puntos de muestreo aleatorios para ver si se ajustan bien.

No te olvides de crear un índice espacial para ambas capas: ríos y mar/marino. Así que crear un índice espacial, haga clic derecho en la capa, Properties / Source tab y haga clic en Create spatial index . Eso ayuda a acelerar el tiempo de procesamiento. Asegúrese de descomprimir todos los datos antes de cargarlos en QGIS.

Cuando tenga los datos listos (capa de líneas fluviales, capa de polígonos marinos), es el momento de procesarlos:

Ejecutar Menu Vector / Data Management Tools / Join attributes by location , establezca los ríos como capa base y los polígonos del mar como capa de unión. Marque las casillas intersects y touches y luego ejecute la herramienta: se obtendrá una capa de copia de sus ríos, pero con nuevos atributos. Uno de ellos es el atributo id (precedido por el prefijo, si ha definido uno en la herramienta): contiene el identificador de la capa poligonal que toca o interseca. Así, si tiene un número ahí, sabrá que este segmento de río llega al mar.

enter image description here

Ahora puede utilizar esta salida para estilizar los ríos que desembocan en el mar de forma diferente a los otros que no llegan al mar. En la captura de pantalla de abajo, añadí una nueva capa de símbolos (símbolo verde más), la puse en Geometry generator / LineString y pegamos esta expresión:

if (
     "imp_fid" >0,
    $geometry,
    ''
)

imp_fid es el campo creado por la herramienta que contiene el id de la característica del polígono del mar que la línea toca o interseca: si está vacío, el río no tiene acceso al mar, si no está vacío, así >0 QGIS debería dibujar el río ( $geometry ), de lo contrario la salida debería estar vacía: '' .

Establece esta capa de símbolos con una línea azul más gruesa y oscura. La otra capa de símbolos tiene una línea negra estándar y fina: así se ve que las líneas azules son los ríos que llegan al mar:

enter image description here

Sin embargo, en sus datos sigue habiendo algunos casos extraños que son difíciles de evaluar en un proceso automático. Un ejemplo son las dos pequeñas líneas a pocos kilómetros al noroeste de La Ciotat, cerca de las coordenadas 5.564645,43.193170 (EPSG:4326). Debería reflexionar críticamente sobre lo que representan los datos que tiene y lo que debería considerarse "un río" - podría aplicar un criterio de longitud mínima para que una línea se considere "un río".

enter image description here

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