高德地图挺好的,不过那个实时的路况拥堵没有开放,一直想怎么样下载下来,看了一下还是可以下载的。
总的来说有一下几个步骤:
1、根据地图切好256*256的切片xy坐标,
2、根据xy坐标访问高德地图的实时路网路况接口
3、根据接口返回数据进行解密,解密后转成png图片或者转成地理坐标数据
第一第二读者可以从别的地方了解一下,
3、解密和转换png图片256*256
3.1、计算得到的切片xy还需要转换一下
public int[] getRealTileIndex(int x, int y, int z)
{
// z 是zoom地图缩放级别,高德导航的返回路径和16级是贴合的,所以想要自己保存路况建议导航保存路径,然后获取这个实时路况信息就知道哪里堵了,可以放postgis来匹配,也可以用图片来识别颜色,高德路况接口放回的数组的颜色对应是这个["#f93a43","#fcac19","#20a962","#83171c","#adadad"],其中就有红色绿色黄色
try
{
int n = ((int)Math.Floor(decimal.Parse(z / 2 + "")));
int i = z - n;
return new int[] { z, x & (n = (1 << n) - 1 << i) | y & (i = (1 << i) - 1), y & n | x & i };
}
catch (Exception ce)
{
}
return new int[] { z, x, y };
}
3.2、转换字符串到图片的坐标 list 其中格式是x,y,x,y.....连成线段
public static List<int> exchange(string t)
{
int r=27;
char n;
int n2;
string i = "ASDFGHJKLQWERTYUIO!sdfghjkleiu3~yr5-P&mq9`%zCN*b=8@^xpVM".Substring(0,27);
int a = 333;
List<int> o = new List<int>();
int s = -1;
int c = t.Length;
for (int u = 0; u < c;u++)
{
n = t[u];
n2 = i.IndexOf(n+"");
if(s == -1)
{
s = n2 * r;
}
else
{
o.Add(s + n2 - a);
s = -1;
}
}
return o;
}
从坐标转成png图片和转lnglat地理坐标读者自己从其他地方看看吧,这里就放关键的解密行了
以上代码是c#的,读者自己转一下到其他语言就行了