2012-05-21 1 views
0

Прежде всего спасибо за чтение. У меня есть веб-приложение, которое сильно использует плагин Google Планета Земля, чтобы показать некоторые данные датчиков и другие вещи. Я пытаюсь дать пользователю возможность определять области и тома, рисуя их в плагине. Мне удалось добавить функции области (например, создание, визуализация, редактирование и удаление). Теперь я работаю над томами, но я действительно не знаю, как лучше всего их обрабатывать. Важно отметить, что меня интересуют только объемы с параллельной верхней и нижней поверхностью (без пирамиды, без сложных фигур, только prisms) Первой мыслью, которая пришла мне на ум, является создание пользовательского объекта из 2-х многоугольников и массив ребер для соединения каждой вершины многоугольника верхней поверхности с соответствующей на нижней поверхности. Что-то вроде:создать 3d-форму в плагине google earth

//Create the upper surface (polygon) 
    var aPolygonUpperPlacemark = ge.createPlacemark(""); 
    var aPolygonUpper = ge.createPolygon(""); 
    aPolygonUpper.setAltitudeMode(ge.ALTITUDE_RELATIVE_TO_GROUND); 
    aPolygonUpperPlacemark.setGeometry(aPolygonUpper); 
    var aOuterUpper = ge.createLinearRing(""); 
    aPolygonUpper.setOuterBoundary(aOuterUpper); 
    ge.getFeatures().appendChild(aPolygonUpperPlacemark); 

    //Create the lower surface (polygon) 
    var aPolygonLowerPlacemark = ge.createPlacemark(""); 
    var aPolygonLower = ge.createPolygon(""); 
    aPolygonLower.setAltitudeMode(ge.ALTITUDE_RELATIVE_TO_GROUND); 
    aPolygonLowerPlacemark.setGeometry(aPolygonLower); 
    var aOuterLower = ge.createLinearRing(""); 
    aPolygonLower.setOuterBoundary(aOuterLower); 
    ge.getFeatures().appendChild(aPolygonLowerPlacemark); 

    var myPrism = { 
     upperSurface: aPolygonUpperPlacemark, 
     lowerSurface: aPolygonLowerPlacemark, 
     edges: new Array() 
    }; 

proble здесь является то, что боковые поверхности не будут отображаться в виде реальных поверхностей, но только в виде линий. С другой стороны, я мог бы создать еще один полигон для каждой боковой поверхности, но это сделало бы управление такой 3d-формой более сложной, чем то, что я бы хотел.
Итак, мой вопрос в том, есть ли лучший способ обработки 3d-фигур или, может быть, встроенной геометрии?
Nota, что я не могу полагаться на 3d-модели (поэтому внешний Kmz не может быть загружен), так как в конце создание 3d-фигуры будет функцией пользователя.

ответ

1

Просто создайте верхний многоугольник (например, убедитесь, что координаты включают высоту), а затем убедитесь, что установлено значение 1. Вы можете сделать это в API с помощью setExtrude (true).

См https://developers.google.com/kml/documentation/kml_tut#polygons подробности

Я также рекомендую вам проверить библиотеку утилиты - это такие вещи, как это гораздо более кратким. См. Например, этот пример экструдированного многоугольника: http://earth-api-utility-library.googlecode.com/svn/trunk/extensions/examples/poly-draw-extruded.html

+0

Я прочитал из API, что setExtrude (true) заставляет ploygon подключаться к земле. Возможно ли, чтобы верхний и нижний полигоны имели пользовательскую высоту? – andreapier

+0

Вид. Вы также можете использовать gx: altitudeOffset, чтобы поднять каждый из LinearRings полигонов (аналогично влиянию на Polygon напрямую): https://developers.google.com/kml/documentation/kmlreference#gxaltitudeoffset – jlivni

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

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