Кодировать ломаную широты и долготы в значение ascii - PullRequest
1 голос
/ 29 августа 2011

любой может иметь код для кодирования значения широты и долготы полилинии (массива) в строку ascii в java

например,

мой массив был в Java

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

это вышеупомянутое значение хранится в объекте List в виде типа GeoPoint, например

List<GeoPoint> polyline

и хотите преобразовать в строку ascii вот так

a~l~Fjk~uOwHJy@P

Мне нужен метод, который принимает массив значений latlng и возвращает строку ascii Любая помощь будет благодарна заранее

1 Ответ

2 голосов
/ 29 августа 2011

Я получил ответ от этого поста

эти две функции были необходимы для кодирования полилинии в строку 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 для этой координаты

и т. Д.

...