org.citygml4j.xml.io.CityGMLInputFactory Java Examples

The following examples show how to use org.citygml4j.xml.io.CityGMLInputFactory. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: JAXBInputFactory.java    From citygml4j with Apache License 2.0 6 votes vote down vote up
public Object getProperty(String name) {
	Objects.requireNonNull(name, "property name may not be null.");

	if (name.equals(CityGMLInputFactory.FEATURE_READ_MODE))
		return featureReadMode;
	if (name.equals(CityGMLInputFactory.KEEP_INLINE_APPEARANCE))
		return keepInlineAppearance;
	if (name.equals(CityGMLInputFactory.PARSE_SCHEMA))
		return parseSchema;
	if (name.equals(CityGMLInputFactory.USE_VALIDATION))
		return useValidation;
	if (name.equals(CityGMLInputFactory.EXCLUDE_FROM_SPLITTING))
		return excludes;
	if (name.equals(CityGMLInputFactory.SPLIT_AT_FEATURE_PROPERTY))
		return splitAtFeatureProperties;
	if (name.equals(CityGMLInputFactory.FAIL_ON_MISSING_ADE_SCHEMA))
		return failOnMissingADESchema;
	if (name.equals(CityGMLInputFactory.SKIP_GENERIC_ADE_CONTENT))
		return skipGenericADEContent;
	if (name.equals(CityGMLInputFactory.SUPPORT_CITYGML_VERSION_0_4_0))
		return supportCityGML040;

	throw new IllegalArgumentException("the property '" + name + "' is not supported.");
}
 
Example #2
Source File: CityGMLReader.java    From importer-exporter with Apache License 2.0 5 votes vote down vote up
CityGMLReader(CityGMLInputFilter typeFilter, CounterFilter counterFilter, ValidationErrorHandler validationHandler, CityGMLInputFactory factory, Config config) {
    this.typeFilter = typeFilter;
    this.counterFilter = counterFilter;
    this.validationHandler = validationHandler;
    this.factory = factory;
    this.config = config;

    minThreads = config.getProject().getImporter().getResources().getThreadPool().getDefaultPool().getMinThreads();
    maxThreads = config.getProject().getImporter().getResources().getThreadPool().getDefaultPool().getMaxThreads();

    eventDispatcher = ObjectRegistry.getInstance().getEventDispatcher();
    eventDispatcher.addEventHandler(EventType.INTERRUPT,this);
}
 
Example #3
Source File: ReadingRemoteADE.java    From citygml4j with Apache License 2.0 5 votes vote down vote up
public static void main(String[] args) throws Exception {
	SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] "); 

	System.out.println(df.format(new Date()) + "setting up citygml4j context and CityGML builder");
	CityGMLContext ctx = CityGMLContext.getInstance();
	CityGMLBuilder builder = ctx.createCityGMLBuilder();

	System.out.println(df.format(new Date()) + "reading ADE-enriched CityGML file LOD0_Railway_NoiseADE_from_Web_v200.gml");
	System.out.println(df.format(new Date()) + "remote ADE schema file is read from xsi:schemaLocation attribute on root XML element");
	CityGMLInputFactory in = builder.createCityGMLInputFactory();

	CityGMLReader reader = in.createCityGMLReader(new File("datasets/LOD0_Railway_NoiseADE_from_Web_v200.gml"));
	CityGML citygml = reader.nextFeature();
	reader.close();

	System.out.println(df.format(new Date()) + "exploring ADE content of Railway element");
	CityModel cityModel = (CityModel)citygml;
	Railway railway = (Railway)cityModel.getCityObjectMember().get(0).getCityObject();
	
	if (railway.isSetGenericApplicationPropertyOfRailway()) {
		System.out.println("Found ADE content for Railway instance:\n");

		List<ADEComponent> ades = railway.getGenericApplicationPropertyOfRailway();
		for (ADEComponent ade : ades) {
			if (ade.getADEClass() == ADEClass.GENERIC_ELEMENT)
				checkADE(in.getSchemaHandler(), ((ADEGenericElement)ade).getContent(), null, 0);
		}
	}
	
	System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished");
}
 
Example #4
Source File: AbstractJAXBReader.java    From citygml4j with Apache License 2.0 5 votes vote down vote up
@SuppressWarnings("unchecked")
public AbstractJAXBReader(XMLStreamReader reader, InputStream in, JAXBInputFactory factory, URI baseURI) throws CityGMLReadException {
	if ((Boolean)factory.getProperty(CityGMLInputFactory.SUPPORT_CITYGML_VERSION_0_4_0))
		reader = new CityGMLNamespaceMapper(reader);

	this.reader = reader;
	this.in = in;
	this.factory = factory;
	this.baseURI = baseURI;

	transformerChainFactory = factory.getTransformerChainFactory();
	parseSchema = (Boolean)factory.getProperty(CityGMLInputFactory.PARSE_SCHEMA);
	useValidation = (Boolean)factory.getProperty(CityGMLInputFactory.USE_VALIDATION);
	boolean failOnMissingADESchema = (Boolean)factory.getProperty(CityGMLInputFactory.FAIL_ON_MISSING_ADE_SCHEMA);

	schemaHandler = factory.getSchemaHandler();
	jaxbUnmarshaller = factory.builder.createJAXBUnmarshaller(schemaHandler);
	jaxbUnmarshaller.setThrowMissingADESchema(failOnMissingADESchema);
	jaxbUnmarshaller.setSkipGenericADEContent((Boolean)factory.getProperty(CityGMLInputFactory.SKIP_GENERIC_ADE_CONTENT));

	elementChecker = new XMLElementChecker(schemaHandler, 
			(FeatureReadMode)factory.getProperty(CityGMLInputFactory.FEATURE_READ_MODE),
			(Boolean)factory.getProperty(CityGMLInputFactory.KEEP_INLINE_APPEARANCE),
			parseSchema,
			failOnMissingADESchema,
			(List<QName>)factory.getProperty(CityGMLInputFactory.EXCLUDE_FROM_SPLITTING),
			(List<QName>)factory.getProperty(CityGMLInputFactory.SPLIT_AT_FEATURE_PROPERTY));

	if (useValidation) {
		validationSchemaHandler = new ValidationSchemaHandler(schemaHandler);
		validationEventHandler = factory.getValidationEventHandler();
	}
}
 
