Я не знаю, на каком языке он вам нужен. Вы можете получить общее представление от Google здесь .Однако я обнаружил, что инструкции не на 100% точны.Вот как я это понял, используя пример в том же тексте.Я реализовал его на Java, и его должно быть довольно легко преобразовать в JavaScript или PHP.
public class MapMath {
private final static double MULTIPLIER = 100000;
private final static int FIVE_BIT_MASK = 0x1f;
public MapMath() {
double[][] coords = new double[][]{
{-12.422187,130.854922},
{-12.422445,130.854937},
{-12.422234,130.854886}
};
StringBuilder encodedStrings = new StringBuilder();
for (int i = 0; i < 3; i++){
encodedStrings.append(
encodeCoordinate(coords[i][0]) +
encodeCoordinate(coords[i][1]) + "\n"
);
}
System.out.println(encodedStrings);
}
private String encodeCoordinate(double coordinate) {
StringBuilder encodedCoordinate = new StringBuilder();
boolean hasNext;
coordinate *= MULTIPLIER;
int value = (int) coordinate;
value <<= 1;
if(coordinate < 0) value = ~value;
do {
int next = (value >> 5);
hasNext = (next > 0);
int encVal = value & FIVE_BIT_MASK;
if(hasNext) encVal |= 0x20;
encVal += 0x3f;
value = next;
encodedCoordinate.append((char)(encVal));
} while (hasNext);
return encodedCoordinate.toString();
}
public static double toRadians(double degrees) {
return (degrees*Math.PI)/180;
}
public static void main(String[] args){
new MapMath();
}
}
Обратите внимание, что последовательные координаты должны быть смещены относительно предыдущей.Надеюсь, что это было полезно для вас, и, пожалуйста, дайте мне знать, если понадобится дополнительная помощь в этом.