2012-06-26 2 views
0

Я создаю приложение геоинформации для моей диссертации, используя инструменты Google, в первую очередь Google Earth api. Я пытаюсь объединить некоторые области с моими метками, чтобы я мог создавать разные уровни детализации, так что некоторые метки (большие многоугольники, представляющие регионы) появляются, когда камера достаточно далеко, и появляются другие, более мелкие многоугольники (представляющие меньшие области), когда камера приближается (и большие будут исчезать).Невозможно добавить объект «региона» в «папку» при использовании GoogleEarthAPI

Я знаю теоретически, что для этого я должен заключать метки в регионах и устанавливать минимальные и максимальные значения пикселей, но моя проблема начинается, когда я пытаюсь создать сам регион.

Более конкретно, мне удается создать регион, но ошибка возникает, когда я пытаюсь добавить его в папку. Сообщение об ошибке не очень помогает мне, потому что оно происходит от функции обратного вызова init, которая содержит остальную часть кода.

«Uncaught Ошибка: Ошибка вызова метода на 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); 

Если я удалить строку: «папку. getFeatures() AppendChild (область);». работает отлично, но мне нужны регионы, или другое решение perhups. И я почти уверен, что проблема в том, что-то простое, что я не хватает ... :(

Любая помощь приветствуется. Заранее спасибо за ваше время.

ответ

0

мне делать, если это не знаю будет работать или нет, но просто для удовольствия, попробуйте сделать все четыре создать * callss в коде с произвольными именами вместо «».

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'); 

Я получил ошибку вы упомянули, прежде чем при переходе «» как аргумент для создания * методов.

+0

Это стоит попробовать но, к сожалению, это не сработало. Спасибо за ответ в любом случае! :) Назад к чертежной доске для меня ...:/ – Humunculus84

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); 

Как я скучаю, что член в первую очередь ... Я должен остановиться и отдохнуть чаще:/

0

У меня была другая мысль о получении KML в плагин Google Планета Земля. Я столкнулся с подобными проблемами, пытаясь выяснить, какие методы будут добавлять объекты, в которых точки иерархии KML.В моем приложении я был в состоянии обойти, используя структурные части KML на API на всех, используя код, который написал KML я хотел как строку, а затем с помощью метода parseKML как в:

var myKML = ''; 
//build kml text and assign it to myKML 
built_track = ge.parseKml(myKML); 
ge.getFeatures().appendChild(built_track); 
+0

Да, это был мой первый подход, который я бросил по той или иной причине, о котором я сейчас не совсем помню: P Но, да, это очень жизнеспособную стратегию, которую я могу принять для некоторых частей позже. Спасибо за ответ :) – Humunculus84

 Смежные вопросы

  • Нет связанных вопросов^_^