Kml 在Google Earth插件中旋转地球仪,计算范围/缩放

Kml 在Google Earth插件中旋转地球仪,计算范围/缩放,kml,google-earth,google-earth-plugin,Kml,Google Earth,Google Earth Plugin,我正试图通过代码旋转谷歌地球插件地球仪。我正在使用一个第三方控制器来移动它,它嵌入在一个调用JavaScript函数的WPF应用程序中 我的理想解决方案是精确模拟HUD按钮。当我告诉地球仪“向右旋转”或“向下旋转”时,我希望地球仪的行为就像我按下HUD按钮一样。可能吗 由于我还没有找到上述问题的解决方案,我创建了一些方法,通过一系列调用“lookAt.setLongitude()”来旋转地球。该解决方案的基本原理是,每次调用JavaScript函数时,我都会向经度(或纬度)添加一定量的值 我的问

我正试图通过代码旋转谷歌地球插件地球仪。我正在使用一个第三方控制器来移动它,它嵌入在一个调用JavaScript函数的WPF应用程序中

我的理想解决方案是精确模拟HUD按钮。当我告诉地球仪“向右旋转”或“向下旋转”时,我希望地球仪的行为就像我按下HUD按钮一样。可能吗

由于我还没有找到上述问题的解决方案,我创建了一些方法,通过一系列调用“lookAt.setLongitude()”来旋转地球。该解决方案的基本原理是,每次调用JavaScript函数时,我都会向经度(或纬度)添加一定量的值

我的问题是,我还没有弄清楚如何计算范围(又名:用户缩放的距离有多近/有多远)!当距离达到一定距离时,在经度上加上“25”效果很好——但如果距离地球表面更远或更近,解决方案很快就会崩溃

是否有一种自动计算范围的方法,或者是否有人对基于当前范围调整横向/纵向移动的良好算法有任何指示


谢谢大家!

如果您从
ge.getView()
获取视图的当前外观,还可以获取视图的当前范围

var lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
var newLook = ge.createLookAt('');
newLook.setLatitude(lookAt.getLatitude());
newLook.setLongitude(lookAt.getLongitude() + 25.00); //or however you want to rotate
newLook.setRange(lookAt.getRange());
ge.getView().setAbstractView(newLook);

小提琴:

没有一种自动方法可以计算出使地球仪在不同的缩放级别下以相同的数量移动的范围。基本上,如果将视图移动25度,则移动视图的幅度就是25度

var lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
var newLook = ge.createLookAt('');
newLook.setLatitude(lookAt.getLatitude());
newLook.setLongitude(lookAt.getLongitude() + 25.00); //or however you want to rotate
newLook.setRange(lookAt.getRange());
ge.getView().setAbstractView(newLook);
如果希望根据范围增加移动量,则只需将范围用作计算中的某个变量即可。你至少应该发布一些代码,并说明如果你尝试了这一点并被卡住了,为什么它不起作用

编辑


另一个选择可能是简单地模拟按键,为您旋转地球仪。根据您的设置,您应该能够发送一个箭头键或一个控制键a、w、s或d,从而使插件旋转,就像您按下HUD上的按钮一样。

谢谢。不过我想做的是根据缩放增加/减少移动量。当放大到地球上很远的地方时,加上25是一个很好的值,但是放大到一个城市时,这个值太大了。我希望在放大/缩小时有一个内部功能可以移动更多/更少。。。但听起来我必须创建自己的算法。@EvilyClosetMonkey您可能需要使用距离与经度的比率-这一部分必须由您决定。谢谢Fraser。你知道有什么公共算法可以做到这一点吗?我当然可以玩这些数字(一遍又一遍,直到我把它们弄对为止),但我相信其他人已经解决了这个问题,他们在三维旋转计算方面的知识比我多得多。:)到目前为止,我的努力只是创建了一个范围乐队。在1-5之间,自旋X;在6-10之间,旋转Y;在11-15之间,旋转Z。。。例如