Example #5
Source File: ReadingLocalADE.java    From citygml4j with Apache License 2.0 5 votes vote down vote up
public static void main(String[] args) throws Exception {
	SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] "); 

	System.out.println(df.format(new Date()) + "setting up citygml4j context and CityGML builder");
	CityGMLContext ctx = CityGMLContext.getInstance();
	CityGMLBuilder builder = ctx.createCityGMLBuilder();

	System.out.println(df.format(new Date()) + "reading ADE-enriched CityGML file LOD0_Railway_NoiseADE_v200.gml");
	System.out.println(df.format(new Date()) + "ADE schema file is read from xsi:schemaLocation attribute on root XML element");
	CityGMLInputFactory in = builder.createCityGMLInputFactory();

	CityGMLReader reader = in.createCityGMLReader(new File("datasets/LOD0_Railway_NoiseADE_v200.gml"));
	CityGML citygml = reader.nextFeature();
	reader.close();

	System.out.println(df.format(new Date()) + "exploring ADE content of Railway element");
	CityModel cityModel = (CityModel)citygml;
	Railway railway = (Railway)cityModel.getCityObjectMember().get(0).getCityObject();
	
	if (railway.isSetGenericApplicationPropertyOfRailway()) {
		System.out.println("Found ADE content for Railway instance:\n");

		List<ADEComponent> ades = railway.getGenericApplicationPropertyOfRailway();
		for (ADEComponent ade : ades) {
			if (ade.getADEClass() == ADEClass.GENERIC_ELEMENT)
				checkADE(in.getSchemaHandler(), ((ADEGenericElement)ade).getContent(), null, 0);
		}
	}
	
	System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished");
}
 
Example #6
Source File: FilteredReader.java    From citygml4j with Apache License 2.0 5 votes vote down vote up
public static void main(String[] args) throws Exception {
	SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] "); 

	System.out.println(df.format(new Date()) + "setting up citygml4j context and CityGML builder");
	CityGMLContext ctx = CityGMLContext.getInstance();
	CityGMLBuilder builder = ctx.createCityGMLBuilder();

	System.out.println(df.format(new Date()) + "reading only roads from CityGML file LOD2_CityObjectGroup_v100.gml");
	CityGMLInputFactory in = builder.createCityGMLInputFactory();
	in.setProperty(CityGMLInputFactory.FEATURE_READ_MODE, FeatureReadMode.SPLIT_PER_FEATURE);

	CityGMLReader reader = in.createCityGMLReader(new File("datasets/LOD2_CityObjectGroup_v100.gml"));
	reader = in.createFilteredCityGMLReader(reader, new CityGMLInputFilter() {

		// return true if you want to consume the CityGML feature
		// of the given qualified XML name, false otherwise
		public boolean accept(QName name) {
			return Modules.isModuleNamespace(name.getNamespaceURI(), CityGMLModuleType.TRANSPORTATION)
					&& name.getLocalPart().equals("Road");
		}
		
	});

	System.out.println(df.format(new Date()) + "printing road features");
	while (reader.hasNext()) {
		Road road = (Road)reader.nextFeature();
		System.out.println(df.format(new Date()) + "found Road with gml:id " + road.getId());	
		
		System.out.println(df.format(new Date()) + "\t" + road.getTrafficArea().size() + " traffic area(s)");	
		System.out.println(df.format(new Date()) + "\t" + road.getAuxiliaryTrafficArea().size() + " auxiliary traffic area(s)");	
	}

	reader.close();
	System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished");
}
 
Example #7
Source File: SimpleReader.java    From citygml4j with Apache License 2.0 5 votes vote down vote up
public static void main(String[] args) throws Exception {
	SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] "); 

	System.out.println(df.format(new Date()) + "setting up citygml4j context and CityGML builder");
	CityGMLContext ctx = CityGMLContext.getInstance();
	CityGMLBuilder builder = ctx.createCityGMLBuilder();
	
	System.out.println(df.format(new Date()) + "reading CityGML file LOD2_Buildings_v100.gml completely into main memory");
	CityGMLInputFactory in = builder.createCityGMLInputFactory();
	CityGMLReader reader = in.createCityGMLReader(new File("datasets/LOD2_Buildings_v100.gml"));
	
	while (reader.hasNext()) {
		CityGML citygml = reader.nextFeature();

		if (citygml.getCityGMLClass() == CityGMLClass.CITY_MODEL) {
			CityModel cityModel = (CityModel)citygml;

			System.out.println(df.format(new Date()) + "Found " + citygml.getCityGMLClass() + " version " + cityModel.getModule().getVersion());
			System.out.println(df.format(new Date()) + "going through city model and counting building instances");

			int count = 0;
			for (CityObjectMember cityObjectMember : cityModel.getCityObjectMember()) {
				AbstractCityObject cityObject = cityObjectMember.getCityObject();
				if (cityObject.getCityGMLClass() == CityGMLClass.BUILDING)
					count++;
			}

			System.out.println(df.format(new Date()) + "The city model contains " + count + " building features");
		}	
	}			
	
	reader.close();
	System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished");
}
 
