Google map折れ線符号化c++実装(修正1)
符号化折れ線アルゴリズムフォーマットは、以下のように符号なし値を符号化するステップも提供する.
よく見ると、この部分の符号化と符号化は第3ステップから同じです.そこで自分のコードを調整し、以下のようにします.
:
:
174
:
10101110
5 ( ):
101 01110
5 :
01110 101
, 0x20 (OR):
101110 00101
:
46 5
63:
109 68
ASCII :
mD
よく見ると、この部分の符号化と符号化は第3ステップから同じです.そこで自分のコードを調整し、以下のようにします.
#include "stdafx.h"
#include "string"
#include "iostream"
using namespace std;
//
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;
}
//
void encodeNumber(unsigned int sgn_num)
{
string result="";
// 5
while(sgn_num>=0x20)
{
int x;
x=sgn_num&0x1f;
// cout<<x<<endl;
// 63
x=x|0x20;
// cout<<x<<" ";
x=x+63;
// cout<<x<<" ";
//change(x);
//cout<<char(x)<<endl;
result+=char(x);
sgn_num>>=5;
}
/*sgn_num=sgn_num&0x1f;
sgn_num=sgn_num|0x20;*/
// cout<<sgn_num<<" ";
result+=char(sgn_num+63);
cout<<result;
}
//
void encodeSignedNumber(int num)
{
int sgn_num;
// , , 0
sgn_num=num<<1;
// cout<<sgn_num<<endl;
if(num<0)
{
sgn_num=~(sgn_num);//
}
encodeNumber(sgn_num);
}
int _tmain(int argc, _TCHAR* argv[])
{
// , double , ,10 ,float , 6
double col=-179.9832104;
int num;
num=interger(col*100000);
encodeSignedNumber(num);
unsigned int x=174;
encodeNumber(x);
//system dos 。 pause ,
system("pause");
return 0;
}