jewtagan
Новичок
Кодирование координат Gmap
Доброго времени суток!
Столкнулся с такой проблемой: необходимо закодировать координаты для gmap, есть алгоритм:
Этапы кодирования числа со знаком приведены ниже.
1. Возьмите первоначальное значение:
-179.9832104
2. Затем возьмите десятичное значение и помножьте его на 1e5, округляя результат:
-17998321
3. Преобразуем десятичное значение в двоичное. Учтите, что отрицательное значение следует вычислить, используя его дополнительный код числа, путем инвертирования двоичного значения и добавления единицы к результату:
00000001 00010010 10100001 11110001
11111110 11101101 01011110 00001110
11111110 11101101 01011110 00001111
4. Сдвиг двоичного значения:
11111101 11011010 10111100 00011110
5. Если исходное десятичное число отрицательно, инвертируем этот код:
00000010 00100101 01000011 11100001
6. Разбиваем двоичное значение на пятиразрядные сегменты (начиная справа):
00001 00010 01010 10000 11111 00001
7. Располагаем пятиразрядные сегменты в обратном порядке:
00001 11111 10000 01010 00010 00001
8. ИЛИ выполняем логическое сложение каждого значения с числом 0x20, если следует еще один сегмент:
100001 111111 110000 101010 100010 000001
9. Преобразуем каждое значение в десятичное:
33 63 48 42 34 1
10. Складываем каждое значение с 63:
96 126 111 105 97 64
11. Преобразуем каждое значение в его эквивалент в ASCII:
`~oia@
первоисточник
есть даже интерактивное кодирование кодирование на JS.
есть необходимость кодирования большого количесва координат, поэтому данный вариант не устраивает.
написал кодировку на РНР, но почему то не хочет работать
Подскажите, пожалуйста, что я не так делаю. В чем ошибка?
Доброго времени суток!
Столкнулся с такой проблемой: необходимо закодировать координаты для gmap, есть алгоритм:
Этапы кодирования числа со знаком приведены ниже.
1. Возьмите первоначальное значение:
-179.9832104
2. Затем возьмите десятичное значение и помножьте его на 1e5, округляя результат:
-17998321
3. Преобразуем десятичное значение в двоичное. Учтите, что отрицательное значение следует вычислить, используя его дополнительный код числа, путем инвертирования двоичного значения и добавления единицы к результату:
00000001 00010010 10100001 11110001
11111110 11101101 01011110 00001110
11111110 11101101 01011110 00001111
4. Сдвиг двоичного значения:
11111101 11011010 10111100 00011110
5. Если исходное десятичное число отрицательно, инвертируем этот код:
00000010 00100101 01000011 11100001
6. Разбиваем двоичное значение на пятиразрядные сегменты (начиная справа):
00001 00010 01010 10000 11111 00001
7. Располагаем пятиразрядные сегменты в обратном порядке:
00001 11111 10000 01010 00010 00001
8. ИЛИ выполняем логическое сложение каждого значения с числом 0x20, если следует еще один сегмент:
100001 111111 110000 101010 100010 000001
9. Преобразуем каждое значение в десятичное:
33 63 48 42 34 1
10. Складываем каждое значение с 63:
96 126 111 105 97 64
11. Преобразуем каждое значение в его эквивалент в ASCII:
`~oia@
первоисточник
есть даже интерактивное кодирование кодирование на JS.
есть необходимость кодирования большого количесва координат, поэтому данный вариант не устраивает.
написал кодировку на РНР, но почему то не хочет работать

PHP:
$num = -179.9832104;
if ($num<0) $num = ~ $num;
while($num >= 0x20) {
$result+= chr((0x20 | ($num & 0x1F)) + 63);
$result>>5;
}
$result+=chr($num + 63);
var_dump($result);