Example #8
Source File: FeatureChunkReader.java    From citygml4j with Apache License 2.0 5 votes vote down vote up
public static void main(String[] args) throws Exception {
	SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] "); 

	System.out.println(df.format(new Date()) + "setting up citygml4j context and CityGML builder");
	CityGMLContext ctx = CityGMLContext.getInstance();
	CityGMLBuilder builder = ctx.createCityGMLBuilder();
	
	System.out.println(df.format(new Date()) + "reading CityGML file LOD3_Building_v200.gml feature by feature");
	CityGMLInputFactory in = builder.createCityGMLInputFactory();
	in.setProperty(CityGMLInputFactory.FEATURE_READ_MODE, FeatureReadMode.SPLIT_PER_FEATURE);
	in.setProperty(CityGMLInputFactory.EXCLUDE_FROM_SPLITTING, new QName[]{new QName("Door"), new QName("Address")});

	// see difference when setting to true
	in.setProperty(CityGMLInputFactory.KEEP_INLINE_APPEARANCE, false);
	
	CityGMLReader reader = in.createCityGMLReader(new File("datasets/LOD3_Building_v200.gml"));
	
	System.out.println(df.format(new Date()) + "printing feature currently read and its (transitive) parents");
	while (reader.hasNext()) {
		CityGML chunk = reader.nextFeature();	
		System.out.println("found: " + chunk.getCityGMLClass());
		
		if (reader.isSetParentInfo()) {
			ParentInfo parentInfo = reader.getParentInfo();
			System.out.println(" --parent: " + parentInfo.getCityGMLClass());
			
			while ((parentInfo = parentInfo.getParentInfo()) != null)
				System.out.println(" --transitive parent: " + parentInfo.getCityGMLClass());
		}
		
	}

	reader.close();
	System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished");
}
 
Example #9
Source File: WrongSchemaLocation.java    From citygml4j with Apache License 2.0 5 votes vote down vote up
public static void main(String[] args) throws Exception {
	SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] "); 

	System.out.println(df.format(new Date()) + "setting up citygml4j context and CityGML builder");
	CityGMLContext ctx = CityGMLContext.getInstance();
	CityGMLBuilder builder = ctx.createCityGMLBuilder();

	System.out.println(df.format(new Date()) + "setting up schema handler");
	SchemaHandler schemaHandler = SchemaHandler.newInstance();
	schemaHandler.setSchemaEntityResolver(new SchemaEntityResolver());
	schemaHandler.setErrorHandler(new SchemaParseErrorHandler());
	
	// register false schema location in order to provoke a schema parse error
	schemaHandler.registerSchemaLocation("http://www.citygml.org/ade/noise_de/2.0", 
			new File("/nowhere/nofile.xsd"));

	System.out.println(df.format(new Date()) + "reading ADE-enriched CityGML file LOD0_Railway_NoiseADE_v200.gml");
	CityGMLInputFactory in = builder.createCityGMLInputFactory(schemaHandler);
	in.setProperty(CityGMLInputFactory.FEATURE_READ_MODE, FeatureReadMode.SPLIT_PER_FEATURE);

	CityGMLReader reader = in.createCityGMLReader(new File("datasets/LOD0_Railway_NoiseADE_v200.gml"));
	
	while (reader.hasNext()) {
		CityGML citygml = reader.nextFeature();
		
		if (citygml instanceof AbstractFeature)
			System.out.println("Found CityGML: " + citygml.getCityGMLClass());
		else if (citygml instanceof ADEGenericElement)
			System.out.println("Found ADE: " + ((ADEGenericElement)citygml).getContent().getLocalName());
	}
	
	reader.close();
	System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished");
}
 
Example #10
Source File: MissingSchemaReference.java    From citygml4j with Apache License 2.0 5 votes vote down vote up
public static void main(String[] args) throws Exception {
	SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] "); 

	System.out.println(df.format(new Date()) + "setting up citygml4j context and CityGML builder");
	CityGMLContext ctx = CityGMLContext.getInstance();
	CityGMLBuilder builder = ctx.createCityGMLBuilder();

	System.out.println(df.format(new Date()) + "setting up schema handler");
	SchemaHandler schemaHandler = SchemaHandler.newInstance();
	schemaHandler.setSchemaEntityResolver(new SchemaEntityResolver());
	schemaHandler.setErrorHandler(new SchemaParseErrorHandler());

	System.out.println(df.format(new Date()) + "reading ADE-enriched CityGML file LOD0_Railway_NoiseADE_missing_ADE_reference_v200.gml");
	System.out.println(df.format(new Date()) + "note: the input document is lacking a reference to the ADE schema document");
	CityGMLInputFactory in = builder.createCityGMLInputFactory(schemaHandler);
	in.setProperty(CityGMLInputFactory.FEATURE_READ_MODE, FeatureReadMode.SPLIT_PER_FEATURE);
	
	CityGMLReader reader = in.createCityGMLReader(new File("datasets/LOD0_Railway_NoiseADE_missing_ADE_reference_v200.gml"));
	
	while (reader.hasNext()) {
		CityGML citygml = reader.nextFeature();
		
		if (citygml instanceof AbstractFeature)
			System.out.println("Found CityGML: " + citygml.getCityGMLClass());
		else if (citygml instanceof ADEGenericElement)
			System.out.println("Found ADE: " + ((ADEGenericElement)citygml).getContent().getLocalName());
	}
	
	reader.close();
	System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished");
}
 
