[xsd-users] CityGML deserialization - CityModel generation
    Adrian Victor Manoliu 
    victor.manoliu at yahoo.com
       
    Wed Mar  2 05:03:47 EST 2011
    
    
  
Hello,
Thanks for the casting method advice, however I still don't have anything to 
iterate upon, after the parsing is done. From what I've seen, the only way to go 
through the created elements is via the 
_GenericApplicationPropertyOfCityModel_(const_)iterator. In this case, this 
iterator does not work because the begin() and end() methods look in the v_ 
field, which is empty. The field where the items exist perfectly well is 
container_, but I don't have access to that through any public method.
Adrian
----- Original Message ----
From: Boris Kolpackov <boris at codesynthesis.com>
To: Adrian Victor Manoliu <victor.manoliu at yahoo.com>
Cc: xsd-users at codesynthesis.com
Sent: Mon, February 28, 2011 3:48:35 PM
Subject: Re: [xsd-users] CityGML deserialization - CityModel generation
Hi Adrian,
Adrian Victor Manoliu <victor.manoliu at yahoo.com> writes:
> const std::string fName = "waldbruecke_v1.0.0.gml";
> std::auto_ptr<CityModelType> iCity(CityModel(fName, flags.dont_validate)); 
> 
> [...]
> 
> Now, once I have iCity, I simply want to iterate over its elements, that 
> is the Buildings, BuildingParts etc. by doing something like this (I have
> been doing this from the start):
> 
> CityModelType::_GenericApplicationPropertyOfCityModel_const_iterator ci;
> 
> for (ci  = iCity->_GenericApplicationPropertyOfCityModel().begin();
>      ci != iCity->_GenericApplicationPropertyOfCityModel().end();
>      ++ci)
> {
>     [...]
> }  
> 
> however in this case I don't see how I could know what type to cast these 
> objects to
You need to study the GML/CityGML schemas to see which concrete elements
(and types) substitute which abstract elements.
Here is an example body of the above for-loop. Hopefully, it will get you
started:
for (ci  = iCity->_GenericApplicationPropertyOfCityModel().begin();
     ci != iCity->_GenericApplicationPropertyOfCityModel().end();
     ++ci)
{
  xml_schema::type& x (*ci);
  if (gml::FeaturePropertyType* cityObjectMember = 
        dynamic_cast<gml::FeaturePropertyType*> (&x))
  {
    gml::FeaturePropertyType::_Feature_const_iterator fi;
    for (fi = cityObjectMember->_Feature ().begin ();
         fi != cityObjectMember->_Feature ().end ();
         ++fi)
    {
      gml::AbstractFeatureType& f (*fi);
      if (citygml::building::BuildingType* b = 
        dynamic_cast<citygml::building::BuildingType*> (&f);
      {
        // We've got a building.
      }
      else if (...)
      {
        ...
      }
    }
  }
}
Boris
      
    
    
More information about the xsd-users
mailing list