关于经纬度显示的问题(200分)

  • 主题发起人 主题发起人 lgmxeeri
  • 开始时间 开始时间
L

lgmxeeri

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序中想完成这样功能,在一幅地图(当然是画在canvas上的),我已经实现了地图的放大和缩小,
我现在要将地图的经纬度显示在地图的四周,与word中的屏幕上和左边的刻度显示类似,
并能随着我图面的放大和缩小完成比例尺的动态改变。
哪伟大虾能给小第一个帮助。
 
canvas.moveto (x1,y1)
canvas.lineto(x2,y2)划线。
原点坐标(0,0)肯定是随图像大小不变的。
canvas.clientwidth和canvas.clientheight随图像大小改变,
得到这二个数值,等分.....,确定x1,x2,y1,y2重画。
 
不知道兄弟你CANVAS上的地图是BMP还是矢量数据画成,兄弟我的是地图各区域边界的象素点
数据用Polygon函数画的,方法比较笨,但放大缩小速度较快,如感兴趣,可交流。

叽叽歪歪的废话完了。我想兄弟你可能是两个问题:
1. 象素点与经纬度的转换。我用如下公式:
sbv:=scrollbar1.Position;
sbh:=scrollbar2.Position;
xa:=x-sbh;
ya:=y-sbv;
y2:=34*60*60-round((ya-360-(1184-deltay)*360 div alf/16.372943806)*3600/(1869*360 div alf/16.372943806));
x2:=115*60*60+round(((xa-360-(270-deltax)*360divalf/16.372943806+(ya-360-(1184-deltay)*360 div alf/16.372943806)*14/1869)*3600)/(1549*360 div alf/16.372943806));
y21:=y2 div 3600;
y22:=y2 mod 3600;
y31:=y22 div 60;
y32:=y22 mod 60;
x21:=x2 div 3600;
x22:=x2 mod 3600;
x31:=x22 div 60;
x32:=x22 mod 60;
statusbar1.Panels[0].Text :=' '+'东经'+inttostr(x21)+'度'+inttostr(x31)+'分'+inttostr(x32)+'秒'+' '
+'北纬'+inttostr(y21)+'度'+inttostr(y31)+'分'+inttostr(y32)+'秒' ;
statusbar1.Panels[0].Width:=240;
处理的区域范围为 (0,0),(1828,0),(1787,3076),(0,3049),
以一个经度和一个纬度的区域,每纬度间隔的经度距相等。纬度线可忽略为直线,
误差在GPS的误差范围左右,若误差小,可设处理范围小于一个经纬度。
Alf是CANVAS的正方形长度(公里),16。372943806是每公里多少象素。
2. 放大缩小的经纬度变化。
在以上的round 前面乘放大缩小系数(可使用滚动条控制)。若以CANVAS的左上角为原点,
可不加判断;若CANVAS的中心点为原点,要判断X,Y方向的正负变化。

 
上面是我程序中的一段,不好理解。下面是原始公式:
(x1,y1)为象素点的坐标值。
(x2,y2)为纬度和经度值(以秒为单位)。
Y2=32*10*10﹣round((y1﹣yA)/((yB﹣yA)/3600));
X2=116*60*60+round((x1﹣xa+((y1﹣yA)/(yD﹣yA)*((xC-xD)-(xB-xA)))/((xB-xA)/3600));

A是左上角,B是右上角,C是右下角,D是左下角。X方向是经度方向,Y方向是纬度方向。
 
lgmxeeri:如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
请认真阅读大富翁论坛规则说明 http://www.delphibbs.com/delphibbs/rules.htm
 
多人接受答案了。
 
后退
顶部