Java-библиотека для генерации данных TomTom GPS poi - PullRequest
5 голосов
/ 16 августа 2011

Интересно, существует ли какая-либо библиотека Java, которая могла бы генерировать poi-данные для навигационных устройств Tomtom (обычно файл имеет расширение .ov2).

Я использую утилиту Tomtom makeov2.exe от Tomtom, ноон не стабилен и, похоже, больше не поддерживается.

1 Ответ

3 голосов
/ 23 августа 2011

Мне не удалось найти библиотеку, которая делает запись, хотя я нашел этот класс для чтения .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;
    }
}

Я также нашел этот код PHP для записи файла:

<?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);

Я не уверен, как вы будете писать класс Java (или расширять класс выше) для записи файла, как это делает функция PHP, но вы, возможно, сможете получить некоторое представление окак файл закодирован из него.

...