Example #11
Source File: ValidatingChunkReader.java    From citygml4j with Apache License 2.0 5 votes vote down vote up
public static void main(String[] args) throws Exception {
	SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] "); 

	System.out.println(df.format(new Date()) + "setting up citygml4j context and CityGML builder");
	CityGMLContext ctx = CityGMLContext.getInstance();
	CityGMLBuilder builder = ctx.createCityGMLBuilder();
	
	System.out.println(df.format(new Date()) + "reading ADE-enriched CityGML file LOD2_SubsurfaceStructureADE_invalid_v100.gml feature by feature");
	System.out.println(df.format(new Date()) + "ADE schema file is read from xsi:schemaLocation attribute on root XML element");
	CityGMLInputFactory in = builder.createCityGMLInputFactory();
	in.setProperty(CityGMLInputFactory.FEATURE_READ_MODE, FeatureReadMode.SPLIT_PER_FEATURE);
	in.setProperty(CityGMLInputFactory.USE_VALIDATION, true);
	in.registerSchemaLocation("http://www.citygml.org/ade/sub/0.9.0", new File("datasets/schemas/CityGML-SubsurfaceADE-0_9_0.xsd"));
		
	ValidationEventHandlerImpl validationEventHandler = new ValidationEventHandlerImpl();
	in.setValidationEventHandler(validationEventHandler);
	
	CityGMLReader reader = in.createCityGMLReader(new File("datasets/LOD2_SubsurfaceStructureADE_invalid_v100.gml"));
	
	System.out.println(df.format(new Date()) + "validating features whilst reading from file");
	while (reader.hasNext()) {
		CityGML chunk = reader.nextFeature();			

		String type;
		if (chunk instanceof ADEGenericElement){
			Element element = ((ADEGenericElement)chunk).getContent();
			type = element.getPrefix() + ':' + element.getLocalName();
		} else
			type = chunk.getCityGMLClass().toString();
		
		System.out.print(type + ": ");
		System.out.println(validationEventHandler.isValid ? "valid" : "invalid (see error messages above)");

		validationEventHandler.isValid = true;
	}

	reader.close();
	System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished");
}
 
Example #12
Source File: ValidatingSimpleReader.java    From citygml4j with Apache License 2.0 5 votes vote down vote up
public static void main(String[] args) throws Exception {
	SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] "); 

	System.out.println(df.format(new Date()) + "setting up citygml4j context and CityGML builder");
	CityGMLContext ctx = CityGMLContext.getInstance();
	CityGMLBuilder builder = ctx.createCityGMLBuilder();
	
	System.out.println(df.format(new Date()) + "reading ADE-enriched CityGML file LOD2_SubsurfaceStructureADE_invalid_v100.gml");
	System.out.println(df.format(new Date()) + "ADE schema file is read from xsi:schemaLocation attribute on root XML element");
	CityGMLInputFactory in = builder.createCityGMLInputFactory();
	in.setProperty(CityGMLInputFactory.FEATURE_READ_MODE, FeatureReadMode.NO_SPLIT);
	in.parseSchema(new File("datasets/schemas/CityGML-SubsurfaceADE-0_9_0.xsd"));

	in.setProperty(CityGMLInputFactory.USE_VALIDATION, true);	
	in.setValidationEventHandler(event -> {
           System.out.print("[" + event.getLocator().getLineNumber() + "," + event.getLocator().getColumnNumber() + "] ");
           System.out.println(event.getMessage());
           return true;
       });
	
	System.out.println(df.format(new Date()) + "validating ADE-enriched CityGML document whilst reading");
	CityGMLReader reader = in.createCityGMLReader(new File("datasets/LOD2_SubsurfaceStructureADE_invalid_v100.gml"));
	reader.nextFeature();

	reader.close();
	System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished");
}
 
