本文章主要关于地图控件的编写操作。
通过一个最简单的地图控件,让大家了解关于地图服务的一些内容,程序逻辑是很简单的。采用了部分Gmap控件的代码、
带式Gmap控件太大太复杂,不容易让人理解程序的结构。
1首先了解google地图url
http://mt2.google.cn/vt/lyrs=m@167000000&hl=zh-CN&gl=cn&x=0&y=0&z=0
x代表纬度瓦片编号,y代表经度瓦片编号,z代表缩放等级[0-22]
一幅地图由4^z个256的正方形组成,z为级别
例如:第0级为4^0个,即世界地图由一个256图片表示。
第1级为4^1个,即世界地图由4个256图片表示。
编号x=0,y=0 编号x=0,y=1
x=1,y=0 x=1,y=1
2 Gps点坐标转化为地图上的像素坐标
lat代表经度,lng代表纬度,以像素图片左上角为(0,0),gps点对应的横纵坐标为(x,y)
像素空间宽度和高度都为L=(2^n)*256;
x=(lng+180)*360*L
double sinLatitude = Math.Sin(lat * Math.PI / 180);
y = (0.5 - Math.Log((1 + sinLatitude) / (1 - sinLatitude)) / (4 * Math.PI))*L;
具体是如何计算的,可以查看
3地图像素到GPS点位置。
是第2步的逆函数。
4,具体计算
知道gps_center经纬度,lat,lng 转化为 像素坐标 Point_center。
显示范围也就可以确定左上角[Point_center.x- halfWidth,Point_center.y- halfHeight]到右下角[Point_center.y+ halfWidth,Point_center.y+ halfHeigh]
确定左上角起始瓦片编号,上面数/256。右下角瓦片编号,像素点/256。
然后进行异步下载。
下载之后,根据瓦片编号进行绘制,和左上角瓦片和当前显示的距离,结合绘制。
具体的详细实现,在
http://download.csdn.net/detail/moonandwolf/8491069进行下载