Subversion Repositories mkgmap

Rev

Rev 4119 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
 * Copyright (C) 2017.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 3 or
 * version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 */

package uk.me.parabola.imgfmt.app.dem;

import java.util.ArrayList;
import java.util.List;

import uk.me.parabola.imgfmt.ReadFailedException;
import uk.me.parabola.imgfmt.app.CommonHeader;
import uk.me.parabola.imgfmt.app.ImgFileReader;
import uk.me.parabola.imgfmt.app.ImgFileWriter;

/**
 * The header of the DEM file.
 *
 * @author Gerd Petermann
 */

public class DEMHeader extends CommonHeader {
        public static final int HEADER_LEN = 41; // Other lengths are possible
       
        private final List<DEMSection> zoomLevels = new ArrayList<>();
       
        private int offset;

        public DEMHeader() {
                super(HEADER_LEN, "GARMIN DEM");
        }

       
        /**
         * Write the rest of the header.  It is guaranteed that the writer will be set
         * to the correct position before calling.
         *
         * @param writer The header is written here.
         */

        protected void writeFileHeader(ImgFileWriter writer) {
                int pos = writer.position();
                writer.position(HEADER_LEN);
                for (int i = 0; i < zoomLevels.size(); i++) {
                        zoomLevels.get(i).writeRest(writer);
                }
                offset = writer.position();
                for (int i = 0; i < zoomLevels.size(); i++) {
                        zoomLevels.get(i).writeHeader(writer);
                }
                writer.position(pos);
               
                writer.put4(0); // 0: elevation in metres, 1: foot
                writer.put2u(zoomLevels.size());
                writer.put4(0); // unknown
                writer.put2u(60); // size of zoom level record
                writer.put4(offset); // offset to first DemSection header (they appear at the end of the file!)
                writer.put4(1); // unknown, 0 and 1 spotted
               
        }

        @Override
        protected void readFileHeader(ImgFileReader reader) throws ReadFailedException {
        }


        public void addSection(DEMSection section) {
                zoomLevels.add(section);
        }

}