Example #13
Source File: ADEVisitor.java    From citygml4j with Apache License 2.0 4 votes vote down vote up
public static void main(String[] args) throws Exception {
	SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] ");

	/*
	 * For using ADE modules implemented against the ADEContext interface, 
	 * please apply the following steps:
	 * 
	 * 1. Create a CityGMLContext
	 * 2. Register all your ADE modules with the CityGMLContext
	 * 3. Create a CityGMLBuilder and use it to build factories
	 *    for reading/writing a dataset
	 * 
	 * The registered ADE modules are automatically supported by citygml4j.
	 * Thus, there is no need to write ADE-specific code for using default
	 * citygml4j features.
	 */

	System.out.println(df.format(new Date()) + "setting up citygml4j context");
	// step 1: create CityGML context
	CityGMLContext context = CityGMLContext.getInstance();

	// step 2: load NoiseADE context and register with CityGML context
	System.out.println(df.format(new Date()) + "loading NoiseADE context and registering with citygml4j context");
	NoiseADEContext noiseADEContext = new NoiseADEContext();
	context.registerADEContext(noiseADEContext);

	// step 3: create CityGMLBuilder which automatically supports the NoiseADE module
	System.out.println(df.format(new Date()) + "creating CityGML builder");
	CityGMLBuilder builder = context.createCityGMLBuilder();

	// read an ADE-enriched dataset. There is no need for ADE-specific code.
	System.out.println(df.format(new Date()) + "reading ADE-enriched CityGML file LOD0_Railway_NoiseADE_v200.gml");
	CityGMLInputFactory in = builder.createCityGMLInputFactory();

	CityGMLReader reader = in.createCityGMLReader(new File("datasets/LOD0_Railway_NoiseADE_v200.gml"));
	CityModel cityModel = (CityModel)reader.nextFeature();
	reader.close();

	// use default feature walker to visit all features contained in the city model.
	// Since a default walker has no special visit methods for ADE features,
	// we have to use a superclass to visit them.
	System.out.println(df.format(new Date()) + "step 1: using default walker to visit all features");

	FeatureWalker walker = new FeatureWalker() {
		@Override
		public void visit(AbstractFeature abstractFeature) {
			System.out.println(df.format(new Date()) + "[default walker] found feature of class " + abstractFeature);
			System.out.println(df.format(new Date()) + "[default walker] -- gml:id: " + abstractFeature.getId());
			super.visit(abstractFeature);
		}
	};
	
	cityModel.accept(walker);

	// overwrite the NoiseADE feature walker to be able to use the specific visit methods
	// of the NoiseADE features. The ADE walker has to registered with the default walker.
	System.out.println(df.format(new Date()) + "step 2: using default walker with ADE walker to visit all features");
	
	NoiseADEFeatureWalker noiseADEWalker = new NoiseADEFeatureWalker() {
		@Override
		public void visit(Train train) {
			super.visit(train);

			System.out.println(df.format(new Date()) + "[ADE walker] found noise:Train feature");
			System.out.println(df.format(new Date()) + "[ADE walker] -- noise:trainType: " + train.getTrainType());
			System.out.println(df.format(new Date()) + "[ADE walker] -- noise:trainTypeCorrection: " + train.getTrainTypeCorrection().getValue());
			System.out.println(df.format(new Date()) + "[ADE walker] -- noise:brakePortionDay: " + train.getBrakePortionDay().getValue());
			System.out.println(df.format(new Date()) + "[ADE walker] -- noise:brakePortionEvening: " + train.getBrakePortionEvening().getValue());
			System.out.println(df.format(new Date()) + "[ADE walker] -- noise:brakePortionNight: " + train.getBrakePortionNight().getValue());
			System.out.println(df.format(new Date()) + "[ADE walker] -- noise:lengthDay: " + train.getLengthDay().getValue());
			System.out.println(df.format(new Date()) + "[ADE walker] -- noise:lengthEvening: " + train.getLengthEvening().getValue());
			System.out.println(df.format(new Date()) + "[ADE walker] -- noise:lengthNight: " + train.getLengthNight().getValue());
			System.out.println(df.format(new Date()) + "[ADE walker] -- noise:speedDay: " + train.getSpeedDay().getValue());
			System.out.println(df.format(new Date()) + "[ADE walker] -- noise:speedEvening: " + train.getSpeedEvening().getValue());
			System.out.println(df.format(new Date()) + "[ADE walker] -- noise:speedNight: " + train.getSpeedNight().getValue());
			System.out.println(df.format(new Date()) + "[ADE walker] -- noise:additionalCorrectionTrain: " + train.getAdditionalCorrectionTrain().getValue());
		}
	};
	
	walker.useADEWalker(noiseADEWalker);
	cityModel.accept(walker);
	
	System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished");
}
 
Example #14
Source File: AdditionalObjectsHandler.java    From web-feature-service with Apache License 2.0 4 votes vote down vote up
protected void writeObjects() {
    if (!shouldRun)
        return;

    try {
        // close writers to flush buffers
        for (CityModelWriter tempWriter : tempWriters.values())
            tempWriter.close();

        CityGMLInputFactory in = cityGMLBuilder.createCityGMLInputFactory();
        in.setProperty(CityGMLInputFactory.FEATURE_READ_MODE, FeatureReadMode.SPLIT_PER_COLLECTION_MEMBER);

        startAdditionalObjects();

        Attributes dummyAttributes = new AttributesImpl();
        String propertyName = "member";
        String propertyQName = saxWriter.getPrefix(Constants.WFS_NAMESPACE_URI) + ":" + propertyName;

        // iterate over temp files and send additional objects to response stream
        for (Path tempFile : tempFiles.values()) {
            try (CityGMLReader tempReader = in.createCityGMLReader(tempFile.toFile())) {
                while (tempReader.hasNext()) {
                    XMLChunk chunk = tempReader.nextChunk();
                    if ("CityModel".equals(chunk.getTypeName().getLocalPart())
                            && Modules.isCityGMLModuleNamespace(chunk.getTypeName().getNamespaceURI()))
                        continue;

                    ContentHandler handler;
                    if (transformerChainFactory == null)
                        handler = saxWriter;
                    else {
                        TransformerChain chain = transformerChainFactory.buildChain();
                        chain.tail().setResult(new SAXResult(saxWriter));
                        handler = chain.head();
                        handler.startDocument();
                    }

                    handler.startElement(Constants.WFS_NAMESPACE_URI, propertyName, propertyQName, dummyAttributes);
                    chunk.send(handler, true);
                    handler.endElement(Constants.WFS_NAMESPACE_URI, propertyName, propertyQName);

                    if (transformerChainFactory != null)
                        handler.endDocument();
                }
            }
        }

    } catch (CityGMLWriteException | CityGMLBuilderException | CityGMLReadException | SAXException | TransformerConfigurationException e) {
        eventDispatcher.triggerSyncEvent(new InterruptEvent("Failed to write additional objects.", LogLevel.ERROR, e, eventChannel, this));
    }
}
 
