In answer to a feature request submitted through citygml4j's issue tracker (find the request here), I have published citygml4j 2.0ea as a Maven artifact today. I hope this will help all Maven users who want to develop CityGML-aware software with citygml4j.
The citygml4j artifact has already been synced with the central Maven repository (see here) and hence is ready to be used. I will deploy artifacts for the previous versions of citygml4j in the next days.
Note that the 2.0ea artifact requires Java 6 or higher due to JAXB not supporting Java 5 since version 2.2.5 anymore.
Have fun :-)
citygml4j 2.0ea has been released today and is available for download from the Files section.
This is an early access release of the next major version 2.0 of citygml4j.
As announced two months ago, its most notable new feature is the full support for CityGML 2.0.
Further additions and changes include:
- Read-only support for CityGML 0.4.0 (full support has been discontinued)
- Added filtered CityGML reader
- Added support for
- CityGML XML chunks can now be accessed directly from readers before unmarshalling
- Updated all example programs shipped with the library
- Updated to GML 220.127.116.11 (due to OGC Xlink Policy)
- Updated to JAXB 2.2.5-2
- Incorporated JAMA 1.0.2 library for matrix calculations
- Minor bug fixes
Check the Changelog for more details.
Unfortunately, I have not yet found the time to prepare more detailed release notes or code snippets in the Wiki as for previous releases. But I did not want to defer the pre-release any longer. The download package comes with a range of sample programs. I have updated all of them and added some new examples. So you can learn about the new features and changes by simply reviewing their source code. Each example provides its own
Ant build script which allows you to easily run the program (note that some of the
Ant scripts even have more than one run target).
Demonstrates upgrading/downgrading a CityGML instance document between CityGML versions 2.0 and 1.0
Illustrates the read-only support for CityGML 0.4.0 instance documents which are internally mapped onto CityGML 1.0.0
CityGML readers can be customized to only process specific CityGML feature types and to skip the rest
When reading CityGML chunk-wise, the chunks can be fed to several threads before unmarshalling in order to speed up processing
The support for CityGML 2.0 required some minor changes to the citygml4j API. Thus, if you replace the
citygml4j.jar library file in exisiting projects with the latest version 2.0ea, you will most likely run into compile errors. The following list provides the most important reasons.
- Changes to the enumeration of CityGML elements in
In CityGML 2.0, some feature types share the same name across CityGML modules. For example, there exists a
WallSurfacefeature in the
Tunnelmodules (in fact, all boundary surfaces share the same name). In order to ensure unique values in the
CityGMLClassenumeration, some of the entries had to be renamed correspondingly. Simply update to the new values. For example,
WALL_SURFACEneeds to be replaced with
- Interface layer removed
The citygml4j object model is split into interfaces and implementation classes in citygml4j 1.0. Since there has only been a single implementation of the interfaces, this separation has been resolved. In citygml4j 2.0ea, all object classes are located in
org.citygml4j.modeland share the same name as the interfaces in version 1.0. If you have not explicitly used the implementation classes from the package
org.citygml4j.implin your code, then you do not have to adapt any import statements.
- CityGML factories removed
Due to the above change, the factories for creating instances of the object classes became obsolete and have been deleted. Every
createmethod has been replaced by a constructor of the corresponding object class. For example, the following citygml4j 1.0 snippet
can be easily rewritten as
1 CityGMLFactory citygml = new CityGMLFactory(); 2 ... 3 Building building = citygml.createBuilding();
1 Building building = new Building();
Since this is an early access release, your feedback is required and desired. Please report any bugs or defects through the issue tracker on this site.
Any other discussions or questions are welcome in the Forums section.
Have fun :-)
On 24 April 2012, the Open Geospatial Consortium membership adopted version 2.0 of CityGML (see the official press release for more information).
I have been working since then on adding support for CityGML 2.0 in citygml4j. Most of the implementation work is complete and a release candidate of the upcoming version 2.0 of citygml4j will hopefully be available soon. Only minor things such as testing, some modifications to the sample programs, and Wiki documentation are still open. However, I am strongly focusing on my PhD thesis currently - so stay tuned!
Besides some new features and bugfixes, citygml4j 2.0 will also bring minor changes to the API in order to support CityGML 2.0. My current plans are to discontinue the full support for CityGML 0.4.0 as this version has never been an official OGC standard. Reading CityGML 0.4.0 instances will still be possible by internally mapping them onto CityGML 1.0 instances. But support for writing and validating will be canceled. Let me know what you all think about this by leaving a comment below.
You can follow the development in the 1.1-devel branch (initially, a minor revision of CityGML to version 1.1 was planned) of the citygml4j SVN repository. The branch is highly unstable and is not recommended for porting exisiting citygml4j-based software.
I am happy to announce that citygml4j has finally reached version 1.0 after almost two years of development and its first release back in 2008. citygml4j 1.0 is available for download from the Files section.
citygml4j 1.0 is a major release and built on top of the previous early access release which has been published seven months ago. The most notable changes between this release and its early access version are:
- Simple access to all geometry representations of a city object in all levels of detail
gml:RectifiedGridCoverageis now supported
<app:Appearance>elements of parent CityGML features are accessible when reading a CityGML document chunk-wise
- Added abstract walker classes implementing the functor interfaces for visiting geometries, features, and GML objects
- Added common root interface
ModelObjectto the citygml4j data model
- Improved memory consumption of CityGML reader classes when reading a CityGML document chunk-wise
- Minor bug fixes
Thanks for using citygml4j.
Have fun :-)
citygml4j 1.0ea has been released and is available for download from the Files section.This is an early access release of the next major revision of citygml4j.
It brings many new features and functionalities to citygml4j developers, such as:
- CityGML reader and writer classes
- Visitor pattern support
- CityGML tree-walker classes
- Feature splitter
- XLink resolver
- Traversing up the CityGML tree using parent pointers
- Deep and shallow copies of content classes
- XML validation
- XML Schema handling
- Redesign of handling ADEs
- Tight coupling between citygml4j and JAXB relaxed and
- Smaller big fixes in citygml4j interface layer
The distribution package comes with over 30 sample citygml4j programs which illustrate the usage of the new features.
Browse the release notes for more details.
Since this is an early access release, your feedback is required and desired. Please report any bugs or defects through the
issue tracker on this site. Any other discussion is welcome in the Forums section.
Please note, that version 1.0ea is not backwards compatible with any previous version of citygml4j.
The SVN trunk sources have been cleaned from
@Override annotations on methods implementing an interface (see last news entry).
Thus, starting from now both Java 1.5 and 1.6 versions of the citygml4j library can be directly built from the trunk.
Hope this helps in your Java 1.5 and CityGML software development.
Have fun :)
I just published a new build of the citygml4j 0.2.1 library which has been compiled with Java 1.5.
This version of the citygml4j library is meant to be used in software projects which are restricted
to Java 1.5 and is available for download from the Files section.
The build is based on the previous version 0.2.1 release. In contrast to Java 1.6, Java 1.5 does not
@Override annotations on methods implementing an interface definition. This required minor
source code changes. I created a new SVN branch for this purpose. You can obtain the changed sources
I will gradually delete these
@Override annotations from the trunk version over the next few days as well.
Thus, in the future, the
build.xml ant script can be used to build citygml4j for either Java version without having
to change the source code.
citygml4j 0.2.1 has been released and is available for download from the Files section.
With this release citygml4j is moved to the previously published JAXB version 2.1.10.
Furthermore it includes some minor implementation changes.
See the Changelog for more details.
It is recommended to switch to this new release.
A new tutorial on citygml4j's built-in support for converting content objects between different CityGML versions has been published. This new feature has been introduced in citygml4j version 0.2.0 and can also be used for the purpose of creating shallow copies of the same CityGML version, reclassifying of content objects, partially converting a complete instance document, and converting user-defined content objects in the context of Application Domain Extensions (ADE).
The tutorial is accessible at http://opportunity.bv.tu-berlin.de/software/wiki/citygml4j/Converting_content_objects_between_different_CityGML_versions
A comprehensive tutorial on how to incorporate CityGML Application Domain Extensions (ADE) into your citygml4j application has been published. The tutorial includes example source code based on the CityGML Noise ADE.
The ADE tutorial is accessible at http://opportunity.bv.tu-berlin.de/software/wiki/citygml4j/Adding_your_own_Application_Domain_Extensions_(ADE)_to_citygml4j
Also available in: Atom