2011-08-16 12 views
5

Mi chiedo, se esiste una libreria Java, che potrebbe generare poi-dati per i dispositivi di navigazione Tomtom (in genere il file ha estensione .ov2).Libreria Java per generare dati PDT TomTom

Uso Tomtom makeov2.exe util da Tomtom, ma non è stabile e sembra che non sia più supportato.

risposta

3

non ero in grado di trovare una libreria che fa la scrittura, anche se ho trovato questa classe di leggere .ov2 file:

package readers; 

import java.io.FileInputStream; 
import java.io.IOException; 

public class OV2RecordReader { 

    public static String[] readOV2Record(FileInputStream inputStream){ 
     String[] record = null; 
     int b = -1; 
     try{ 
      if ((b = inputStream.read())> -1) { 
       // if it is a simple POI record 
       if (b == 2) { 
        record = new String[3]; 
        long total = readLong(inputStream); 

        double longitude = (double) readLong(inputStream)/100000.0; 
        double latitude = (double) readLong(inputStream)/100000.0; 

        byte[] r = new byte[(int) total - 13]; 
        inputStream.read(r); 

        record[0] = new String(r); 
        record[0] = record[0].substring(0,record[0].length()-1); 
        record[1] = Double.toString(latitude); 
        record[2] = Double.toString(longitude); 
       } 
       //if it is a deleted record 
       else if(b == 0){ 
        byte[] r = new byte[9]; 
        inputStream.read(r); 
       } 
       //if it is a skipper record 
       else if(b == 1){ 
        byte[] r = new byte[20]; 
        inputStream.read(r); 
       } 
       else{ 
        throw new IOException("wrong record type"); 
       } 
      } 
      else{ 
       return null; 
      } 
     } 
     catch(IOException e){ 
      e.printStackTrace(); 
     } 
     return record; 
    } 

    private static long readLong(FileInputStream is){ 
     long res = 0; 
     try{ 
      res = is.read(); 
      res += is.read() <<8; 
      res += is.read() <<16; 
      res += is.read() <<24; 
     } 
     catch(IOException e){ 
      e.printStackTrace(); 
     } 
     return res; 
    } 
} 

Ho trovato anche questo codice PHP per scrivere il file:

<?php 
$csv = file("File.csv"); 
$nbcsv = count($csv); 
$file = "POI.ov2"; 
$fp = fopen($file, "w"); 
for ($i = 0; $i < $nbcsv; $i++) { 
    $table = split(",", chop($csv[$i])); 
    $lon = $table[0]; 
    $lat = $table[1]; 
    $des = $table[2]; 
    $TT = chr(0x02).pack("V",strlen($des)+14).pack("V",round($lon*100000)).pack("V",round($lat*100000)).$des.chr(0x00); 
    @fwrite($fp, "$TT"); 
} 
fclose($fp); 

Non sono sicuro di come si dovrebbe scrivere una classe Java (o di estendere quella precedente) per scrivere il file come fa la funzione PHP, ma si può essere in grado di ottenere alcune informazioni su come il file è codificato da.

+0

Grazie per la risposta. Ma a dire il vero preferirei una libreria pronta per l'uso, testata e supportata, e non scriverne una nuova da zero. – never