Google map折れ線符号化c++実装(修正1)


符号化折れ線アルゴリズムフォーマットは、以下のように符号なし値を符号化するステップも提供する.
              :

       :
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;
}