在我的网络应用程序中,我有一些我想要修改的坐标界限来模拟谷歌地图上的“放大”。似乎使用谷歌地图来回缩放只是将边界框的每一边加倍或减半。所以我在服务器上执行此操作的功能如下所示:
private static decimal[] ZoomIn(decimal latMax, decimal lngMin, decimal latMin, decimal lngMax)
{
decimal lngAdjustment = (lngMax - lngMin) * .25m;
decimal latAdjustment = (latMax - latMin) * .25m;
return new[]
{
// North
latMax - latAdjustment,
// West
lngMin + lngAdjustment,
// South
latMin + latAdjustment,
// East
lngMax - lngAdjustment
};
}
这种方法的问题是我正在做的 latAdjustment 。与使用谷歌地图控件的实际缩放相比,当放大到城市级别时,这最终会相当准确。但是,视图缩小的距离越不准确。我认为这是由于谷歌地图使用的地球墨卡托投影。是否有人知道使用更好的公式或方法来模拟“缩放”?
更新 我的问题更多地与不知道正确的公式而不是谷歌地图。让我举例说明使用一些样本数字。
以芝加哥为中心,以41.8563226156679为中心,-87.7339862646484
围绕该点的边界框:
通过观察谷歌地图的行为,这个在一个级别放大的边界框将是: - 西:-87.859470731201100 - 东:-87.608501798095600 - 南:41.701813184067600 - 北:42.010459667660800
(中心保持不变,鼠标移动没有变化等等。我只使用了手动变焦按钮,而不是鼠标)
使用上面的公式,经度值将会正确显示。例如:
west = west +(west-east)* .25 -87.984955197753800 +((-87.483017331542900 - -87.984955197753800)* .25)= -87.859470731201075
然而,在处理纬度时,相同的公式将不起作用。它接近正确的值,但只是足以使地图显着移动。对于较大的边界框和/或当纬度远离赤道时,这种效果更差。我认为这是由于地球的墨卡托投影。 Trig课程很久以前对我而言,此时我无法为这种情况找到适合缩放范围的公式。
答案 0 :(得分:0)
根据您的测试方法使用鼠标这一事实判断,我认为您的测试方法是问题所在。由于地图根据鼠标的中心而不是屏幕的中心进行不同的放大,因此边界变化,但不是它们之间的差异。这似乎与你提供的细节一致。
直观地说,你的公式没有任何问题 - 只是你如何测试它。