4

Tomtomナビゲーションデバイスのpoiデータを生成できるJavaライブラリが存在するかどうか疑問に思います(通常、ファイルの拡張子は.ov2です)。

TomtomのTomtommakeov2.exeutilを使用していますが、安定しておらず、サポートされなくなったようです。

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

PHP関数のようにファイルを書き込むためにJavaクラスを作成する(または上記のクラスを拡張する)方法はわかりませんが、ファイルがどのようにエンコードされているかについての洞察を得ることができるかもしれません。

于 2011-08-23T16:46:25.757 に答える