1

誰でもポリライン(の配列)の緯度と経度の値をJavaのASCII文字列にエンコードするコードを持つことができます

例えば

私の配列はJavaでした

latlng{
  {22296401,70797251},
  {22296401,70797451},
  {22296401,70797851}
}

この上記の値は、次のようなGeoPointタイプとしてListオブジェクトに格納されます。

List<GeoPoint> polyline

このようにASCII文字列に変換したい

a~l~Fjk~uOwHJy@P

latlng値の配列を受け入れ、ASCII文字列を返すメソッドが必要です。助けていただければ幸いです。

4

1 に答える 1

2

私はこの投稿から答えを得ました

この2つの関数は、ポリライン配列をASCII文字列にエンコードするために必要でした。

private static String encodeSignedNumber(int num) {
    int sgn_num = num << 1;
    if (num < 0) {
        sgn_num = ~(sgn_num);
    }
    return(encodeNumber(sgn_num));
}

private static String encodeNumber(int num) {

    StringBuffer encodeString = new StringBuffer();

    while (num >= 0x20) {
        encodeString.append((char)((0x20 | (num & 0x1f)) + 63));
        num >>= 5;
    }

    encodeString.append((char)(num + 63));

    return encodeString.toString();

} 

テストのために、このサイトからの座標を試して、出力を比較してください

これがスニペットです

StringBuffer encodeString = new StringBuffer();
                    
String encode = Geo_Class.encodeSignedNumber(3850000)+""+Geo_Class.encodeSignedNumber(-12020000);                       
encodeString.append(encode);
encode = Geo_Class.encodeSignedNumber(220000)+""+Geo_Class.encodeSignedNumber(-75000);                      
encodeString.append(encode);
encode = Geo_Class.encodeSignedNumber(255200)+""+Geo_Class.encodeSignedNumber(-550300);                     
encodeString.append(encode);
                    
Log.v("encode string", encodeString.toString());

このポイントを取得する座標リンクから

Points: (38.5, -120.2), (40.7, -120.95), (43.252, -126.453)

さて、これで座標が異なる理由だと思います。たとえば、新しい座標を取得すると、前の座標から減算します。

1. 3850000,-12020000 => 3850000,-12020000
2. 4070000,-12095000 => (4070000 - 3850000),(-12095000 - -12020000) => +220000, -75000

その値をencodeSignedNumber()メソッドに渡す必要があり、その座標のASCII値を取得します

等々....

于 2011-08-29T13:46:28.557 に答える