Mais

Como extrair valores de elevação nos pontos inicial e final da linha de um DEM?


Eu sou novo em toda a experiência gis e preciso da sua ajuda para trabalhar com o QGIS.

Eu tenho:

  • Raster DEM com alturas (3d)
  • arquivo de forma de linha que contém os rios (2d)

Eu preciso de: alturas para "início" e "fim" nas linhas (para obtê-los em 3d), em seguida, compare essas alturas com a "direção do fluxo" das linhas

qgis-help realmente não me ajuda. Tentei pesquisar no google, nada útil encontrado. Tenho certeza de que pode ser uma "ferramenta padrão" muito simples que pode fazer o que eu quero. No entanto, ainda não o encontrei.

Editar:

bem, estou procurando uma solução, não importa de que maneira. não tenho nenhuma experiência com python.

Eu estava trabalhando nesse problema e acho que estou quase pronto, mas parece haver um problema:

Eu extraí os nós das linhas, eles pegaram as alturas da dem-grade. Eu até consegui adicionar os valores dos pontos de volta às linhas, mas quando eu verifico os valores, a "altura mínima" (ou máxima) nem sempre tem as coordenadas xey adequadas do ponto.

exemplo: existe uma linha (colunas: nome, id, start_x, start_y, end_x, end_y). importei os valores dos pontos (coordenadas x, y, z) para a linha. obteve 6 novas colunas na tabela: min_x, min_y, min_z, max_x, max_y, max_z

agora as coordenadas mínimas e máximas estão misturadas e não se comparam às dos pontos.

meus pensamentos agora são:

  • eu excluo o min_x, min_y, max_x, max_y
  • renomeie "max_z" e "min_z" para "para cima" e "para baixo"
  • de alguma forma eu preciso obter o up_x, up_y e down_x, down_y dos pontos. talvez haja uma maneira de fazer isso na calculadora de campo como: (para up_x na tabela "linhas") valor = "x" DE "pontos" WHERE "up.lines" = "z.points"

não sei se isso pode funcionar no qgis ou como o código deve se parecer. talvez haja uma maneira de gerenciar isso em python, mas como eu disse, não tenho a menor ideia sobre python.


Uma das maneiras mais fáceis de fazer isso é com um banco de dados espacial, como PostGIS. Carregue seu raster no banco de dados usando raster2pgsql (que é instalado com PostGIS) e então carregue seus rios com shp2pgsql (também instalado com PostGIS).

Em seguida, você pode executar uma consulta simples que mostra o modelo de elevação nos pontos finais de todas as suas linhas:

selecione st_value (r.rast, st_startpoint (geom)) como a, st_value (s.rast, st_endpoint (geom)) como b de rios, dem r, dem s onde st_contains (st_convexhull (r.rast), st_startpoint (geom) ) e st_contains (st_convexhull (s.rast), st_endpoint (geom));

Nomeei o DEM duas vezes na cláusula from porque as extremidades da linha podem estar contidas por dois blocos diferentes no raster e cada bloco terá que ser correspondido de forma independente. É por isso que existem duas chamadas st_contains.

A grande vantagem do PostGIS é que você pode automatizar esse tipo de processamento em milhões de registros com um mínimo de esforço.

Observe que isso funciona se a geometria da linha for LineString. Se forem MultiLineStrings, você terá que refinar a consulta ou usar st_dump para transformá-los em LineStrings.


Se você está procurando apenas obter a localização do ponto mais baixo ou mais alto da linha, é assim que eu faria. Configure seu arquivo de ponto e obtenha valores z do dem. Extraia sua tabela de atributos para o Excel e use uma pesquisa para combinar seu valor z max / min (o que você estiver procurando) para cada linha com os valores xey apropriados. Você pode então salvar seu arquivo como um csv e usar uma junção para adicionar os atributos às suas linhas.

É importante notar que você precisará ter o id de linha incluído nos atributos do arquivo de forma de ponto para que possa obter seus valores máx. / Mínimo do Excel e assim você pode juntar seu csv ao arquivo de forma de linha.


Assista o vídeo: Jak nie dać zrobić się w ciula przy likwidacji szkody OC. Bandyckie zagrania ubezpieczalni (Outubro 2021).