GMap实现随地图等级变化的图片

学习了这篇古早文章:

GMap.NET开发技巧(六)-如何缩放基于图片的地图图元 | GPS软件平台开发技术博客

该篇文章实现图片随地图等级缩放而缩放的思路主要是这两个方法:

1.gMapControl1.FromLatLngToLocal(p);

该方法输入经纬度,返回屏幕坐标。即传入PointLatLng类型字段,返回GPoint类型字段。

2.gMapControl1.FromLocalToLatLng(e.X, e.Y)

该方法输入屏幕坐标,返回经纬度。

在该文章中,确定了需要放在GMap地图上图片的左上角,和右下角坐标。使用GMap自带的方法:gMapControl1_OnMapZoomChanged(),该方法在地图等级发生变化时触发。

在该方法中:

var tl = mapControl.FromLatLngToLocal(gtl);//将左上角经纬度转成屏幕坐标

var br = mapControl.FromLatLngToLocal(gbr);//将右下角经纬度转为屏幕坐标

imageMarker.Size = new System.Drawing.Size((int)(br.X - tl.X), (int)(br.Y - tl.Y));

//用左上角和右下角的屏幕坐标,确定新的图片尺寸

这样就可以确保图片随地图等级变化而变化了。

但是我需要解决的问题中,图片的位置在时刻发生变化,只能获取到图片的一个坐标,并且为了确保图片显示位置精准,该坐标为图片的中心坐标。这种情况下,想要获得图片左上角与右下角的经纬度坐标,需先将中心经纬度坐标转为屏幕坐标,再根据我提前设置的图片大小,找到左上角与右下角的屏幕坐标,再转成经纬度坐标。

一言以蔽之,十分麻烦且不能用。故此方法较为适合已知图片左上角与右下角经纬度的情况下使用。

在发现50×50的图片随等级变化的都是2的倍数后,决定先设置好不同等级下图片的大小,再在gMapControl1_OnMapZoomChanged()方法触发后重新赋值图片Size大小,实现图片缩放。

部分代码为:

//通过地图等级改变图片大小
 if(trackBarValue>=19)
 {
        int w =(int) Math.Pow(2, (trackBarValue - 19)) * 50;
        imageSize = new Size(w, w);
 }
 else
{
        int h = (int)(50 / Math.Pow(2, (19 - trackBarValue)));
        imageSize = new Size(h, h);
}

其中trackBarValue为比例尺控件显示的地图等级,即trackBar控件。

对了,可使用gMapControl1_MouseMove方法加gMapControl1.FromLocalToLatLng(e.X, e.Y)显示鼠标在地图中的经纬度。部分代码如下:

lat = gMapControl1.FromLocalToLatLng(e.X, e.Y).Lat;        //double类型
lng = gMapControl1.FromLocalToLatLng(e.X, e.Y).Lng;        //double类型
label2.Text = "lat= " + Convert.ToString(lat) + "   lng= " + Convert.ToString(lng);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值