有没有办法使用 javascript 从 tiff 图像中提取地理标签?

问题描述 投票:0回答:3

我正在做一个需要我使用正射镶嵌图的项目。此地图为 .tiff 格式。 我想从该地图中提取地理信息,以便我可以将其正确覆盖在谷歌地图上。 我在这个项目中使用平均堆栈。

所以我的最后一个问题是: 有没有办法使用 javascript 从 tiff 图像中提取地理标签?

编辑: 当我使用 Maptiler(https://www.maptiler.com/) 时,它会自动将 .tif 文件正确放置在谷歌地图上。 我想知道它是如何提取信息并将其放置在地图上的,以便我自己做。

javascript angular google-maps-api-3 tiff maptiler
3个回答
0
投票

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);
}

0
投票

有一个名为 open layers 的开源库https://openlayers.org/。这是叠加 tiff 图像的最佳方式,一旦将 tiff 图像包含在此层上,您就可以提取所需的任何信息。

您可以将 Angular 与 typescript 或 java script 一起使用,这是更可取的。基本上你可以使用这个库从你的 tiff 图像中以坐标的方式获取每一个细节。

设置这个库是一个复杂的项目,我只是给了你一个如何完成的想法。我想在这件事上帮助你。我知道我解释的不多,我不能给你太多细节,因为我不知道这个问题的细节。如果您需要任何帮助,请联系我。


0
投票

为了读取 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 标签等

© www.soinside.com 2019 - 2024. All rights reserved.