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