地图下载工具初步完成后,有网友提出需要加入经纬网络,看了文档,没有找到相关内容。那就自己动手,丰衣足食吧。最终效果如下图所示:
具体思路是,根据地图界面显示的经纬网络范围,确定一个合理的参数,结合地图层级,将经纬网络分别生成并显示出来,同时在周围显示具体数据,当鼠标拖动地图、地图放大缩小时,自动计算和更新经纬网络。比如,第3层,经度范围-180到180,可以平均为8份制定经线,纬度范围-90至90(实则为85°),可以平分为6份。
经过测算,不同层级内,经纬度平分参数如下:
代码为:
public static int[] lngsplit = {
2,
6,
8,
12,
24,
60,
120,
240,
360,
720,
1440,
2160,
4320,
9600,
21600,
43200,
64800,
129600,
259200,
648000,
1296000
};
public static int[] latsplit = {
2,
4,
6,
10,
15,
45,
90,
180,
270,
540,
1080,
2160,
3600,
7200,
21600,
43200,
64800,
129600,
324000,
648000,
1296000
};
具体实现步骤为,新建一个类LngLatGrid,构造函数传入参数GMapControl control,同时,动态添加一个层,用来放置经纬线和刻度值文本。具体代码如下
public LngLatGrid(GMapControl control)
{
this.control = control;
InitOverlay();
InitEvent();
}
/// <summary>
/// 初始化经纬网层
/// </summary>
private void InitOverlay()
{
bool haslnglatgrid = false;
foreach (GMapOverlay overlay in control.Overlays)
{
if (overlay.Id.Equals("lnglatgrid"))
{
haslnglatgrid = true;
this.gridOverlay = overlay;