Example #15
Source File: ObjectTreeValidationUsingSplitter.java    From citygml4j with Apache License 2.0 4 votes vote down vote up
public static void main(String[] args) throws Exception {
	/*
	 * PLEASE NOTE, that you receive less errors if the in-memory objects
	 * derived from the input document are validated than if the input document
	 * itself is validated.
	 * reason: citygml4j tries to reconstruct a valid object tree from the
	 * input document. Generally, this means
	 * 1) Invalid order of XML elements will be corrected automatically (see ADDRESS element)
	 * 2) Invalid text values of XML elements cannot be automatically corrected
	 *    and thus will be reported (see, e.g., gml:id of BUILDING element)
	 * 3) Invalid XML child elements will be omitted in the object tree (see CLOSURESURFACE element)
	 * 
	 * Due to 3) you should always make sure to generate object trees from 
	 * valid CityGML documents!
	 */
	
	SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] "); 

	System.out.println(df.format(new Date()) + "setting up citygml4j context and CityGML builder");
	CityGMLContext ctx = CityGMLContext.getInstance();
	CityGMLBuilder builder = ctx.createCityGMLBuilder();
	
	System.out.println(df.format(new Date()) + "parsing ADE schema file CityGML-SubsurfaceADE-0_9_0.xsd");
	SchemaHandler schemaHandler = SchemaHandler.newInstance();
	schemaHandler.parseSchema(new File("datasets/schemas/CityGML-SubsurfaceADE-0_9_0.xsd"));

	System.out.println(df.format(new Date()) + "reading ADE-enriched CityGML file LOD2_SubsurfaceStructureADE_invalid_v100.gml");
	CityGMLInputFactory in = builder.createCityGMLInputFactory(schemaHandler);
	in.setProperty(CityGMLInputFactory.FEATURE_READ_MODE, FeatureReadMode.NO_SPLIT);

	CityGMLReader reader = in.createCityGMLReader(new File("datasets/LOD2_SubsurfaceStructureADE_invalid_v100.gml"));
	CityGML citygml = reader.nextFeature();		
	reader.close();
	
	System.out.println(df.format(new Date()) + "creating citygml4j Validator");
	Validator validator = builder.createValidator(schemaHandler);		
	validator.setValidationEventHandler(event -> {
           System.out.println("\t" + event.getMessage());
           return true;
       });
	
	System.out.println(df.format(new Date()) + "creating citygml4j FeatureSplitter and splitting document into single features");
	FeatureSplitter splitter = new FeatureSplitter()
			.setSchemaHandler(schemaHandler)
			.setSplitMode(FeatureSplitMode.SPLIT_PER_FEATURE)
			.splitCopy(true);
	
	System.out.println(df.format(new Date()) + "iterating over splitting result and validating features against CityGML 1.0.0");
	for (CityGML feature : splitter.split(citygml)) {
		
		String type;
		if (feature instanceof ADEGenericElement){
			Element element = ((ADEGenericElement)feature).getContent();
			type = element.getPrefix() + ':' + element.getLocalName();
		} else
			type = feature.getCityGMLClass().toString();
		
		System.out.println("Validating " + type);
		validator.validate(feature, CityGMLVersion.v1_0_0);
	}
	
	System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished");
}
 
Example #16
Source File: ResolvingInternalXlinks.java    From citygml4j with Apache License 2.0 4 votes vote down vote up
public static void main(String[] args) throws Exception {
	SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] "); 

	System.out.println(df.format(new Date()) + "setting up citygml4j context and CityGML builder");
	CityGMLContext ctx = CityGMLContext.getInstance();
	CityGMLBuilder builder = ctx.createCityGMLBuilder();

	System.out.println(df.format(new Date()) + "reading CityGML file LOD2_CityObjectGroup_v100.gml");
	CityGMLInputFactory in = builder.createCityGMLInputFactory();
	CityGMLReader reader = in.createCityGMLReader(new File("datasets/LOD2_CityObjectGroup_v100.gml"));

	CityModel cityModel = (CityModel)reader.nextFeature();
	reader.close();
	
	System.out.println(df.format(new Date()) + "creating XLinkResolver");
	XLinkResolver xLinkResolver = new XLinkResolver();
	
	for (CityObjectMember member : cityModel.getCityObjectMember()) {
		if (member.isSetCityObject() && 
				member.getCityObject().getCityGMLClass() == CityGMLClass.CITY_OBJECT_GROUP) {
			CityObjectGroup group = (CityObjectGroup)member.getCityObject();
			
			for (CityObjectGroupMember groupMember : group.getGroupMember()) {
				System.out.println(df.format(new Date()) + "processing group member with role: " + groupMember.getGroupRole());					
				System.out.println(df.format(new Date()) + "resolving XLink to " + groupMember.getHref());
				AbstractCityObject cityObject = xLinkResolver.getAbstractGML(groupMember.getHref(), cityModel, AbstractCityObject.class);
				System.out.println("   Referenced city object: " + cityObject.getCityGMLClass() + 
						", gml:id='" + cityObject.getId() +"'");
				 
				if (cityObject.getId().equals("ID_76")) {
					Road road = (Road)cityObject;
					TrafficArea trafficArea = road.getTrafficArea().get(2).getTrafficArea();
					
					System.out.println(df.format(new Date()) + "resolving XLink to " + trafficArea.getLod2MultiSurface().getHref());
					ModelObject object = xLinkResolver.getObject(trafficArea.getLod2MultiSurface().getHref(), road);
					if (object instanceof MultiSurface) {
						MultiSurface multiSurface = (MultiSurface)object;
						System.out.println("   Referenced geometry: " + multiSurface.getGMLClass() + 
								", gml:id='" + multiSurface.getId() + "'");
					}
				}
			}
		}
	}
	
	System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished");
}
 
Example #17
Source File: AccessingParentElements.java    From citygml4j with Apache License 2.0 4 votes vote down vote up
public static void main(String[] args) throws Exception {
	SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] "); 

	System.out.println(df.format(new Date()) + "setting up citygml4j context and CityGML builder");
	CityGMLContext ctx = CityGMLContext.getInstance();
	CityGMLBuilder builder = ctx.createCityGMLBuilder();

	System.out.println(df.format(new Date()) + "reading CityGML file LOD2_Building_v100.gml");
	CityGMLInputFactory in = builder.createCityGMLInputFactory();
	CityGMLReader reader = in.createCityGMLReader(new File("datasets/LOD2_Building_v100.gml"));

	CityModel cityModel = (CityModel)reader.nextFeature();
	reader.close();
	
	System.out.println(df.format(new Date()) + "retrieving object with gml:id UUID_08371879-bde6-4ba6-9fc6-088ee2ce1913");
	XLinkResolver resolver = new XLinkResolver();
	AbstractGeometry geometry = resolver.getGeometry("UUID_08371879-bde6-4ba6-9fc6-088ee2ce1913", cityModel);
	System.out.println("gml:id 'UUID_08371879-bde6-4ba6-9fc6-088ee2ce1913' belongs to: " + geometry.getGMLClass());

	System.out.println(df.format(new Date()) + "retrieving direct and transitive parents");			
	ChildInfo info = new ChildInfo();
	
	System.out.println("Direct parent XML element: " + ((GML)geometry.getParent()).getGMLClass());
	
	AbstractGeometry parentGeometry = info.getParentGeometry(geometry);
	System.out.println("Direct parent geometry: " + parentGeometry.getGMLClass()
			+ ", gml:id='" + parentGeometry.getId() + "'");
	
	AbstractCityObject parentCityObject = info.getParentCityObject(geometry);
	System.out.println("Direct parent CityObject: " + parentCityObject.getCityGMLClass()
			+ ", gml:id='" + parentCityObject.getId() + "'");
	
	Building parentCityObjectByType = info.getParentCityObject(geometry, Building.class);
	System.out.println("Transitive parent CityObject of type Building: " + parentCityObjectByType.getCityGMLClass()
			+ ", gml:id='" + parentCityObjectByType.getId() + "'");

	LandUse noParent = info.getParentCityObject(geometry, LandUse.class);
	System.out.println("Transitive parent CityObject of type LandUse: " + noParent);

	AbstractCityObject rootCityObject = info.getRootCityObject(geometry);
	System.out.println("Root CityObject: " + rootCityObject.getCityGMLClass()
			+ ", gml:id='" + rootCityObject.getId() + "'");
	
	CityGML rootFeature = info.getRootCityGML(geometry);
	System.out.println("Root CityGML instance: " + rootFeature.getCityGMLClass());
	
	System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished");
}
 
Example #18
Source File: ApplyXSLTWhenReading.java    From citygml4j with Apache License 2.0 4 votes vote down vote up
public static void main(String[] args) throws Exception {
	SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] "); 

	System.out.println(df.format(new Date()) + "setting up citygml4j context and CityGML builder");
	CityGMLContext ctx = CityGMLContext.getInstance();
	CityGMLBuilder builder = ctx.createCityGMLBuilder();

	CityGMLInputFactory in = builder.createCityGMLInputFactory();
	CityModel cityModel = null;
	Building building = null;

	// first step: we read the dataset as is without applying an XSLT stylesheet
	System.out.println(df.format(new Date()) + "1st step: read the CityGML file LOD2_Buildings_v100.gml 'as is'");
	CityGMLReader reader = in.createCityGMLReader(new File("datasets/LOD2_Building_v100.gml"));

	cityModel = (CityModel)reader.nextFeature();
	building = (Building)cityModel.getCityObjectMember().get(0).getCityObject();
	System.out.println(df.format(new Date()) + "Building has address information: " + building.isSetAddress());
	reader.close();

	// second step: we read the dataset again but this time we apply an XSLT stlyesheet
	// you can pass one or more XSLT stylesheets to a CityGMLInputFactory. The stylesheets
	// are applied before reading the data. If you provide more than one stylesheet,
	// the stylesheets are automatically chained, i.e., the output of the first one is taken as input
	// for the second one, and so on. The order in which you pass the stylesheets to the CityGMLInputFactory
	// is therefore important.

	// Note: If you parse the document chunk-wise, make sure that your XSLT 
	// transformations use a local scope that matches the chunks. 

	// In this example, the stylesheet simply removes the xAL address data from the building
	System.out.println(df.format(new Date()) + "2nd step: let's read the dataset again and apply the XSLT stylesheet RemoveAddress.xsl");
	SAXTransformerFactory factory = (SAXTransformerFactory)TransformerFactory.newInstance();
	Templates stylesheet = factory.newTemplates(new StreamSource(new File("datasets/stylesheets/RemoveAddress.xsl")));
	in.setTransformationTemplates(stylesheet);

	reader = in.createCityGMLReader(new File("datasets/LOD2_Building_v100.gml"));

	cityModel = (CityModel)reader.nextFeature();
	building = (Building)cityModel.getCityObjectMember().get(0).getCityObject();
	System.out.println(df.format(new Date()) + "Building has address information: " + building.isSetAddress());
	reader.close();

	System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished");
}
 
Example #19
Source File: MultithreadedReader.java    From citygml4j with Apache License 2.0 4 votes vote down vote up
public static void main(String[] args) throws Exception {
	SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] "); 

	System.out.println(df.format(new Date()) + "setting up citygml4j context and CityGML builder");
	CityGMLContext ctx = CityGMLContext.getInstance();
	CityGMLBuilder builder = ctx.createCityGMLBuilder();
	
	// create a fixed thread pool
	int nThreads = Runtime.getRuntime().availableProcessors() * 2;
	System.out.println(df.format(new Date()) + "setting up thread pool with " + nThreads + " threads");
	ExecutorService service = Executors.newFixedThreadPool(nThreads);
	
	System.out.println(df.format(new Date()) + "reading LOD3_Railway_v200.gml in a multithreaded fashion");
	
	// create a validating reader that chunks the input file on a per feature level
	CityGMLInputFactory in = builder.createCityGMLInputFactory();
	in.setProperty(CityGMLInputFactory.FEATURE_READ_MODE, FeatureReadMode.SPLIT_PER_FEATURE);
	in.setProperty(CityGMLInputFactory.USE_VALIDATION, true);
	
	CityGMLReader reader = in.createCityGMLReader(new File("datasets/LOD3_Railway_v200.gml"));
	
	while (reader.hasNext()) {
		// whereas the nextFeature() method of a CityGML reader completely unmarshals the 
		// XML chunk to an instance of the citygml4j object model and optionally validates
		// it before returning, the nextChunk() method returns faster but only provides a
		// set of SAX events.		
		final XMLChunk chunk = reader.nextChunk();
		
		// we forward every XML chunk to a separate thread of the thread pool
		// for unmarshalling and validation
		service.execute(() -> {
               try {
                   chunk.unmarshal();
               } catch (UnmarshalException | MissingADESchemaException e) {
                   //
               }

               // invoking the hasPassedXMLValidation() method prior to unmarshal()
               // or when using a non-validating CityGML reader will always yield false.
               boolean isValid = chunk.hasPassedXMLValidation();

               System.out.println("Thread '" + Thread.currentThread().getName() + "' unmarshalled " + chunk.getCityGMLClass() + "; valid: " + isValid);
           });
	}
	
	System.out.println(df.format(new Date()) + "shutting down threadpool");
	service.shutdown();
	service.awaitTermination(120, TimeUnit.SECONDS);
	
	reader.close();
	System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished");
}
 
Example #20
Source File: Serialization.java    From citygml4j with Apache License 2.0 4 votes vote down vote up
public static void main(String[] args) throws Exception {
    SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] ");

    System.out.println(df.format(new Date()) + "setting up citygml4j context and CityGML builder");
    CityGMLContext ctx = CityGMLContext.getInstance();
    CityGMLBuilder builder = ctx.createCityGMLBuilder();

    System.out.println(df.format(new Date()) + "reading CityGML file LOD3_Railway_v200.gml into main memory");
    CityGMLInputFactory in = builder.createCityGMLInputFactory();

    CityModel cityModel;
    try (CityGMLReader reader = in.createCityGMLReader(new File("datasets/LOD3_Railway_v200.gml"))) {
        cityModel = (CityModel) reader.nextFeature();
    }

    // serialize the object tree
    System.out.println(df.format(new Date()) + "serializing in-memory citygml4j object tree to file out.ser");
    Files.createDirectories(Paths.get("output"));

    // create an ObjectOutputStream to serialize the CityModel
    // make sure to use a BufferedOutputStream for performance reasons
    // to keep the file size small, consider using a GZIPOutputStream in addition
    try (ObjectOutputStream stream = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("output/out.ser")))) {
        stream.writeObject(cityModel);
    }

    System.out.println(df.format(new Date()) + "citygml4j object tree successfully serialized");

    // let's read the serialized object tree back into main memory
    System.out.println(df.format(new Date()) + "deserializing out.ser back into main memory");

    // create an ObjectInputStream to deserialize the CityModel
    // again, make sure to use a BufferedInputStream for performance reasons
    try (ObjectInputStream stream = new ObjectInputStream(new BufferedInputStream(new FileInputStream("output/out.ser")))) {
        Object o = stream.readObject();

        if (o instanceof CityModel) {
            System.out.println(df.format(new Date()) + "successfully read citygml4j object tree from file out.ser");
            cityModel = (CityModel) o;

            System.out.println(df.format(new Date()) + "Found the following cityObjectMembers in out.ser:");
            EnumMap<CityGMLClass, Integer> features = new EnumMap<>(CityGMLClass.class);
            cityModel.getCityObjectMember().forEach(m -> features.merge(m.getCityObject().getCityGMLClass(), 1, Integer::sum));
            features.forEach((key, value) -> System.out.println(key + ": " + value));
        } else
            throw new CityGMLReadException("Failed to deserialize the file out.ser");
    }

    System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished");
}
 
Example #21
Source File: CityGMLBuilder.java    From citygml4j with Apache License 2.0 4 votes vote down vote up
public CityGMLInputFactory createCityGMLInputFactory(SchemaHandler schemaHandler) {
	return new JAXBInputFactory(this, schemaHandler);
}
 
Example #22
Source File: CityGMLBuilder.java    From citygml4j with Apache License 2.0 4 votes vote down vote up
public CityGMLInputFactory createCityGMLInputFactory() throws CityGMLBuilderException {
	return new JAXBInputFactory(this);
}