- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
更新
我尝试关注this tutorial
但我不知道如何使用 GDAL 导出新的 tiff 图像坡度/坡向?
完整代码:
from __future__ import division
from osgeo import gdal
from matplotlib.colors import ListedColormap
from matplotlib import colors
import sys
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import math
filename = 'dem.tif'
def getResolution(rasterfn):
raster = gdal.Open(rasterfn)
geotransform = raster.GetGeoTransform()
res = {"east-west": abs(geotransform[1]),
"north-south": abs(geotransform[5])}
return res
def raster2array(rasterfn):
raster = gdal.Open(rasterfn)
band = raster.GetRasterBand(1)
return band.ReadAsArray()
def getNoDataValue(rasterfn):
raster = gdal.Open(rasterfn)
band = raster.GetRasterBand(1)
return band.GetNoDataValue()
data_array = raster2array(filename)
nodataval = getNoDataValue(filename)
resolution = getResolution(filename)
print(resolution)
print(nodataval)
print(type(data_array))
print(data_array.shape)
num_rows = data_array.shape[0]
num_cols = data_array.shape[1]
slope_array = np.ones_like(data_array) * nodataval
aspect_array = np.ones_like(data_array) * nodataval
for i in range(1, num_rows - 1):
for j in range(1, num_cols - 1):
a = data_array[i - 1][j - 1]
b = data_array[i - 1][j]
c = data_array[i - 1][j + 1]
d = data_array[i][j - 1]
e = data_array[i][j]
f = data_array[i][j + 1]
g = data_array[i + 1][j - 1]
h = data_array[i + 1][j]
q = data_array[i + 1][j + 1]
vals = [a, b, c, d, e, f, g, h, q]
if nodataval in vals:
all_present = False
else:
all_present = True
if all_present == True:
dz_dx = (c + (2 * f) + q - a - (2 * d) - g) / (8 * resolution['east-west'])
dz_dy = (g + (2 * h) + q - a - (2 * b) - c) / (8 * resolution['north-south'])
dz_dx_sq = math.pow(dz_dx, 2)
dz_dy_sq = math.pow(dz_dy, 2)
rise_run = math.sqrt(dz_dx_sq + dz_dy_sq)
slope_array[i][j] = math.atan(rise_run) * 57.29578
aspect = math.atan2(dz_dy, (-1 * dz_dx)) * 57.29578
if aspect < 0:
aspect_array[i][j] = 90 - aspect
elif aspect > 90:
aspect_array[i][j] = 360 - aspect + 90
else:
aspect_array[i][j] = 90 - aspect
hist, bins = np.histogram(slope_array, bins=100, range=(0, np.amax(slope_array)))
width = 0.7 * (bins[1] - bins[0])
center = (bins[:-1] + bins[1:]) / 2
plt.bar(center, hist, align='center', width=width)
plt.xlabel('Slope (degrees)')
plt.ylabel('Frequency')
plt.show()
color_map = ListedColormap(['white', 'darkgreen', 'green', 'limegreen', 'lime',
'greenyellow', 'yellow', 'gold',
'orange', 'orangered', 'red'])
# range begins at negative value so that missing values are white
color_bounds = list(range(-3, math.ceil(np.amax(slope_array)), 1))
color_norm = colors.BoundaryNorm(color_bounds, color_map.N)
#Create the plot and colorbar
img = plt.imshow(slope_array, cmap = color_map, norm = color_norm)
cbar = plt.colorbar(img, cmap = color_map, norm = color_norm,
boundaries = color_bounds, ticks = color_bounds)
#Show the visualization
plt.axis('off')
plt.title("Slope (degrees)")
plt.show()
plt.close()
第一次尝试导出我按照这个tutorial ,但斜率不正确与原来相比有较低的度数(使用gis程序)
import gdal, ogr, os, osr
import numpy as np
def array2raster(newRasterfn,rasterOrigin,pixelWidth,pixelHeight,array):
cols = array.shape[1]
rows = array.shape[0]
originX = rasterOrigin[0]
originY = rasterOrigin[1]
driver = gdal.GetDriverByName('GTiff')
outRaster = driver.Create(newRasterfn, cols, rows, 1, gdal.GDT_Byte)
outRaster.SetGeoTransform((originX, pixelWidth, 0, originY, 0, pixelHeight))
outband = outRaster.GetRasterBand(1)
outband.WriteArray(array)
outRasterSRS = osr.SpatialReference()
outRasterSRS.ImportFromEPSG(4326)
outRaster.SetProjection(outRasterSRS.ExportToWkt())
outband.FlushCache()
def main(newRasterfn,rasterOrigin,pixelWidth,pixelHeight,array):
reversed_arr = slope_array # reverse array so the tif looks like the array
array2raster(newRasterfn,rasterOrigin,pixelWidth,pixelHeight,reversed_arr) # convert array to raster
if __name__ == "__main__":
rasterOrigin = (-123.25745,45.43013)
pixelWidth = 10
pixelHeight = 10
newRasterfn = 'test.tif'
array = slope_array
main(newRasterfn,rasterOrigin,pixelWidth,pixelHeight,array)
第二次试验我遵循这个quest但我不接受一些导出
def array_to_raster(slope_array):
"""Array > Raster
Save a raster from a C order array.
:param array: ndarray
"""
dst_filename = 'xxx.tiff'
x_pixels = num_rows # number of pixels in x
y_pixels = num_cols # number of pixels in y
driver = gdal.GetDriverByName('GTiff')
dataset = driver.Create(
dst_filename,
x_pixels,
y_pixels,
1,
gdal.GDT_Float32, )
dataset.GetRasterBand(1).WriteArray(array)
dataset.FlushCache() # Write to disk.
return dataset, dataset.GetRasterBand(1)
任何想法
最佳答案
该错误准确地说明了问题所在。您正在尝试将 int
类型乘以 NoneType
(无)。最可能的情况是 nodataval
为 None,这是因为文件名的第一个栅格波段的 NoDataValue 未定义。您的 print(nodataval) 命令应该证明这一点。
请记住,打印 None 不会显示为字符串“None”。它显示为空白或无字符。
您的编辑显示 nodataval 为 None。
关于python - 使用 gdal 将数组转换为 tiff 光栅图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39835794/
在我们用 ASP .NET 构建的 Web 应用程序中,需要允许用户查看 TIFF 图像文件,但不能打印、保存或复制这些文档。我们了解用户可能会打印屏幕,因此没有任何解决方案是 100% 万无一失的。
我有存储 TIFF 图像的旧 Eastman/eiStream/OpenText 文档库。 部分 TIFF 带有注释,注释存储在 TIFF 头中;这些我可以找到 TIFF 标题布局的规范和注释本身的布
并非所有图像阅读器都支持 BigTIFF,我想根据文件的 TIFF 格式识别文件。如何确定现有 tiff 文件是以标准 TIFF 格式编写的,还是使用 BigTIFF 格式编写的? 最佳答案 pyth
我使用 FreeImage 处理多页 TIFF 文件,有时我在 FIBITMAP 中有一个 TIFF 页面,我需要知道它的压缩情况。知道如何做到这一点吗? 最佳答案 FreeImage 没有内置函数来
我在目录 c:\temp 中有 600 个 TIFF 文件。 文件名如下: 001_1.tif, 001_2.tif, 001_3.tif 002_1.tif, 002_2.tif, 002_3.ti
我正在使用 netbeans 平台用 java 制作 DesktopApp。在我的应用程序中,我使用 16 位、tiff、灰度图像并对该图像进行处理。现在,我想使用 16 位、tiff、灰度图像(或
在我的场景中,我有 3 个或更多的多页 tiff 图像,我需要将它们合并成一个 tiff 图像。 下面是我试过的代码。它合并到单个 tiff 图像中,但仅与所有 tiff 图像的第一页合并。 priv
我想在选定的点添加图像的温度数据。它是否有任何预定义的属性,或者我们是否可以在 Tiff 文件中创建自定义/私钥来存储图像的温度数据。 回答: 使用 TIFF 库文档在 TIFF 文件中创建您自己的自
我已经编写了多个程序变体。该程序的目的是将“任何文件类型”转换为该文件的 TIFF 图像表示形式,就像使用打印机打印一样。 我目前正在使用我向其发送文件的第三方打印机驱动程序,它输出一个 TIFF 图
我在 Windows 7 32/64 位上使用 VS2008。 我正在尝试使用 IPP 处理 tiff 图像。我做了一些搜索,但没有发现英特尔 IPP 加载 tiff 图像的任何可能性。所以我使用 l
这是我用来从输入元素加载文件的 JavaScript 代码。图片格式包括jpeg、png、tiff。 $(document).ready(function() { FileDetails = fu
我正在使用 c++ JUCE 库学习 gui 编程。该库支持图像文件格式(png、jpg)。但我想了解如何使用其他文件格式,例如 tiff。 在谷歌之后我得到了 libtiff。 我的问题是显示它的准
我正在使用 urlmon.dll 中的 FindMimeFromData 来嗅探上传文件的 MIME 类型。根据MIME Type Detection in Internet Explorer , i
我发现,通过谷歌,很多人问同样的问题,但没有解决方案。 Python 图像库 (PIL) 具有用于单步执行现有多页 TIFF 的工具,但没有创建它们的工具。 库有望在 Windows 上可用,适用于
我正在尝试使用 iText 7.1.1 将 TIFF 图像转换为具有多页的 PDF 文件。感谢那些让我开始阅读这篇文章的人 Create PDF from TIFF image using iText
在本节中,我将头文件添加到 tiff 文件的顶部。 echo "/CourierLatin1 findfont 8 scalefont setfont" >>${PS} echo "40 2 move
对于 OCR 引擎,我需要为 OCR 引擎提供带有 CCITT4 压缩的 TIFF 文件。我们的扫描仪输出 JPEG 压缩的 TIFF 文件。我想用 C# 转换这些文件,使用 System.Drawi
我有 5 个单页 tiff 图像。我想将所有这 5 张 tiff 图像组合成一张多页 tiff 图像。我正在使用 Java 高级成像 API。看了SUN给的JAI API文档和教程。我是 JAI 的新
我需要一个 C# 函数,它将采用 8 位灰度 TIFF 的 Byte[],并返回 1 位(黑白)TIFF 的 Byte[]。 我对使用 TIFF 还很陌生,但一般的想法是我们需要将它们从灰度或彩色转换
我想在 TIFF 文件中操作 RGB 波段并在 matplotlib 上输出 灰度 贴图。到目前为止我有这段代码,但我无法在灰度上得到它: import scipy as N import gdal
我是一名优秀的程序员,十分优秀!