0

我正在为我的论文构建一个地理可视化应用程序,使用谷歌的工具,最著名的是谷歌地球 api。我正在尝试将一些区域与我的地标组合,以便我可以创建不同级别的细节,以便当相机足够远时出现一些地标(代表区域的较大多边形),而当相机足够远时出现其他较小的多边形(代表较小区域)相机放大(较大的会消失)。

我知道理论上要实现这一点,我必须将地标括在区域中并设置最小和最大像素值,但是当我尝试创建区域本身时,我的问题就开始了。

更具体地说,我成功创建了该区域,但是当我尝试将其附加到文件夹中时出现错误。错误消息对我没有多大帮助,因为它来自包含其余代码的 init 回调函数。

“未捕获的错误:在 NPObject 上调用方法时出错。”

有问题的代码部分如下:

                    //Try to create region
                    //experimental
                    var folder = ge.createFolder('');
                    var region = ge.createRegion('');
                    var box = ge.createLatLonAltBox('');
                    box.setAltBox(<?= $latitude + 0.035 ?>, <?= $latitude - 0.035 ?>, <?= $longitude + 0.035 ?>, <?= $longitude - 0035 ?>, 0.0, 0.0, 0.0, ge.ALTITUDE_CLAMP_TO_GROUND);
                    region.setLatLonAltBox(box);
                    var lod = ge.createLod('');
                    lod.setMinLodPixels(20.0);
                    region.setLod(lod);

                    //---------------------

                    // Create the placemark.
                    //and add it to the map
                    var placemark = makeSimplePlacemark(<?= $latitude ?>, <?= $longitude ?>,  '<?= $location ?>');
                    folder.getFeatures().appendChild(region);
                    folder.getFeatures().appendChild(placemark); 
                    ge.getFeatures().appendChild(folder);

如果我删除以下行:“folder.getFeatures().appendChild(region);” 它工作正常,但我需要区域或其他解决方案 perhups。而且我几乎可以肯定,问题很简单,我错过了... :(

任何帮助表示赞赏。提前感谢您的宝贵时间。

4

3 回答 3

0

我不知道这是否可行,但只是为了好玩,尝试在代码中使用任意名称而不是 '' 进行所有四个 create* 调用。

var folder = ge.createFolder('test1');
var region = ge.createRegion('test2');
var box = ge.createLatLonAltBox('test3');
box.setAltBox(<?= $latitude + 0.035 ?>, <?= $latitude - 0.035 ?>, <?= $longitude + 0.035 ?>, <?= $longitude - 0035 ?>, 0.0, 0.0, 0.0, ge.ALTITUDE_CLAMP_TO_GROUND);
region.setLatLonAltBox(box);
var lod = ge.createLod('test4');

在将 '' 作为参数传递给 create* 方法时,我收到了您之前提到的错误。

于 2012-06-26T17:26:28.700 回答
0

我对将 KML 加入 Google 地球插件有另一个想法。我遇到了类似的问题,试图找出哪些方法会在 KML 层次结构中的哪些点添加哪些对象。在我的应用程序中,通过使用将我想要的 KML 编写为字符串的代码,然后使用 parseKML 方法,我完全可以绕过 API 的 KML 结构部分:

var myKML = '';
//build kml text and assign it to myKML
built_track = ge.parseKml(myKML);
ge.getFeatures().appendChild(built_track);
于 2012-06-27T12:01:45.430 回答
0

毕竟我找到了答案。我想,睡个好觉总是有帮助的。

尝试使用 append 将区域添加到文件夹项作为子节点似乎是错误的。我认为我应该这样做,因为在 kml 格式中,区域和地标节点都嵌套在同一级别的文件夹节点中。

但似乎通过插件 API 有一个专用的 setRegion(kmlRegion) 成员用于此目的。好消息是这个成员也存在于 kmlPlacemarks 中,所以我什至不需要创建文件夹(至少出于这个原因)。

正确的代码是:

                    //Try to create region          
                    //experimental
                    var region = ge.createRegion('');
                    var box = ge.createLatLonAltBox('');
                    box.setAltBox(<?= $latitude + 0.035 ?>, <?= $latitude - 0.035 ?>, <?= $longitude + 0.035 ?>, <?= $longitude - 0.035 ?>, 0.0, 0.0, 0.0, ge.ALTITUDE_CLAMP_TO_GROUND);
                    region.setLatLonAltBox(box);
                    var lod = ge.createLod('');
                    lod.set(128,-1,64,256);
                    region.setLod(lod);

                    //---------------------

                    // Create the placemark.
                    //and add it to the map
                    var placemark = makeSimplePlacemark(<?= $latitude ?>, <?= $longitude ?>,  '<?= $location ?>');
                    placemark.setRegion(region);
                    ge.getFeatures().appendChild(placemark);

一开始我是怎么想念那个成员的……我应该经常停下来休息一下:/

于 2012-06-27T07:06:42.640 回答