第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何沿給定線從柵格中提取價值概況?

如何沿給定線從柵格中提取價值概況?

滄海一幻覺 2023-01-04 16:20:35
如何在 Python 中沿著給定的 shapefile 線從柵格中提取值的配置文件?我正在努力尋找一種方法來從柵格 (geotiff) 中提取值的配置文件(例如地形配置文件)。庫Rasterio 有一種方法可以根據(jù)多邊形從柵格中裁剪/提取值,但我找不到線形文件的等效方法。scipy有一個基本方法,但它并不像 rasterio 可以提供的基于更高級別工具箱的方法那樣固有地保存地理信息。換句話說,我正在尋找與 QGIS 中的 Terrain Profile 工具相同的 Python 工具。
查看完整描述

2 回答

?
蕪湖不蕪

TA貢獻(xiàn)1796條經(jīng)驗 獲得超7個贊

這與提取多邊形有點不同,因為您想要按照觸摸的順序?qū)€觸摸的每個像素進(jìn)行采樣(多邊形方法不關(guān)心像素順序)。

看起來可以改用這種方法rasterio代替使用。geopandas給定使用或fiona作為對象從 shapefile 中讀取的一條線shapely,您可以使用端點導(dǎo)出一個新的等距投影,您可以dst_crsWarpedVRT中使用該投影并從中讀取像素值。看起來你需要根據(jù)你想要采樣的像素數(shù)來計算你的線的長度,這是WarpedVRT.

如果您的線不是端點之間的近似直線,則可能需要進(jìn)一步調(diào)整此方法。

如果您只想獲取線下的原始像素值,您應(yīng)該能夠為每條線使用遮罩rasterio或直接柵格化。對于線條,您可能想要使用all_touched=True。


查看完整回答
反對 回復(fù) 2023-01-04
?
哈士奇WWW

TA貢獻(xiàn)1799條經(jīng)驗 獲得超6個贊

我遇到了類似的問題,并找到了適合我的解決方案。該解決方案用于shapely對一條/多條線上的點進(jìn)行采樣,然后從 GeoTiff 訪問相應(yīng)的值,因此提取的配置文件遵循線的方向。這是我最終得到的方法:


def extract_along_line(xarr, line, n_samples=256):

    profile = []


    for i in range(n_samples):

        # get next point on the line

        point = line.interpolate(i / n_samples - 1., normalized=True)

        # access the nearest pixel in the xarray

        value = xarr.sel(x=point.x, y=point.y, method="nearest").data

        profile.append(value)

        

    return profile

這是一個使用數(shù)據(jù)庫中的數(shù)據(jù)的工作示例,copernicus-dem該線是接收到的圖塊的對角線:


import rioxarray

import shapely.geometry

import matplotlib.pyplot as plt


sample_tif = ('https://elevationeuwest.blob.core.windows.net/copernicus-dem/'

              'COP30_hh/Copernicus_DSM_COG_10_N35_00_E138_00_DEM.tif')


# Load xarray

tile = rioxarray.open_rasterio(sample_tif).squeeze()

# create a line (here its the diagonal of tile)

line = shapely.geometry.MultiLineString([[

            [tile.x[-1],tile.y[-1]],

            [tile.x[0], tile.y[0]]]])


# use the method from above to extract the profile

profile = extract_along_line(tile, line)

plt.plot(profile)

plt.show()


查看完整回答
反對 回復(fù) 2023-01-04
  • 2 回答
  • 0 關(guān)注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號