Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Tiff limit exceeded - czy da się ominąć?
01-12-2011, 12:21,
#1
Tiff limit exceeded - czy da się ominąć?
Witam, usiłuję zrobić podkład z tiff'ow do serwera. Napisałem taki skrypt:
Kod:
#! /bin/bash
echo UWAGA. Skrypt należy uruchamiać w wersji gdal 1.7.3-6. Inne wersje mogą nie działać poprawnie!
echo 1. Rozpoczynam kompresję plików.
for FILE in *.tif
do
    BASEFILE=`basename $FILE .tif`
    NEWFILE=($BASEFILE)_c.tif
    gdal_translate -of GTiff -co COMPRESS=DEFLATE -co TILED=YES $FILE $NEWFILE
done

mv *_c* ../mosaic/
echo Kopresja zakończona.
echo 2. Rozpoczynam budowanie mozaiki.
gdalbuildvrt -srcnodata 0 ../mosaic.vrt ../mosaic/*.tif
echo Budowa mozaiki zakończona.
echo 3. Rozpoczynamy budowę piramid.
gdaladdo -r average ../mosaic.vrt 2 4 8 16 32 64 128 256
echo Budowa piramid zakończona.
I działa dobrze jeśli pliki są jednakowego typu, no i jest ich mało. W momencie gdy przygotowałem więcej plików i rozmiar pliku z piramidą mosaic.vrt.ovr zwiększył się ponad 4GB otrzymałem błąd. Rzeczywiście w specyfikacji jest, że jest limit do 4GB tylko jak to teraz obejść? Jak to się rozwiązuje w serwerach?
01-12-2011, 13:08,
#2
RE: Tiff limit exceeded - czy da się ominąć?
(01-12-2011, 12:21)cooleq napisał(a): .. i rozmiar pliku z piramidą mosaic.vrt.ovr zwiększył się ponad 4GB otrzymałem błąd. Rzeczywiście w specyfikacji jest, że jest limit do 4GB tylko jak to teraz obejść? Jak to się rozwiązuje w serwerach?

Dawno się tym nie bawiłem, ale z tego co pamiętam to trzeba włączyć też kompresję dla piramidek. Jakoś tak.

Kod:
gdaladdo -r average --config COMPRESS_OVERVIEW DEFLATE ../mosaic.vrt 2 4 8 16 32 64 128 256
01-12-2011, 13:28,
#3
RE: Tiff limit exceeded - czy da się ominąć?
Dzięki za odpowiedź.
Rzeczywiście przydatna opcja. Zacząłem tworzyć i już widać różnice. Jednak jest to metoda pośrednia i nie wiem czy wystarczy, a na pewno nie na długo.

Wpadła mi do głowy za to inna myśl. Żeby zmienić kolejność w skrypcie i dla każdego pliku tiff wchodzącego w skład mozaiki osobno stworzyć piramidy. Uniknę wtedy efektu skumulowanego i jednego dużego pliku. Czy to jest możliwe i czy dużo stracę na wydajności?
01-12-2011, 13:39, (Ten post był ostatnio modyfikowany: 01-12-2011, 14:04 {2} przez tomalos.)
#4
RE: Tiff limit exceeded - czy da się ominąć?
Powinno się dać, po wpisaniu:
Kod:
gdalbuildvrt --format GTiff

gdzieś pod koniec pojawia się takie coś:
Kod:
<Option name="BIGTIFF" type="string-select" description="Force creation of BigTIFF file">
    <Value>YES</Value>
    <Value>NO</Value>
    <Value>IF_NEEDED</Value>
    <Value>IF_SAFER</Value>
  </Option>

Jak źle myślę to mnie poprawcie.
01-12-2011, 13:47,
#5
RE: Tiff limit exceeded - czy da się ominąć?
(01-12-2011, 13:28)cooleq napisał(a): Wpadła mi do głowy za to inna myśl. Żeby zmienić kolejność w skrypcie i dla każdego pliku tiff wchodzącego w skład mozaiki osobno stworzyć piramidy. Uniknę wtedy efektu skumulowanego i jednego dużego pliku. Czy to jest możliwe i czy dużo stracę na wydajności?

Jeżeli masz dużo plików to wydajność bardzo spadnie. Kiedy system będzie wyświetlał mapę ze wszystkimi plikami to będzie musiał pobrać piramidkę z każdego z nich, a to zajmuje sporo czasu.
Ja mam zrobiony VRT z 860 plików (ok 60GB) i piramidy (16 32 64 128 256 512) zajmują poniżej 2GB.

Dodatkowo mam wyliczone piramidy dla pojedynczych plików i kiedy mapa jest wyświetlana w dużej skali to system korzysta właśnie z nich. Ale wtedy na ekranie maksymalnie widać cztery pliki więc nie ma problemu z wydajnością. Z tego też powodu zrezygnowałem z piramid 2, 4 i 8 dla VRT, a one zajmują najwięcej miejsca.
01-12-2011, 14:29, (Ten post był ostatnio modyfikowany: 01-12-2011, 15:33 {2} przez cooleq.)
#6
RE: Tiff limit exceeded - czy da się ominąć?
W man nie widzę takiej opcji http://www.gdal.org/gdalbuildvrt.html i u mnie to nie działa w efekcie drukuje opcje:

Kod:
root@debian:/mnt/mapy/temp# gdalbuildvrt --format GTiff -srcnodata 0 ../mosaic.vrt ../mosaic/*.tif
Format Details:
  Short Name: GTiff
  Long Name: GeoTIFF
  Extension: tif
  Mime Type: image/tiff
  Help Topic: frmt_gtiff.html
  Supports: Create() - Create writeable dataset.
  Supports: CreateCopy() - Create dataset by copying another.
  Supports: Virtual IO - eg. /vsimem/
  Creation Datatypes: Byte UInt16 Int16 UInt32 Int32 Float32 Float64 CInt16 CInt32 CFloat32 CFloat64

<CreationOptionList>
  <Option name="COMPRESS" type="string-select">
    <Value>NONE</Value>
    <Value>LZW</Value>
    <Value>PACKBITS</Value>
    <Value>JPEG</Value>
    <Value>CCITTRLE</Value>
    <Value>CCITTFAX3</Value>
    <Value>CCITTFAX4</Value>
    <Value>DEFLATE</Value>
  </Option>
  <Option name="PREDICTOR" type="int" description="Predictor Type"/>
  <Option name="JPEG_QUALITY" type="int" description="JPEG quality 1-100" default="75"/>
  <Option name="ZLEVEL" type="int" description="DEFLATE compression level 1-9" default="6"/>
  <Option name="NBITS" type="int" description="BITS for sub-byte files (1-7), sub-uint16 (9-15), sub-uint32 (17-31)"/>
  <Option name="INTERLEAVE" type="string-select" default="PIXEL">
    <Value>BAND</Value>
    <Value>PIXEL</Value>
  </Option>
  <Option name="TILED" type="boolean" description="Switch to tiled format"/>
  <Option name="TFW" type="boolean" description="Write out world file"/>
  <Option name="RPB" type="boolean" description="Write out .RPB (RPC) file"/>
  <Option name="BLOCKXSIZE" type="int" description="Tile Width"/>
  <Option name="BLOCKYSIZE" type="int" description="Tile/Strip Height"/>
  <Option name="PHOTOMETRIC" type="string-select">
    <Value>MINISBLACK</Value>
    <Value>MINISWHITE</Value>
    <Value>PALETTE</Value>
    <Value>RGB</Value>
    <Value>CMYK</Value>
    <Value>YCBCR</Value>
    <Value>CIELAB</Value>
    <Value>ICCLAB</Value>
    <Value>ITULAB</Value>
  </Option>
  <Option name="SPARSE_OK" type="boolean" description="Can newly created files have missing blocks?" default="FALSE"/>
  <Option name="ALPHA" type="boolean" description="Mark first extrasample as being alpha"/>
  <Option name="PROFILE" type="string-select" default="GDALGeoTIFF">
    <Value>GDALGeoTIFF</Value>
    <Value>GeoTIFF</Value>
    <Value>BASELINE</Value>
  </Option>
  <Option name="PIXELTYPE" type="string-select">
    <Value>DEFAULT</Value>
    <Value>SIGNEDBYTE</Value>
  </Option>
  <Option name="BIGTIFF" type="string-select" description="Force creation of BigTIFF file">
    <Value>YES</Value>
    <Value>NO</Value>
    <Value>IF_NEEDED</Value>
    <Value>IF_SAFER</Value>
  </Option>
  <Option name="ENDIANNESS" type="string-select" default="NATIVE" description="Force endianness of created file. For DEBUG purpose mostly">
    <Value>NATIVE</Value>
    <Value>INVERTED</Value>
    <Value>LITTLE</Value>
    <Value>BIG</Value>
  </Option>
</CreationOptionList>

Używam wersji gdal 1.7.3-6 Za stara?

EDIT:
RAYO: czyli masz zrobione piramidki 2 4 8 w pojedynczych plikach a te mniejsze w zbiorczym pliku dla mozaiki? Nie wiem czy dobrze zrozumiałem. A jeśli są dla pojedynczych to są one jako osobne pliki czy może wewnętrznie bo słyszałem o takich ale nie wiem jak je robić.

EDIT2:
Robiłem też operację w win w qgis, tu jest nowszy gdal chyba 1.8. Stworzył plik ponad 6 GB jednak się wysypał przez nieobsługiwany format.
01-12-2011, 15:27,
#7
RE: Tiff limit exceeded - czy da się ominąć?
(01-12-2011, 14:29)cooleq napisał(a): czyli masz zrobione piramidki 2 4 8 w pojedynczych plikach a te mniejsze w zbiorczym pliku dla mozaiki? Nie wiem czy dobrze zrozumiałem. A jeśli są dla pojedynczych to są one jako osobne pliki czy może wewnętrznie bo słyszałem o takich ale nie wiem jak je robić.

Piramidy dla pojedynczych plików mam wewnętrzne, bo takie pliki już dostałem (ortofotomapa). Jeżeli liczysz piramidy z parametrem -ro to generują się pliki zewnętrzne. Bez tego parametru wewnętrzne. Nie wiem tylko, czy wewnętrzne są możliwe dla innych formatów niż GeoTiff. Dla VRT na pewno nie ma wewnętrznych, bo to tylko plik tekstowy.

Piramidka 2 dla pojedynczego pliku to nie to samo co dla dużego VRT. 2 oznacza, że wymiary obrazu w piramidzie to wymiary oryginału podzielone przez 2.

Napiszę później jak szacowałem, które piramidy liczyć. Robiłem to dosyć dawno i muszę sobie przypomnieć, żeby czegoś nie namieszać.
05-12-2011, 15:55, (Ten post był ostatnio modyfikowany: 05-12-2011, 16:23 {2} przez cooleq.)
#8
RE: Tiff limit exceeded - czy da się ominąć?
Witam ponownie, napiszę, że obecnie poprzestaję na zastosowaniu kompresji w jednym pliku. Plik ma około 800mb i wszystko działa dość sprawnie. Jak zacznie dochodzić więcej plików i przestanę się mieścić w ograniczeniu to zastanowię się nad innym rozwiązaniem.
Mam jeszcze pytanie co do tworzenia mozaiki. Obecnie robię to z opcją "-srcnodata 0" jednak w niektórych mapach daje to bardzo dobry efekt w innych natomiast nie(wycina punkty w treści mapy, nie tylko z ramek) od czego to może zależeć i jak można się uporać z tym problemem. Zależy mi jednak, żeby wyglądało to w miarę ładnie.


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
Question Wydruk mapy do tiff Tomasz Wojtan 0 377 22-02-2024, 13:58
Ostatni post: Tomasz Wojtan
  Export do TIFF widoku mapy outsider 3 5 160 06-08-2020, 10:31
Ostatni post: xmaziax

Skocz do: