我正在做一个需要我使用正射镶嵌图的项目。此地图为 .tiff 格式。 我想从该地图中提取地理信息,以便我可以将其正确覆盖在谷歌地图上。 我在这个项目中使用平均堆栈。
所以我的最后一个问题是: 有没有办法使用 javascript 从 tiff 图像中提取地理标签?
编辑: 当我使用 Maptiler(https://www.maptiler.com/) 时,它会自动将 .tif 文件正确放置在谷歌地图上。 我想知道它是如何提取信息并将其放置在地图上的,以便我自己做。
tiff - 是一种光栅图像格式。因此,要从中获取信息(纯图形除外),如果它是例如谷歌地图的屏幕截图是不可能的,也许可以使用一些复杂的库,如 OpenCV.
但我想你是想得到 EXIF 信息,可以出现在照片中。 为此,您可以使用 exif npm 库
var ExifImage = require('exif').ExifImage;
try {
new ExifImage({ image : 'your.tiff' }, function (error, exifData) {
if (error)
console.log('Error: '+error.message);
else {
let location = exifData.gps || 'who knows, maybe somwhere else :(';
console.log(location); // pass location to google maps after some transforming
}
});
} catch (error) {
console.log('Error: ' + error.message);
}
有一个名为 open layers 的开源库https://openlayers.org/。这是叠加 tiff 图像的最佳方式,一旦将 tiff 图像包含在此层上,您就可以提取所需的任何信息。
您可以将 Angular 与 typescript 或 java script 一起使用,这是更可取的。基本上你可以使用这个库从你的 tiff 图像中以坐标的方式获取每一个细节。
设置这个库是一个复杂的项目,我只是给了你一个如何完成的想法。我想在这件事上帮助你。我知道我解释的不多,我不能给你太多细节,因为我不知道这个问题的细节。如果您需要任何帮助,请联系我。
为了读取 TIFF 标签,您需要一个合适的 TIFF 解析器,例如 tiff 包,以便您可以运行 IFD 块的非位图部分:
import tiff from "tiff";
// Load a GeoTIFF file
const file = fs.readFileSync(`ALPSMLC30_N048W124_DSM.tif`);
// We can do this in the browser, too, the `decode` function takes an ArrayBuffer
const image = tiff.decode(file.buffer);
// get the first IFD
const data = image[0];
// let's see what tags apply
console.log(data.fields);
收益率(对于这个特定的 GeoTIFF):
Map(19) {
254 => 0,
256 => 3600,
257 => 3600,
258 => 16,
259 => 1,
262 => 1,
273 => Uint32Array(3600) [
... 3600 more items
],
274 => 1,
277 => 1,
278 => 1,
279 => Uint32Array(3600) [
... 3600 more items
],
282 => 1,
283 => 1,
284 => 1,
339 => 2,
33550 => Float64Array(3) [ 0.0002777777777777778, 0.0002777777777777778, 0 ],
33922 => Float64Array(6) [ 0, 0, 0, -124, 49, 0 ],
34735 => Uint16Array(24) [
1, 1, 0, 5, 1024, 0,
1, 2, 1025, 0, 1, 1,
2048, 0, 1, 4326, 2052, 0,
1, 9001, 2054, 0, 1, 9102
],
34737 => 'WGS-84'
}
标签编号与 https://www.awaresystems.be/imaging/tiff/tifftags.html 上列出的标签编号相匹配,因此
33550
是 model pixel scale 标签,34737
是 GeoASCII params 标签等