Google map折れ線符号化c++実装
いくつかの資料を調べて、座標点の多くの問題を解決する方法を見つけました.Google mapsのGPolygonクラスは、多数の座標点から変換された折線符号化をロードできるファクトリメソッドfromEncoded()を提供する.Googleは折れ線を符号化するアルゴリズムフォーマットを提供し、以下のようにします.
アルゴリズムの中のいくつかのステップはよく分かりませんが、アルゴリズムに基づいてc++コードを書きました.
出力値は、・~oia@
: , 。 , , 。 。 , 。
base64 ASCII : , ASCII 63(ASCII “?”)。 , ; 1, , 。
, , ( )。 Base64 , 。 , 。 +/- 180 , 5 (180.00000 -180.00000), 32 。
(string literal) , 。 。
。
:
-179.9832104
1e5, :
-17998321
。 , :
00000001 00010010 10100001 11110001
11111110 11101101 10100001 00001110
11111110 11101101 01011110 00001111
:
11111110 11101101 01011110 00001111 0
, :
00000001 00010010 10100001 11110000 1
5 ( ):
00001 00010 01010 10000 11111 00001
5 :
00001 11111 10000 01010 00010 00001
, 0x20 (OR):
100001 111111 110000 101010 100010 000001
:
33 63 48 42 34 1
63:
96 126 111 105 97 64
ASCII :
`~oia@
アルゴリズムの中のいくつかのステップはよく分かりませんが、アルゴリズムに基づいてc++コードを書きました.
#include "stdafx.h"
#include "math.h"
#include "string"
#include "iostream"
//
int interger(double x)
{
int y;
if(x<0)
y=int(x-0.5);
else if(x>=0)
y=int(x+0.5);
return y;
}
int _tmain(int argc, _TCHAR* argv[])
{
double col=-179.9832104;// double , ,10 ,float , 6
int num;
num=interger(col*100000);
int sgn_num;
// , , 0
sgn_num=num<<1;
if(num<0)
{
sgn_num=~(sgn_num);//
}
string result="";
// 5
while(sgn_num>=0x20)
//0x20 ascII
{
int x;
// 0x1f , 5
x=sgn_num&0x1f;
// 63
x=x|0x20;
x=x+63;
//char(x) ASCII , result
result+=char(x);
// 5
sgn_num>>=5;
}
result+=char(sgn_num+63);//
cout<<result;
return 0;
}
出力値は、・~oia@