原帖由 小花猫 于 2009-6-25 16:20:00 发表 感觉还可以,但是请使用qrst文件,以方便其他应用,否则,只能你一个程序使用,有什么意思?一个城市就几个G的数据啊!就只能你的程序专用! |
你所说的qrst格式,google现在已经不用了,现在gooogle已经全部地图(卫星,普通地图,地形地图)改为 x y zoom 编码格式了,如果我使用qrst格式,用不了多久就可能被封ip了。
而且如果真的搞清楚 qrst的算法,这2种格式是可以转换的。这是可用的转换函数
/// <summary>
/// 根据Q树算法得到卫星图片编号
/// </summary>
/// <param name="row">切片所在行数(即切片Y编号)</param>
/// <param name="col">切片所在列数(即切片X编号)</param>
/// <returns>卫星图片Q编号</returns>
static string getSatTileId(int row, int col, int zoom)
{
/*trtqst*/
string tileid = "t";
double halflat = row; /**/
double locxmin, locxmax, locymin, locymax, locxmoy, locymoy;
locxmin = 0; locxmax = Math.Pow(2, zoom);
locymin = 0; locymax = Math.Pow(2, zoom);
for (int i = 0; i < zoom; i++)
{
locxmoy = (locxmax + locxmin) / 2;
locymoy = (locymax + locymin) / 2;
if ((halflat < locymin) || (halflat > locymax) || (col < locxmin) || (col > locxmax))
{
return ("transparent");
}
if (halflat < locymoy)
{
locymax = locymoy;
if (col < locxmoy)
{ /*q quadrant (top left)*/
tileid += "q";
locxmax = locxmoy;
}
else
{/*r quadrant (top right)*/
tileid += "r";
locxmin = locxmoy;
}
}
else
{
locymin = locymoy;
if (col < locxmoy)
{ /*t quadrant (bottom right)*/
tileid += "t";
locxmax = locxmoy;
}
else
{/*s quadrant (bottom left)*/
tileid += "s";
locxmin = locxmoy;
}
}
}
return tileid;
}