4

我想知道是否存在任何可以为 Tomtom 导航设备生成 poi 数据的 Java 库(通常该文件具有 .ov2 扩展名)。

我使用来自 Tomtom 的 Tomtom makeov2.exe util,但它不稳定,似乎不再受支持。

4

1 回答 1

2

.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 函数那样编写文件,但您可能能够深入了解文件是如何从中编码的。

于 2011-08-23T16:46:25.757 回答