Java library for generating TomTom GPS poi data

I wonder if there is any Java library that can generate poi data for Tomtom navigation devices (usually the file has the extension .ov2).

I am using Tomtom makeov2.exe using Tomtom, but it is unstable and it seems that it is no longer supported.

+5
source share
1 answer

I was unable to find the library that writes, although I found this class to read files .ov2:

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

I also found this PHP code to write the 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);

I'm not sure how you are going to write a Java class (or extend one of them) to write a file, as a PHP function does, but you can get an idea of ​​how the file is encoded from it.

+3
source

All Articles