读书人

怎么用metersToEquatorPixels实现任意

发布时间: 2012-06-26 10:04:14 作者: rapoo

如何用metersToEquatorPixels实现任意纬度的米到像素的转换

今天又是神奇的发现:我希望在MapView的Overlay子类里画一个半径为 R米 的圆,于是用 metersToEquatorPixels 函数,将一个距离 ?R米 转换为一个以当前缩放等级下像素为单位的距离。调用的时候也没太注意,结果画出来的圆确实让我费解了阵子,仔细一看发现Equator这个单词,于是大概有点明白了。查了一下etersToEquatorPixels 函数的解释:该方法把以米为计量单位的距离(沿赤道)在当前缩放水平下转换到一个以像素(水平)为计量单位的距离。在默认的Mercator投影变换下,对于给定的距离,当远离赤道时,变换后确切的像素数量会增加。

SO,解决办法就是要将赤道,也就是零纬度的米对应的像素距离换算成我们需要的纬度的 米 对应的像素距离。我们可以写这么一个方法来实现:

?


?

以上转自: http://cosyattic.com/archives/152

?

以下原创:

?

其实也可以这么理解,根据“GOOGLE MAP 源码”(关于源码,请参见:http://rainbow702.iteye.com/blog/1124280),我们可以看到该方法的实现:

?

所以,假设赤道的半径为 R,我们所处的纬度为 α 度的平面(如上图红线所画的平面)的半径为?r,那么应该有以下等式成立(请再看一下metersToEquatorPixels的实现):

2πR * P = 2πr * pp = (R / r) * P

?那么, (R / r) 是什么呢,请看上图,只要是学习简单的立体几何的人应该都可以看来吧。对,它就等于 sec (α), 亦即原帖中所得的结果 1/cos (α)。

?

这样一来,大家都应该知道是怎么一回事了吧。希望对看到这篇博客的人有所帮助。

1 楼 Rainbow702 2011-07-28 Math.cos(Math.toRadians(latitude)) 这里之所以要使用 toRadians 方法,是因为 cos 的参数要求是以弧度为单位的。

读书人网 >移动开发

热点推荐