Объектная модель citygml4j внимательно следит за XML-кодировкой CityGML. Таким образом, XML-схемы CityGML и CityGML specification document помогают.
Ознакомьтесь со следующим фрагментом CityGML здания, имеющего поверхность стены и дверь. Чтобы это было просто, я опустил какие-либо пространственные или тематические свойства.
<bldg:Building>
...
<bldg:boundedBy>
<bldg:WallSurface>
...
<bldg:opening>
<bldg:Door>
...
</bldg:Door>
</bldg:opening>
</bldg:WallSurface>
</bldg:boundedBy>
</bldg:Building>
Обратите внимание, что функция Door
подключается к WallSurface
через свойство opening
функций. Аналогично, функция Building
имеет свойство функции boundedBy
, которое содержит WallSurface
.
Теперь просто постройте одну и ту же иерархию с объектами citygml4j.
// create building, wall surface and door
Building building = new Building();
WallSurface wallSurface = new WallSurface();
Door door = new Door();
// add door to wall surface through an opening property
OpeningProperty opening = new OpeningProperty(door);
wallSurface.addOpening(opening);
// add wall surface to building through boundedBy property
BoundarySurfaceProperty boundedBy = new BoundarySurfaceProperty(wallSurface);
building.addBoundedBySurface(boundedBy);
Наконец, добавьте некоторую геометрию и атрибуты. Например, добавьте gml:MultiSurface
в виде LoD 3 представления WallSurface
.
MultiSurface geometry = new MultiSurface();
// ... add surface members containing the vertices ...
// add geometry to the wall surface
wallSurface.setLod3MultiSurface(new MultiSurfaceProperty(geometry));
Опять же, как построить геометрию GML, следует схема XML. citygml4j поставляется с большим количеством примеров кода. Ознакомьтесь с образцом BuildingCreator.java
, который иллюстрирует, как создавать геометрии. Но вы можете также заполнить объекты геометрии по-разному.
Надеюсь, это поможет.