//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "math.h"
#include "GooglePolyline.h"
#include "Minux\MMath.h" //这个可以.去掉.是为了.调用下面.Round函数用的.
//---------------------------------------------------------------------------
/*二进制转换为十进制(8位)*/
int __fastcall BintoDec(char* b)
{
int j = 0,v = 0;
int Len = strlen(b);
if (Len < 1) return Len;
for(int i=Len-1; i>=0; i--)
{
if (b[i]=='1')
v += (int)pow(2,j);
j++;
}
return v;
}
//---------------------------------------------------------------------------
String __fastcall Rights(String Value, int iLen)
{
int i;
i = Value.Length() - iLen + 1;
if (i<=0) i = 1;
String ret = Value.SubString(i,iLen);
return ret;
}
//---------------------------------------------------------------------------
String __fastcall EncodePolyline(double* LngBuf, double* LatBuf, unsigned int BufLen)
{
double TmpLng, TmpLat;
String ret;
for (int i=0, iLoop=BufLen; i
{
TmpLng = LngBuf[i];
TmpLat = LatBuf[i];
if (i != 0)
{
TmpLng = LngBuf[i] - LngBuf[i-1];
TmpLat = LatBuf[i] - LatBuf[i-1];
}
ret += EncodePoint(TmpLng);
ret += EncodePoint(TmpLat);
}
return ret;
}
//---------------------------------------------------------------------------
String __fastcall EncodePoint(double col)
{
/*1.取初始有符号值 col */
/*2.将其取十进制值乘以 1e5,并取整:*/
// Round是自定义函数.此处如果用Int取整的.话.三位小数时就会出.问题.用的到的朋友自己.Google下看把.
int num = (Round)(col * 100000);
/*3.将十进制值转换为二进制值*/
char buf[128]; itoa(num,buf,2);
/*4.末位+0*/
strcat(buf,"0");
/*5.如果原来的十进制值是负数,则对以下编码求反.并去除前面的0*/
if (num<0)
{
for(int i=0,iLoop=strlen(buf);i
{
if (buf[i]=='0')
buf[i] = '1';
else
buf[i] = '0';
}
}
编辑特别推荐: