Открыть Geotiff и поставить на него точки с координатами долгота и широта

 
 
 
Сообщения:3
Добрый день!Есть файл в формате geotiff и к нему идет файл с параметрами геодезической привязки в формате .tfw. Размер файла geotiff примерно 18-20МБ, необходимо его открыть и поставить на его точки в виде маркера с надписями,точки которые необходимо поставить в виде долготы и широты!Кто-нибудь сталкивался с таким?Если есть возможность помогите пожалуйста?
 
 
Сообщения:821
GeoTIFF Wiki

TIFF Wiki

распарсить, найти блок, который тебе нужен, добавить нужные данные и сохранить.
 
 
Сообщения:94
windruf:
GeoTIFF Wiki

TIFF Wiki

распарсить, найти блок, который тебе нужен, добавить нужные данные и сохранить.


Правильно я понимаю, что можно воспользоваться

final InputStream inputStream = new BufferedInputStream(in);


?

А потом уже вычитывать inputStream и анализировать его, зная структуру байт geotiff файла?
Изменен:28 мар 2019 14:45
 
 
Сообщения:821
    /**
     * this method loads WireShark Trace file into PcapNgTrace object.<br/>
     * <br/>
     * example:<br/>
     * PcapNgTrace trace = PcapNgTrace.load(file);
     * 
     * @param dsp_file
     * @return an populated PcapNgTrace object.<br/> 
     * or an empty PcapNgTrace object if an Error occurs.
     */
    public static PcapNgTrace load(File dsp_file)
    {
        PcapNgTrace erg = new PcapNgTrace();
        byte[] byrl_type = new byte[4];
        byte[] byrl_size = new byte[4];
        byte[] byrl_size2 = new byte[4];
        byte[] byrl_magic = new byte[4];
        byte[] byrl_data;
        
        erg.name = String.format("Trace : %s %s", dsp_file.getName(), new Date());
        erg.file = dsp_file;
        
        EndiansEnum endian = EndiansEnum.littleEndian;
        
        boolean bol_firstTime = true; // is true if this is the first block
        
        int inl_numBytes, inl_size, inl_type;
        
        try(DataInputStream dataInputStream = new DataInputStream(new FileInputStream(dsp_file)))
        {
            while (true)
            {     
                inl_numBytes = dataInputStream.read(byrl_type);             // read type of block
                
                if(inl_numBytes < byrl_type.length)                         // control if it is completly loaded
                {
                    if(inl_numBytes == -1)                                  // -1 means end of file
                        MyLogger.info("File loading O.K");
                    else
                        MyLogger.warning("File may be not complette");
                    break;
                }
                
                inl_type = endian.byteArrayToInt(byrl_type);
                
                if(bol_firstTime)                                           // control if first block is SHB
                {
                    if(inl_type != SHB)
                        throw new IOException("corrupt or wrong File");
                    
                    bol_firstTime = false;
                }
                
                inl_numBytes = dataInputStream.read(byrl_size);             // read size of block
                
                if(inl_numBytes < byrl_size.length)                         // control if it is completly loaded
                {
                    MyLogger.warning("File may be not complette");
                    break;
                }
                
                if(inl_type == SHB)                       // SHB contains a magic number wich determinates endian
                {
                    inl_numBytes = dataInputStream.read(byrl_magic);        // load magic number
                    
                    if(inl_numBytes < byrl_magic.length)                    // control if it is completly loaded
                    {
                        MyLogger.warning("File may be not complette");
                        break;
                    }
                    
                    endian = EndiansEnum.fromMagicNumber(byrl_magic);       
                    
                    inl_size = endian.byteArrayToInt(byrl_size);
                    
                    inl_size -= 16;  // size witout type, size, magic number and trailing size 
                    
                }else                                                       // for all other blocks
                {
                    inl_size = endian.byteArrayToInt(byrl_size);
                    
                    inl_size -= 12;   // size witout type, size and trailing size 
                }
                
                byrl_data = new byte[inl_size];
                
                inl_numBytes = dataInputStream.read(byrl_data);
                
                if(inl_numBytes < byrl_data.length)
                {
                    MyLogger.warning("File may be not complette");
                    break;
                }
                
                inl_numBytes = dataInputStream.read(byrl_size2);
                
                if(inl_numBytes < byrl_size2.length)
                {
                    MyLogger.warning("File may be not complette");
                    break;
                }
                
                if(!equalsByteArrays(byrl_size, byrl_size2))
                    throw new IOException("size is corrupted");
                
                
                RawBlock rawBlock = new RawBlock();  // now, when all data are completely there we can put them into block
                
                rawBlock.setType(byrl_type);
                
                rawBlock.setSize(byrl_size);
                
                rawBlock.setData(byrl_data);
                
                if(inl_type == SHB)
                    rawBlock.setMagicNumber(byrl_magic);
                
                erg.dsrc_data.add(rawBlock);
                
            }// while(true)
            
        } catch (FileNotFoundException ex)
        {
            
            MyLogger.error("PcapNgRoot load: File not found", ex);
            
            return new PcapNgTrace();
        } catch (IOException ex)
        {
            
            MyLogger.error("PcapNgRoot load: IO_Exception", ex);
            
            return new PcapNgTrace();
        }
        
        erg.buildTree();
        
        return erg;
    }


это я парсил файлы от WireShark
здесь только разбивал на блоки, а блоки парсил в них самих.
и совет: всё, что не собираешься менять храни как получил - массивом байтов.
Изменен:29 мар 2019 04:31
 
 
Сообщения:3
Добрый день! Спасибо за ответы.Не думал ,что так сложно будет.В принципе такие файлы подразумевают такие процессы.
 
 
Сообщения:821
это не сложно. это просто довольно кропотливая работа.
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет