Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
CityDoctor
CityDoctor2
Compare Revisions
040af2d29b2cb2c6aae2db6f7a2bb4eb95fc7e4b...2d57794b38269d8f588b97439753c98e05695651
Hide whitespace changes
Inline
Side-by-side
CityDoctorParent/CityDoctorModel/src/test/resources/zip/epsg/epsg2.gml
0 → 100644
View file @
2d57794b
<?xml version="1.0" encoding="utf-8"?>
<core:CityModel
xmlns:core=
"http://www.opengis.net/citygml/2.0"
xmlns:gen=
"http://www.opengis.net/citygml/generics/2.0"
xmlns:bldg=
"http://www.opengis.net/citygml/building/2.0"
xmlns:app=
"http://www.opengis.net/citygml/appearance/2.0"
xmlns:dem=
"http://www.opengis.net/citygml/relief/2.0"
xmlns:gml=
"http://www.opengis.net/gml"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd"
>
<gml:boundedBy>
<gml:Envelope
srsDimension=
"3"
srsName=
"urn:ogc:def:crs:EPSG::7415"
>
<gml:lowerCorner>
84616.468 447422.999 0
</gml:lowerCorner>
<gml:upperCorner>
85140.839 447750.636 100
</gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
</core:CityModel>
\ No newline at end of file
CityDoctorParent/CityDoctorModel/src/test/resources/zip/implicit.zip
0 → 100644
View file @
2d57794b
File added
CityDoctorParent/CityDoctorModel/src/test/resources/zip/implicit/Implicit1.gml
0 → 100644
View file @
2d57794b
<?xml version="1.0" encoding="UTF-8"?>
<core:CityModel
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:core=
"http://www.opengis.net/citygml/2.0"
xmlns:gml=
"http://www.opengis.net/gml"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xmlns:tran=
"http://www.opengis.net/citygml/transportation/2.0"
xmlns:wtr=
"http://www.opengis.net/citygml/waterbody/2.0"
xmlns:smil20lang=
"http://www.w3.org/2001/SMIL20/Language"
xmlns:grp=
"http://www.opengis.net/citygml/cityobjectgroup/2.0"
xmlns:luse=
"http://www.opengis.net/citygml/landuse/2.0"
xmlns:frn=
"http://www.opengis.net/citygml/cityfurniture/2.0"
xmlns:app=
"http://www.opengis.net/citygml/appearance/2.0"
xmlns:tex=
"http://www.opengis.net/citygml/texturedsurface/2.0"
xmlns:smil20=
"http://www.w3.org/2001/SMIL20/"
xmlns:xAL=
"urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"
xmlns:bldg=
"http://www.opengis.net/citygml/building/2.0"
xmlns:dem=
"http://www.opengis.net/citygml/relief/2.0"
xmlns:veg=
"http://www.opengis.net/citygml/vegetation/2.0"
xmlns:brid=
"http://www.opengis.net/citygml/bridge/2.0"
xmlns:tun=
"http://www.opengis.net/citygml/tunnel/2.0"
xmlns:gen=
"http://www.opengis.net/citygml/generics/2.0"
xmlns:wfs=
"http://www.opengis.net/wfs"
xsi:schemaLocation=
"http://www.opengis.net/citygml/landuse/2.0 http://schemas.opengis.net/citygml/landuse/2.0/landUse.xsd http://www.opengis.net/citygml/cityfurniture/2.0 http://schemas.opengis.net/citygml/cityfurniture/2.0/cityFurniture.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/texturedsurface/2.0 http://schemas.opengis.net/citygml/texturedsurface/2.0/texturedSurface.xsd http://www.opengis.net/citygml/transportation/2.0 http://schemas.opengis.net/citygml/transportation/2.0/transportation.xsd http://www.opengis.net/citygml/waterbody/2.0 http://schemas.opengis.net/citygml/waterbody/2.0/waterBody.xsd http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/vegetation/2.0 http://schemas.opengis.net/citygml/vegetation/2.0/vegetation.xsd http://www.opengis.net/citygml/cityobjectgroup/2.0 http://schemas.opengis.net/citygml/cityobjectgroup/2.0/cityObjectGroup.xsd http://www.opengis.net/citygml/bridge/2.0 http://schemas.opengis.net/citygml/bridge/2.0/bridge.xsd http://www.opengis.net/citygml/tunnel/2.0 http://schemas.opengis.net/citygml/tunnel/2.0/tunnel.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd"
>
<gml:description>
Testdataset
</gml:description>
<gml:name>
ImplicitGeometry zipfile testdata
</gml:name>
<core:cityObjectMember>
<gen:GenericCityObject>
<gml:description>
CPA_Symbol
</gml:description>
<gml:name>
Implicit1
</gml:name>
<gen:lod2Geometry>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-5"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-5"
>
<gml:posList
srsDimension=
"3"
>
0.549000 0.854000 1.282000 0.549000 0.854000 1.232000 -0.542000 0.855000 1.232000 -0.542000 0.855000 1.282000 0.549000 0.854000 1.282000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-6"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-6"
>
<gml:posList
srsDimension=
"3"
>
-0.744000 0.755000 0.000000 -0.744000 0.755000 2.100000 -0.745000 -0.895000 2.100000 -0.745000 -0.895000 2.190000 -0.745000 -0.825000 2.260000 -0.744000 0.785000 2.260000 -0.744000 0.855000 2.190000 -0.744000 0.855000 0.000000 -0.744000 0.755000 0.000000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-7"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-7"
>
<gml:posList
srsDimension=
"3"
>
0.647000 -0.896000 2.100000 0.647000 -0.896000 2.190000 -0.745000 -0.895000 2.190000 -0.745000 -0.895000 2.100000 0.647000 -0.896000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-8"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-8"
>
<gml:posList
srsDimension=
"3"
>
-0.745000 -0.825000 2.260000 -0.745000 -0.895000 2.190000 0.647000 -0.896000 2.190000 0.647000 -0.826000 2.260000 -0.745000 -0.825000 2.260000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-9"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-9"
>
<gml:posList
srsDimension=
"3"
>
-0.744000 0.855000 2.190000 -0.744000 0.785000 2.260000 0.647000 0.784000 2.260000 0.647000 0.854000 2.190000 -0.744000 0.855000 2.190000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-10"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-10"
>
<gml:posList
srsDimension=
"3"
>
-0.542000 0.855000 1.132000 -0.542000 0.855000 1.182000 0.549000 0.854000 1.182000 0.549000 0.854000 1.132000 -0.542000 0.855000 1.132000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-11"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-11"
>
<gml:posList
srsDimension=
"3"
>
0.647000 0.784000 2.260000 -0.744000 0.785000 2.260000 -0.745000 -0.825000 2.260000 0.647000 -0.826000 2.260000 0.647000 0.784000 2.260000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-12"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-12"
>
<gml:posList
srsDimension=
"3"
>
-0.646000 0.755000 2.100000 -0.744000 0.755000 2.100000 -0.744000 0.755000 0.000000 -0.646000 0.755000 0.000000 -0.646000 0.755000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-13"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-13"
>
<gml:posList
srsDimension=
"3"
>
-0.745000 -0.895000 2.100000 -0.744000 0.755000 2.100000 -0.646000 0.755000 2.100000 -0.646000 0.855000 2.100000 0.647000 0.854000 2.100000 0.647000 -0.896000 2.100000 -0.745000 -0.895000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-14"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-14"
>
<gml:posList
srsDimension=
"3"
>
-0.744000 0.855000 2.190000 0.647000 0.854000 2.190000 0.647000 0.854000 2.100000 -0.646000 0.855000 2.100000 -0.646000 0.855000 0.547000 -0.646000 0.855000 0.504000 -0.646000 0.855000 0.300000 -0.646000 0.855000 0.220000 -0.646000 0.855000 0.000000 -0.744000 0.855000 0.000000 -0.744000 0.855000 2.190000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-15"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-15"
>
<gml:posList
srsDimension=
"3"
>
-0.646000 0.855000 0.220000 -0.646000 0.855000 0.300000 0.647000 0.854000 0.300000 0.647000 0.854000 0.220000 -0.646000 0.855000 0.220000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-16"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-16"
>
<gml:posList
srsDimension=
"3"
>
-0.646000 0.855000 2.100000 -0.646000 0.755000 2.100000 -0.646000 0.755000 0.000000 -0.646000 0.855000 0.000000 -0.646000 0.855000 0.220000 -0.646000 0.855000 0.300000 -0.646000 0.855000 0.504000 -0.646000 0.855000 0.547000 -0.646000 0.855000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-17"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-17"
>
<gml:posList
srsDimension=
"3"
>
-0.646000 0.855000 0.547000 -0.646000 0.855000 0.504000 -0.546000 0.855000 0.504000 -0.546000 0.855000 0.547000 -0.646000 0.855000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-18"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-18"
>
<gml:posList
srsDimension=
"3"
>
-0.546000 0.855000 0.504000 -0.546000 0.530000 0.504000 -0.546000 0.530000 0.547000 -0.546000 0.855000 0.547000 -0.546000 0.855000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-19"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-19"
>
<gml:posList
srsDimension=
"3"
>
-0.496000 0.530000 0.504000 -0.496000 0.855000 0.504000 -0.496000 0.855000 0.547000 -0.496000 0.530000 0.547000 -0.496000 0.530000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-20"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-20"
>
<gml:posList
srsDimension=
"3"
>
-0.546000 0.530000 0.547000 -0.546000 0.530000 0.504000 -0.496000 0.530000 0.504000 -0.496000 0.530000 0.547000 -0.546000 0.530000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-21"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-21"
>
<gml:posList
srsDimension=
"3"
>
-0.546000 0.855000 0.547000 -0.546000 0.530000 0.547000 -0.496000 0.530000 0.547000 -0.496000 0.855000 0.547000 -0.546000 0.855000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-22"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-22"
>
<gml:posList
srsDimension=
"3"
>
0.497000 0.854000 0.504000 0.497000 0.530000 0.504000 0.497000 0.530000 0.547000 0.497000 0.854000 0.547000 0.497000 0.854000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-23"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-23"
>
<gml:posList
srsDimension=
"3"
>
0.547000 0.530000 0.504000 0.547000 0.530000 0.547000 0.497000 0.530000 0.547000 0.497000 0.530000 0.504000 0.547000 0.530000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-24"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-24"
>
<gml:posList
srsDimension=
"3"
>
0.547000 0.530000 0.547000 0.547000 0.854000 0.547000 0.497000 0.854000 0.547000 0.497000 0.530000 0.547000 0.547000 0.530000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-25"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-25"
>
<gml:posList
srsDimension=
"3"
>
-0.196000 0.855000 0.547000 -0.196000 0.530000 0.547000 -0.146000 0.530000 0.547000 -0.146000 0.854000 0.547000 -0.196000 0.855000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-26"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-26"
>
<gml:posList
srsDimension=
"3"
>
-0.196000 0.530000 0.547000 -0.196000 0.530000 0.504000 -0.146000 0.530000 0.504000 -0.146000 0.530000 0.547000 -0.196000 0.530000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-27"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-27"
>
<gml:posList
srsDimension=
"3"
>
-0.146000 0.530000 0.504000 -0.146000 0.854000 0.504000 -0.146000 0.854000 0.547000 -0.146000 0.530000 0.547000 -0.146000 0.530000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-28"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-28"
>
<gml:posList
srsDimension=
"3"
>
-0.196000 0.855000 0.504000 -0.196000 0.530000 0.504000 -0.196000 0.530000 0.547000 -0.196000 0.855000 0.547000 -0.196000 0.855000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-29"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-29"
>
<gml:posList
srsDimension=
"3"
>
0.144000 0.530000 0.547000 0.144000 0.530000 0.504000 0.194000 0.530000 0.504000 0.194000 0.530000 0.547000 0.144000 0.530000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-30"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-30"
>
<gml:posList
srsDimension=
"3"
>
0.194000 0.530000 0.504000 0.194000 0.854000 0.504000 0.194000 0.854000 0.547000 0.194000 0.530000 0.547000 0.194000 0.530000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-31"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-31"
>
<gml:posList
srsDimension=
"3"
>
0.144000 0.854000 0.547000 0.144000 0.530000 0.547000 0.194000 0.530000 0.547000 0.194000 0.854000 0.547000 0.144000 0.854000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-32"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-32"
>
<gml:posList
srsDimension=
"3"
>
-0.476000 0.835000 0.547000 -0.476000 0.530000 0.547000 -0.216000 0.530000 0.547000 -0.216000 0.835000 0.547000 -0.476000 0.835000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-33"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-33"
>
<gml:posList
srsDimension=
"3"
>
-0.476000 0.530000 0.520000 -0.476000 0.835000 0.520000 -0.216000 0.835000 0.520000 -0.216000 0.530000 0.520000 -0.476000 0.530000 0.520000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-34"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-34"
>
<gml:posList
srsDimension=
"3"
>
-0.476000 0.530000 0.547000 -0.476000 0.835000 0.547000 -0.476000 0.835000 0.520000 -0.476000 0.530000 0.520000 -0.476000 0.530000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-35"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-35"
>
<gml:posList
srsDimension=
"3"
>
-0.476000 0.835000 0.547000 -0.216000 0.835000 0.547000 -0.216000 0.835000 0.520000 -0.476000 0.835000 0.520000 -0.476000 0.835000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-36"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-36"
>
<gml:posList
srsDimension=
"3"
>
-0.216000 0.835000 0.547000 -0.216000 0.530000 0.547000 -0.216000 0.530000 0.520000 -0.216000 0.835000 0.520000 -0.216000 0.835000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-37"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-37"
>
<gml:posList
srsDimension=
"3"
>
-0.216000 0.530000 0.547000 -0.476000 0.530000 0.547000 -0.476000 0.530000 0.520000 -0.216000 0.530000 0.520000 -0.216000 0.530000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-38"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-38"
>
<gml:posList
srsDimension=
"3"
>
0.144000 0.854000 0.504000 0.144000 0.530000 0.504000 0.144000 0.530000 0.547000 0.144000 0.854000 0.547000 0.144000 0.854000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-39"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-39"
>
<gml:posList
srsDimension=
"3"
>
-0.132000 0.834000 0.547000 0.128000 0.834000 0.547000 0.128000 0.834000 0.520000 -0.132000 0.834000 0.520000 -0.132000 0.834000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-40"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-40"
>
<gml:posList
srsDimension=
"3"
>
-0.132000 0.530000 0.520000 -0.132000 0.834000 0.520000 0.128000 0.834000 0.520000 0.128000 0.530000 0.520000 -0.132000 0.530000 0.520000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-41"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-41"
>
<gml:posList
srsDimension=
"3"
>
-0.132000 0.530000 0.547000 -0.132000 0.834000 0.547000 -0.132000 0.834000 0.520000 -0.132000 0.530000 0.520000 -0.132000 0.530000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-42"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-42"
>
<gml:posList
srsDimension=
"3"
>
0.128000 0.530000 0.547000 -0.132000 0.530000 0.547000 -0.132000 0.530000 0.520000 0.128000 0.530000 0.520000 0.128000 0.530000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-43"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-43"
>
<gml:posList
srsDimension=
"3"
>
0.128000 0.834000 0.547000 0.128000 0.530000 0.547000 0.128000 0.530000 0.520000 0.128000 0.834000 0.520000 0.128000 0.834000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-44"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-44"
>
<gml:posList
srsDimension=
"3"
>
-0.132000 0.834000 0.547000 -0.132000 0.530000 0.547000 0.128000 0.530000 0.547000 0.128000 0.834000 0.547000 -0.132000 0.834000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-45"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-45"
>
<gml:posList
srsDimension=
"3"
>
0.215000 0.834000 0.547000 0.215000 0.530000 0.547000 0.475000 0.530000 0.547000 0.475000 0.834000 0.547000 0.215000 0.834000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-46"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-46"
>
<gml:posList
srsDimension=
"3"
>
0.475000 0.834000 0.547000 0.475000 0.530000 0.547000 0.475000 0.530000 0.520000 0.475000 0.834000 0.520000 0.475000 0.834000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-47"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-47"
>
<gml:posList
srsDimension=
"3"
>
0.215000 0.530000 0.520000 0.215000 0.834000 0.520000 0.475000 0.834000 0.520000 0.475000 0.530000 0.520000 0.215000 0.530000 0.520000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-48"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-48"
>
<gml:posList
srsDimension=
"3"
>
0.475000 0.530000 0.547000 0.215000 0.530000 0.547000 0.215000 0.530000 0.520000 0.475000 0.530000 0.520000 0.475000 0.530000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-49"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-49"
>
<gml:posList
srsDimension=
"3"
>
0.215000 0.834000 0.547000 0.475000 0.834000 0.547000 0.475000 0.834000 0.520000 0.215000 0.834000 0.520000 0.215000 0.834000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-50"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-50"
>
<gml:posList
srsDimension=
"3"
>
0.215000 0.530000 0.547000 0.215000 0.834000 0.547000 0.215000 0.834000 0.520000 0.215000 0.530000 0.520000 0.215000 0.530000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-51"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-51"
>
<gml:posList
srsDimension=
"3"
>
0.547000 0.530000 0.504000 0.547000 0.854000 0.504000 0.547000 0.854000 0.547000 0.547000 0.530000 0.547000 0.547000 0.530000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-52"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-52"
>
<gml:posList
srsDimension=
"3"
>
0.194000 0.854000 0.547000 0.194000 0.854000 0.504000 0.144000 0.854000 0.504000 0.144000 0.854000 0.547000 0.194000 0.854000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-53"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-53"
>
<gml:posList
srsDimension=
"3"
>
-0.146000 0.854000 0.547000 -0.146000 0.854000 0.504000 -0.196000 0.855000 0.504000 -0.196000 0.855000 0.547000 -0.146000 0.854000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-54"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-54"
>
<gml:posList
srsDimension=
"3"
>
0.547000 0.854000 0.504000 0.497000 0.854000 0.504000 0.497000 0.854000 0.547000 0.547000 0.854000 0.547000 0.547000 0.854000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-55"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-55"
>
<gml:posList
srsDimension=
"3"
>
-0.496000 0.855000 0.504000 -0.546000 0.855000 0.504000 -0.546000 0.855000 0.547000 -0.496000 0.855000 0.547000 -0.496000 0.855000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-56"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-56"
>
<gml:posList
srsDimension=
"3"
>
-0.546000 0.855000 0.504000 -0.496000 0.855000 0.504000 -0.196000 0.855000 0.504000 -0.146000 0.854000 0.504000 0.144000 0.854000 0.504000 0.194000 0.854000 0.504000 0.497000 0.854000 0.504000 0.547000 0.854000 0.504000 0.647000 0.854000 0.504000 0.647000 0.854000 0.300000 -0.646000 0.855000 0.300000 -0.646000 0.855000 0.504000 -0.546000 0.855000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-57"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-57"
>
<gml:posList
srsDimension=
"3"
>
-0.146000 0.854000 0.547000 -0.146000 0.854000 0.504000 0.144000 0.854000 0.504000 0.144000 0.854000 0.547000 -0.146000 0.854000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-58"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-58"
>
<gml:posList
srsDimension=
"3"
>
-0.496000 0.855000 0.547000 -0.496000 0.855000 0.504000 -0.196000 0.855000 0.504000 -0.196000 0.855000 0.547000 -0.496000 0.855000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-59"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-59"
>
<gml:posList
srsDimension=
"3"
>
0.194000 0.854000 0.547000 0.194000 0.854000 0.504000 0.497000 0.854000 0.504000 0.497000 0.854000 0.547000 0.194000 0.854000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-60"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-60"
>
<gml:posList
srsDimension=
"3"
>
0.547000 0.854000 0.547000 0.547000 0.854000 0.504000 0.647000 0.854000 0.504000 0.647000 0.854000 0.547000 0.547000 0.854000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-61"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-61"
>
<gml:posList
srsDimension=
"3"
>
0.647000 0.854000 2.100000 0.647000 0.854000 0.547000 0.547000 0.854000 0.547000 0.497000 0.854000 0.547000 0.194000 0.854000 0.547000 0.144000 0.854000 0.547000 -0.146000 0.854000 0.547000 -0.196000 0.855000 0.547000 -0.496000 0.855000 0.547000 -0.546000 0.855000 0.547000 -0.646000 0.855000 0.547000 -0.646000 0.855000 2.100000 0.647000 0.854000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-61_1"
>
<gml:posList
srsDimension=
"3"
>
0.549000 0.854000 1.182000 -0.542000 0.855000 1.182000 -0.542000 0.855000 1.132000 0.549000 0.854000 1.132000 0.549000 0.854000 1.182000
</gml:posList>
</gml:LinearRing>
</gml:interior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-61_2"
>
<gml:posList
srsDimension=
"3"
>
-0.542000 0.855000 1.282000 -0.542000 0.855000 1.232000 0.549000 0.854000 1.232000 0.549000 0.854000 1.282000 -0.542000 0.855000 1.282000
</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-62"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-62"
>
<gml:posList
srsDimension=
"3"
>
2.136000 0.754000 2.100000 2.038000 0.754000 2.100000 2.038000 0.754000 0.000000 2.136000 0.754000 0.000000 2.136000 0.754000 0.220000 2.136000 0.754000 0.300000 2.136000 0.754000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-63"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-63"
>
<gml:posList
srsDimension=
"3"
>
2.068000 0.784000 2.260000 2.136000 0.854000 2.190000 0.647000 0.854000 2.190000 0.647000 0.784000 2.260000 2.068000 0.784000 2.260000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-64"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-64"
>
<gml:posList
srsDimension=
"3"
>
2.136000 -0.396000 1.182000 2.136000 -0.396000 1.132000 2.136000 0.654000 1.132000 2.136000 0.654000 1.182000 2.136000 -0.396000 1.182000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-65"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-65"
>
<gml:posList
srsDimension=
"3"
>
2.136000 0.854000 2.190000 2.068000 0.784000 2.260000 2.067000 -0.826000 2.260000 2.136000 -0.896000 2.190000 2.136000 0.854000 2.190000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-66"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-66"
>
<gml:posList
srsDimension=
"3"
>
0.647000 -0.896000 2.190000 2.136000 -0.896000 2.190000 2.067000 -0.826000 2.260000 0.647000 -0.826000 2.260000 0.647000 -0.896000 2.190000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-67"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-67"
>
<gml:posList
srsDimension=
"3"
>
0.843000 0.854000 1.232000 0.843000 0.854000 1.282000 1.934000 0.854000 1.282000 1.934000 0.854000 1.232000 0.843000 0.854000 1.232000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-68"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-68"
>
<gml:posList
srsDimension=
"3"
>
2.038000 -0.596000 2.100000 2.038000 -0.596000 0.000000 2.136000 -0.596000 0.000000 2.136000 -0.596000 2.100000 2.038000 -0.596000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-69"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-69"
>
<gml:posList
srsDimension=
"3"
>
2.136000 -0.496000 0.300000 2.136000 -0.496000 0.220000 2.136000 0.754000 0.220000 2.136000 0.754000 0.300000 2.136000 -0.496000 0.300000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-70"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-70"
>
<gml:posList
srsDimension=
"3"
>
2.038000 -0.596000 2.100000 2.038000 -0.496000 2.100000 2.038000 -0.496000 0.000000 2.038000 -0.596000 0.000000 2.038000 -0.596000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-71"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-71"
>
<gml:posList
srsDimension=
"3"
>
2.038000 0.854000 0.300000 2.038000 0.854000 0.220000 0.745000 0.854000 0.220000 0.745000 0.854000 0.300000 2.038000 0.854000 0.300000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-72"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-72"
>
<gml:posList
srsDimension=
"3"
>
0.745000 0.854000 2.100000 2.038000 0.854000 2.100000 2.038000 0.854000 0.300000 0.745000 0.854000 0.300000 0.745000 0.854000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-72_1"
>
<gml:posList
srsDimension=
"3"
>
1.934000 0.854000 1.182000 0.843000 0.854000 1.182000 0.843000 0.854000 1.132000 1.934000 0.854000 1.132000 1.934000 0.854000 1.182000
</gml:posList>
</gml:LinearRing>
</gml:interior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-72_2"
>
<gml:posList
srsDimension=
"3"
>
1.934000 0.854000 1.232000 1.934000 0.854000 1.282000 0.843000 0.854000 1.282000 0.843000 0.854000 1.232000 1.934000 0.854000 1.232000
</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-73"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-73"
>
<gml:posList
srsDimension=
"3"
>
2.136000 0.654000 1.232000 2.136000 0.654000 1.282000 2.136000 -0.396000 1.282000 2.136000 -0.396000 1.232000 2.136000 0.654000 1.232000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-74"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-74"
>
<gml:posList
srsDimension=
"3"
>
1.934000 0.854000 1.182000 1.934000 0.854000 1.132000 0.843000 0.854000 1.132000 0.843000 0.854000 1.182000 1.934000 0.854000 1.182000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-75"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-75"
>
<gml:posList
srsDimension=
"3"
>
2.038000 0.754000 2.100000 2.038000 0.854000 2.100000 2.038000 0.854000 0.300000 2.038000 0.854000 0.220000 2.038000 0.854000 0.000000 2.038000 0.754000 0.000000 2.038000 0.754000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-76"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-76"
>
<gml:posList
srsDimension=
"3"
>
2.136000 -0.496000 2.100000 2.136000 -0.496000 0.300000 2.136000 0.754000 0.300000 2.136000 0.754000 2.100000 2.136000 -0.496000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-76_1"
>
<gml:posList
srsDimension=
"3"
>
2.136000 -0.396000 1.132000 2.136000 -0.396000 1.182000 2.136000 0.654000 1.182000 2.136000 0.654000 1.132000 2.136000 -0.396000 1.132000
</gml:posList>
</gml:LinearRing>
</gml:interior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-76_2"
>
<gml:posList
srsDimension=
"3"
>
2.136000 0.654000 1.232000 2.136000 -0.396000 1.232000 2.136000 -0.396000 1.282000 2.136000 0.654000 1.282000 2.136000 0.654000 1.232000
</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-77"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-77"
>
<gml:posList
srsDimension=
"3"
>
2.136000 -0.896000 2.100000 2.136000 -0.896000 2.190000 0.647000 -0.896000 2.190000 0.647000 -0.896000 2.100000 2.136000 -0.896000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-78"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-78"
>
<gml:posList
srsDimension=
"3"
>
2.136000 0.854000 0.000000 2.136000 0.854000 2.190000 2.136000 -0.896000 2.190000 2.136000 -0.896000 2.100000 2.136000 -0.596000 2.100000 2.136000 -0.596000 0.000000 2.136000 -0.496000 0.000000 2.136000 -0.496000 0.220000 2.136000 -0.496000 0.300000 2.136000 -0.496000 2.100000 2.136000 0.754000 2.100000 2.136000 0.754000 0.300000 2.136000 0.754000 0.220000 2.136000 0.754000 0.000000 2.136000 0.854000 0.000000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-79"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-79"
>
<gml:posList
srsDimension=
"3"
>
2.038000 0.854000 2.100000 0.745000 0.854000 2.100000 0.745000 0.854000 0.300000 0.745000 0.854000 0.220000 0.745000 0.854000 0.000000 0.647000 0.854000 0.000000 0.647000 0.854000 2.190000 2.136000 0.854000 2.190000 2.136000 0.854000 0.000000 2.038000 0.854000 0.000000 2.038000 0.854000 0.220000 2.038000 0.854000 0.300000 2.038000 0.854000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-80"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-80"
>
<gml:posList
srsDimension=
"3"
>
2.038000 -0.496000 2.100000 2.136000 -0.496000 2.100000 2.136000 -0.496000 0.300000 2.136000 -0.496000 0.220000 2.136000 -0.496000 0.000000 2.038000 -0.496000 0.000000 2.038000 -0.496000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-81"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-81"
>
<gml:posList
srsDimension=
"3"
>
2.068000 0.784000 2.260000 0.647000 0.784000 2.260000 0.647000 -0.826000 2.260000 2.067000 -0.826000 2.260000 2.068000 0.784000 2.260000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-82"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-82"
>
<gml:posList
srsDimension=
"3"
>
0.745000 0.754000 2.100000 0.647000 0.754000 2.100000 0.647000 0.754000 0.000000 0.745000 0.754000 0.000000 0.745000 0.754000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-83"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-83"
>
<gml:posList
srsDimension=
"3"
>
0.647000 0.754000 0.000000 0.647000 0.754000 2.100000 0.647000 -0.896000 2.100000 0.647000 -0.896000 2.190000 0.647000 -0.826000 2.260000 0.647000 0.784000 2.260000 0.647000 0.854000 2.190000 0.647000 0.854000 0.000000 0.647000 0.754000 0.000000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-84"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-84"
>
<gml:posList
srsDimension=
"3"
>
0.745000 0.854000 2.100000 0.745000 0.754000 2.100000 0.745000 0.754000 0.000000 0.745000 0.854000 0.000000 0.745000 0.854000 0.220000 0.745000 0.854000 0.300000 0.745000 0.854000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-85"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-85"
>
<gml:posList
srsDimension=
"3"
>
2.136000 -0.596000 2.100000 2.136000 -0.896000 2.100000 0.647000 -0.896000 2.100000 0.647000 0.754000 2.100000 0.745000 0.754000 2.100000 0.745000 0.854000 2.100000 2.038000 0.854000 2.100000 2.038000 0.754000 2.100000 2.136000 0.754000 2.100000 2.136000 -0.496000 2.100000 2.038000 -0.496000 2.100000 2.038000 -0.596000 2.100000 2.136000 -0.596000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-86"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-86"
>
<gml:posList
srsDimension=
"3"
>
-0.745000 -0.895000 2.100000 -0.745000 -0.895000 2.190000 -2.136000 -0.895000 2.190000 -2.136000 -0.895000 2.100000 -0.745000 -0.895000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-87"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-87"
>
<gml:posList
srsDimension=
"3"
>
-2.136000 -0.495000 0.300000 -2.136000 -0.495000 2.100000 -2.136000 0.755000 2.100000 -2.136000 0.755000 0.300000 -2.136000 -0.495000 0.300000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-87_1"
>
<gml:posList
srsDimension=
"3"
>
-2.136000 0.655000 1.132000 -2.136000 0.655000 1.182000 -2.136000 -0.395000 1.182000 -2.136000 -0.395000 1.132000 -2.136000 0.655000 1.132000
</gml:posList>
</gml:LinearRing>
</gml:interior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-87_2"
>
<gml:posList
srsDimension=
"3"
>
-2.136000 -0.395000 1.232000 -2.136000 0.655000 1.232000 -2.136000 0.655000 1.282000 -2.136000 -0.395000 1.282000 -2.136000 -0.395000 1.232000
</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-88"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-88"
>
<gml:posList
srsDimension=
"3"
>
-2.067000 0.785000 2.260000 -2.068000 -0.825000 2.260000 -0.745000 -0.825000 2.260000 -0.745000 0.785000 2.260000 -2.067000 0.785000 2.260000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-89"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-89"
>
<gml:posList
srsDimension=
"3"
>
-2.136000 0.855000 2.190000 -0.745000 0.855000 2.190000 -0.745000 0.855000 2.100000 -2.038000 0.855000 2.100000 -2.038000 0.855000 0.300000 -2.038000 0.855000 0.220000 -2.038000 0.855000 0.000000 -2.136000 0.855000 0.000000 -2.136000 0.855000 2.190000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-90"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-90"
>
<gml:posList
srsDimension=
"3"
>
-2.136000 0.755000 2.100000 -2.038000 0.755000 2.100000 -2.038000 0.855000 2.100000 -0.745000 0.855000 2.100000 -0.745000 -0.895000 2.100000 -2.136000 -0.895000 2.100000 -2.136000 -0.595000 2.100000 -2.038000 -0.595000 2.100000 -2.038000 -0.495000 2.100000 -2.136000 -0.495000 2.100000 -2.136000 0.755000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-91"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-91"
>
<gml:posList
srsDimension=
"3"
>
-2.136000 0.755000 0.300000 -2.136000 0.755000 2.100000 -2.136000 -0.495000 2.100000 -2.136000 -0.495000 0.300000 -2.136000 -0.495000 0.220000 -2.136000 -0.495000 0.000000 -2.136000 -0.595000 0.000000 -2.136000 -0.595000 2.100000 -2.136000 -0.895000 2.100000 -2.136000 -0.895000 2.190000 -2.136000 0.855000 2.190000 -2.136000 0.855000 0.000000 -2.136000 0.755000 0.000000 -2.136000 0.755000 0.220000 -2.136000 0.755000 0.300000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-92"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-92"
>
<gml:posList
srsDimension=
"3"
>
-2.136000 -0.495000 2.100000 -2.038000 -0.495000 2.100000 -2.038000 -0.495000 0.000000 -2.136000 -0.495000 0.000000 -2.136000 -0.495000 0.220000 -2.136000 -0.495000 0.300000 -2.136000 -0.495000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-93"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-93"
>
<gml:posList
srsDimension=
"3"
>
-2.038000 -0.595000 2.100000 -2.136000 -0.595000 2.100000 -2.136000 -0.595000 0.000000 -2.038000 -0.595000 0.000000 -2.038000 -0.595000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-94"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-94"
>
<gml:posList
srsDimension=
"3"
>
-2.067000 0.785000 2.260000 -2.136000 0.855000 2.190000 -2.136000 -0.895000 2.190000 -2.068000 -0.825000 2.260000 -2.067000 0.785000 2.260000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-95"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-95"
>
<gml:posList
srsDimension=
"3"
>
-2.038000 -0.495000 2.100000 -2.038000 -0.595000 2.100000 -2.038000 -0.595000 0.000000 -2.038000 -0.495000 0.000000 -2.038000 -0.495000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-96"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-96"
>
<gml:posList
srsDimension=
"3"
>
-0.745000 -0.895000 2.190000 -0.745000 -0.825000 2.260000 -2.068000 -0.825000 2.260000 -2.136000 -0.895000 2.190000 -0.745000 -0.895000 2.190000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-97"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-97"
>
<gml:posList
srsDimension=
"3"
>
-2.038000 0.755000 2.100000 -2.136000 0.755000 2.100000 -2.136000 0.755000 0.300000 -2.136000 0.755000 0.220000 -2.136000 0.755000 0.000000 -2.038000 0.755000 0.000000 -2.038000 0.755000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-98"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-98"
>
<gml:posList
srsDimension=
"3"
>
-0.745000 0.785000 2.260000 -0.745000 0.855000 2.190000 -2.136000 0.855000 2.190000 -2.067000 0.785000 2.260000 -0.745000 0.785000 2.260000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-99"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-99"
>
<gml:posList
srsDimension=
"3"
>
-2.038000 0.855000 2.100000 -2.038000 0.755000 2.100000 -2.038000 0.755000 0.000000 -2.038000 0.855000 0.000000 -2.038000 0.855000 0.220000 -2.038000 0.855000 0.300000 -2.038000 0.855000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-100"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-100"
>
<gml:posList
srsDimension=
"3"
>
-2.136000 -0.495000 0.220000 -2.136000 -0.495000 0.300000 -2.136000 0.755000 0.300000 -2.136000 0.755000 0.220000 -2.136000 -0.495000 0.220000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-101"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-101"
>
<gml:posList
srsDimension=
"3"
>
-2.038000 0.855000 0.220000 -2.038000 0.855000 0.300000 -0.745000 0.855000 0.300000 -0.745000 0.855000 0.220000 -2.038000 0.855000 0.220000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-102"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-102"
>
<gml:posList
srsDimension=
"3"
>
-2.136000 0.655000 1.282000 -2.136000 0.655000 1.232000 -2.136000 -0.395000 1.232000 -2.136000 -0.395000 1.282000 -2.136000 0.655000 1.282000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-103"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-103"
>
<gml:posList
srsDimension=
"3"
>
-2.136000 -0.395000 1.132000 -2.136000 -0.395000 1.182000 -2.136000 0.655000 1.182000 -2.136000 0.655000 1.132000 -2.136000 -0.395000 1.132000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-104"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-104"
>
<gml:posList
srsDimension=
"3"
>
-1.934000 0.855000 1.132000 -1.934000 0.855000 1.182000 -0.843000 0.855000 1.182000 -0.843000 0.855000 1.132000 -1.934000 0.855000 1.132000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-105"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-105"
>
<gml:posList
srsDimension=
"3"
>
-0.843000 0.855000 1.282000 -0.843000 0.855000 1.232000 -1.934000 0.855000 1.232000 -1.934000 0.855000 1.282000 -0.843000 0.855000 1.282000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-106"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-106"
>
<gml:posList
srsDimension=
"3"
>
-2.038000 0.855000 2.100000 -0.745000 0.855000 2.100000 -0.745000 0.855000 0.300000 -2.038000 0.855000 0.300000 -2.038000 0.855000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-106_1"
>
<gml:posList
srsDimension=
"3"
>
-0.843000 0.855000 1.182000 -1.934000 0.855000 1.182000 -1.934000 0.855000 1.132000 -0.843000 0.855000 1.132000 -0.843000 0.855000 1.182000
</gml:posList>
</gml:LinearRing>
</gml:interior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-106_2"
>
<gml:posList
srsDimension=
"3"
>
-1.934000 0.855000 1.282000 -1.934000 0.855000 1.232000 -0.843000 0.855000 1.232000 -0.843000 0.855000 1.282000 -1.934000 0.855000 1.282000
</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</gen:lod2Geometry>
</gen:GenericCityObject>
</core:cityObjectMember>
</core:CityModel>
CityDoctorParent/CityDoctorModel/src/test/resources/zip/implicit/Implicit2.gml
0 → 100644
View file @
2d57794b
<?xml version="1.0" encoding="UTF-8"?>
<core:CityModel
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:core=
"http://www.opengis.net/citygml/2.0"
xmlns:gml=
"http://www.opengis.net/gml"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xmlns:tran=
"http://www.opengis.net/citygml/transportation/2.0"
xmlns:wtr=
"http://www.opengis.net/citygml/waterbody/2.0"
xmlns:smil20lang=
"http://www.w3.org/2001/SMIL20/Language"
xmlns:grp=
"http://www.opengis.net/citygml/cityobjectgroup/2.0"
xmlns:luse=
"http://www.opengis.net/citygml/landuse/2.0"
xmlns:frn=
"http://www.opengis.net/citygml/cityfurniture/2.0"
xmlns:app=
"http://www.opengis.net/citygml/appearance/2.0"
xmlns:tex=
"http://www.opengis.net/citygml/texturedsurface/2.0"
xmlns:smil20=
"http://www.w3.org/2001/SMIL20/"
xmlns:xAL=
"urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"
xmlns:bldg=
"http://www.opengis.net/citygml/building/2.0"
xmlns:dem=
"http://www.opengis.net/citygml/relief/2.0"
xmlns:veg=
"http://www.opengis.net/citygml/vegetation/2.0"
xmlns:brid=
"http://www.opengis.net/citygml/bridge/2.0"
xmlns:tun=
"http://www.opengis.net/citygml/tunnel/2.0"
xmlns:gen=
"http://www.opengis.net/citygml/generics/2.0"
xmlns:wfs=
"http://www.opengis.net/wfs"
xsi:schemaLocation=
"http://www.opengis.net/citygml/landuse/2.0 http://schemas.opengis.net/citygml/landuse/2.0/landUse.xsd http://www.opengis.net/citygml/cityfurniture/2.0 http://schemas.opengis.net/citygml/cityfurniture/2.0/cityFurniture.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/texturedsurface/2.0 http://schemas.opengis.net/citygml/texturedsurface/2.0/texturedSurface.xsd http://www.opengis.net/citygml/transportation/2.0 http://schemas.opengis.net/citygml/transportation/2.0/transportation.xsd http://www.opengis.net/citygml/waterbody/2.0 http://schemas.opengis.net/citygml/waterbody/2.0/waterBody.xsd http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/vegetation/2.0 http://schemas.opengis.net/citygml/vegetation/2.0/vegetation.xsd http://www.opengis.net/citygml/cityobjectgroup/2.0 http://schemas.opengis.net/citygml/cityobjectgroup/2.0/cityObjectGroup.xsd http://www.opengis.net/citygml/bridge/2.0 http://schemas.opengis.net/citygml/bridge/2.0/bridge.xsd http://www.opengis.net/citygml/tunnel/2.0 http://schemas.opengis.net/citygml/tunnel/2.0/tunnel.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd"
>
<gml:description>
Testdataset
</gml:description>
<gml:name>
ImplicitGeometry zipfile testdata
</gml:name>
<core:cityObjectMember>
<gen:GenericCityObject>
<gml:description>
CPA_Symbol
</gml:description>
<gml:name>
Implicit2
</gml:name>
<gen:lod2Geometry>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-5"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-5"
>
<gml:posList
srsDimension=
"3"
>
-0.049000 0.085000 1.162000 -0.098000 0.000000 1.162000 -0.049000 -0.085000 1.162000 0.049000 -0.085000 1.162000 0.098000 0.000000 1.162000 0.049000 0.085000 1.162000 -0.049000 0.085000 1.162000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-5_1"
>
<gml:posList
srsDimension=
"3"
>
-0.052000 0.030000 1.162000 0.000000 0.060000 1.162000 0.052000 0.030000 1.162000 0.052000 -0.030000 1.162000 0.000000 -0.060000 1.162000 -0.052000 -0.030000 1.162000 -0.052000 0.030000 1.162000
</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-6"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-6"
>
<gml:posList
srsDimension=
"3"
>
-0.049000 0.085000 0.000000 -0.049000 0.085000 1.162000 0.049000 0.085000 1.162000 0.049000 0.085000 0.000000 -0.049000 0.085000 0.000000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-7"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-7"
>
<gml:posList
srsDimension=
"3"
>
-0.098000 0.000000 0.000000 -0.098000 0.000000 1.162000 -0.049000 0.085000 1.162000 -0.049000 0.085000 0.000000 -0.098000 0.000000 0.000000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-8"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-8"
>
<gml:posList
srsDimension=
"3"
>
0.098000 0.000000 0.000000 0.098000 0.000000 1.162000 0.049000 -0.085000 1.162000 0.049000 -0.085000 0.000000 0.098000 0.000000 0.000000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-9"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-9"
>
<gml:posList
srsDimension=
"3"
>
-0.049000 -0.085000 0.000000 -0.049000 -0.085000 1.162000 -0.098000 0.000000 1.162000 -0.098000 0.000000 0.000000 -0.049000 -0.085000 0.000000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-10"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-10"
>
<gml:posList
srsDimension=
"3"
>
0.049000 0.085000 0.000000 0.049000 0.085000 1.162000 0.098000 0.000000 1.162000 0.098000 0.000000 0.000000 0.049000 0.085000 0.000000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-11"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-11"
>
<gml:posList
srsDimension=
"3"
>
0.049000 -0.085000 0.000000 0.049000 -0.085000 1.162000 -0.049000 -0.085000 1.162000 -0.049000 -0.085000 0.000000 0.049000 -0.085000 0.000000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-12"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-12"
>
<gml:posList
srsDimension=
"3"
>
0.000000 0.408000 4.880000 0.353000 0.205000 4.880000 0.353000 0.205000 4.830000 0.000000 0.408000 4.830000 0.000000 0.408000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-13"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-13"
>
<gml:posList
srsDimension=
"3"
>
0.000000 0.408000 4.880000 0.000000 0.001000 5.000000 0.353000 0.205000 4.880000 0.000000 0.408000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-14"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-14"
>
<gml:posList
srsDimension=
"3"
>
-0.353000 -0.202000 4.880000 0.000000 -0.406000 4.880000 0.000000 0.001000 5.000000 -0.353000 -0.202000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-15"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-15"
>
<gml:posList
srsDimension=
"3"
>
0.000000 0.001000 5.000000 0.000000 0.408000 4.880000 -0.353000 0.205000 4.880000 0.000000 0.001000 5.000000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-16"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-16"
>
<gml:posList
srsDimension=
"3"
>
0.000000 -0.406000 4.880000 -0.353000 -0.202000 4.880000 -0.353000 -0.202000 4.830000 0.000000 -0.406000 4.830000 0.000000 -0.406000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-17"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-17"
>
<gml:posList
srsDimension=
"3"
>
0.353000 -0.202000 4.880000 0.353000 0.205000 4.880000 0.000000 0.001000 5.000000 0.353000 -0.202000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-18"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-18"
>
<gml:posList
srsDimension=
"3"
>
0.353000 0.205000 4.880000 0.353000 -0.202000 4.880000 0.353000 -0.202000 4.830000 0.353000 0.205000 4.830000 0.353000 0.205000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-19"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-19"
>
<gml:posList
srsDimension=
"3"
>
0.353000 -0.202000 4.880000 0.000000 0.001000 5.000000 0.000000 -0.406000 4.880000 0.353000 -0.202000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-20"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-20"
>
<gml:posList
srsDimension=
"3"
>
-0.353000 0.205000 4.880000 -0.353000 -0.202000 4.880000 0.000000 0.001000 5.000000 -0.353000 0.205000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-21"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-21"
>
<gml:posList
srsDimension=
"3"
>
0.000000 0.080000 3.982000 0.069000 0.040000 3.982000 0.069000 0.040000 3.892000 0.000000 0.080000 3.892000 0.000000 0.080000 3.982000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-22"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-22"
>
<gml:posList
srsDimension=
"3"
>
0.069000 0.040000 3.982000 0.069000 -0.040000 3.982000 0.069000 -0.040000 3.892000 0.069000 0.040000 3.892000 0.069000 0.040000 3.982000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-23"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-23"
>
<gml:posList
srsDimension=
"3"
>
0.353000 -0.202000 4.880000 0.000000 -0.406000 4.880000 0.000000 -0.406000 4.830000 0.353000 -0.202000 4.830000 0.353000 -0.202000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-24"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-24"
>
<gml:posList
srsDimension=
"3"
>
-0.069000 0.040000 3.982000 0.000000 0.080000 3.982000 0.000000 0.080000 3.892000 -0.069000 0.040000 3.892000 -0.069000 0.040000 3.982000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-25"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-25"
>
<gml:posList
srsDimension=
"3"
>
0.000000 -0.080000 3.982000 -0.069000 -0.040000 3.982000 -0.069000 -0.040000 3.892000 0.000000 -0.080000 3.892000 0.000000 -0.080000 3.982000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-26"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-26"
>
<gml:posList
srsDimension=
"3"
>
-0.353000 -0.202000 4.880000 -0.353000 0.205000 4.880000 -0.353000 0.205000 4.830000 -0.353000 -0.202000 4.830000 -0.353000 -0.202000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-27"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-27"
>
<gml:posList
srsDimension=
"3"
>
-0.353000 0.205000 4.880000 0.000000 0.408000 4.880000 0.000000 0.408000 4.830000 -0.353000 0.205000 4.830000 -0.353000 0.205000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-28"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-28"
>
<gml:posList
srsDimension=
"3"
>
-0.069000 -0.040000 3.982000 -0.069000 0.040000 3.982000 -0.069000 0.040000 3.892000 -0.069000 -0.040000 3.892000 -0.069000 -0.040000 3.982000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-29"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-29"
>
<gml:posList
srsDimension=
"3"
>
0.000000 -0.080000 3.892000 -0.069000 -0.040000 3.892000 -0.069000 0.040000 3.892000 0.000000 0.080000 3.892000 0.069000 0.040000 3.892000 0.069000 -0.040000 3.892000 0.000000 -0.080000 3.892000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-29_1"
>
<gml:posList
srsDimension=
"3"
>
-0.052000 0.030000 3.892000 -0.052000 -0.030000 3.892000 0.000000 -0.060000 3.892000 0.052000 -0.030000 3.892000 0.052000 0.030000 3.892000 0.000000 0.060000 3.892000 -0.052000 0.030000 3.892000
</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-30"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-30"
>
<gml:posList
srsDimension=
"3"
>
-0.052000 -0.030000 3.892000 -0.052000 -0.030000 1.162000 0.000000 -0.060000 1.162000 0.000000 -0.060000 3.892000 -0.052000 -0.030000 3.892000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-31"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-31"
>
<gml:posList
srsDimension=
"3"
>
0.052000 0.030000 3.892000 0.052000 0.030000 1.162000 0.000000 0.060000 1.162000 0.000000 0.060000 3.892000 0.052000 0.030000 3.892000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-32"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-32"
>
<gml:posList
srsDimension=
"3"
>
0.000000 0.060000 3.892000 0.000000 0.060000 1.162000 -0.052000 0.030000 1.162000 -0.052000 0.030000 3.892000 0.000000 0.060000 3.892000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-33"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-33"
>
<gml:posList
srsDimension=
"3"
>
-0.052000 0.030000 3.892000 -0.052000 0.030000 1.162000 -0.052000 -0.030000 1.162000 -0.052000 -0.030000 3.892000 -0.052000 0.030000 3.892000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-34"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-34"
>
<gml:posList
srsDimension=
"3"
>
0.069000 -0.040000 3.982000 0.000000 -0.080000 3.982000 0.000000 -0.080000 3.892000 0.069000 -0.040000 3.892000 0.069000 -0.040000 3.982000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-35"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-35"
>
<gml:posList
srsDimension=
"3"
>
-0.286000 0.166000 4.880000 -0.181000 0.105000 4.117000 -0.181000 -0.104000 4.117000 -0.286000 -0.164000 4.880000 -0.286000 0.166000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-36"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-36"
>
<gml:posList
srsDimension=
"3"
>
-0.171000 -0.099000 4.050000 -0.138000 -0.080000 3.982000 0.000000 -0.160000 3.982000 0.000000 -0.197000 4.050000 -0.171000 -0.099000 4.050000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-37"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-37"
>
<gml:posList
srsDimension=
"3"
>
0.286000 -0.164000 4.880000 0.181000 -0.104000 4.117000 0.181000 0.105000 4.117000 0.286000 0.166000 4.880000 0.286000 -0.164000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-38"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-38"
>
<gml:posList
srsDimension=
"3"
>
0.138000 -0.080000 3.982000 0.171000 -0.099000 4.050000 0.000000 -0.197000 4.050000 0.000000 -0.160000 3.982000 0.138000 -0.080000 3.982000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-39"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-39"
>
<gml:posList
srsDimension=
"3"
>
0.000000 -0.329000 4.880000 0.000000 -0.208000 4.117000 0.181000 -0.104000 4.117000 0.286000 -0.164000 4.880000 0.000000 -0.329000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-40"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-40"
>
<gml:posList
srsDimension=
"3"
>
0.171000 -0.099000 4.050000 0.138000 -0.080000 3.982000 0.138000 0.080000 3.982000 0.171000 0.099000 4.050000 0.171000 -0.099000 4.050000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-41"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-41"
>
<gml:posList
srsDimension=
"3"
>
0.171000 0.099000 4.050000 0.181000 0.105000 4.117000 0.181000 -0.104000 4.117000 0.171000 -0.099000 4.050000 0.171000 0.099000 4.050000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-42"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-42"
>
<gml:posList
srsDimension=
"3"
>
0.171000 -0.099000 4.050000 0.181000 -0.104000 4.117000 0.000000 -0.208000 4.117000 0.000000 -0.197000 4.050000 0.171000 -0.099000 4.050000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-43"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-43"
>
<gml:posList
srsDimension=
"3"
>
-0.138000 0.080000 3.982000 -0.171000 0.099000 4.050000 0.000000 0.198000 4.050000 0.000000 0.160000 3.982000 -0.138000 0.080000 3.982000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-44"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-44"
>
<gml:posList
srsDimension=
"3"
>
0.000000 -0.060000 3.892000 0.000000 -0.060000 1.162000 0.052000 -0.030000 1.162000 0.052000 -0.030000 3.892000 0.000000 -0.060000 3.892000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-45"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-45"
>
<gml:posList
srsDimension=
"3"
>
-0.286000 -0.164000 4.880000 -0.181000 -0.104000 4.117000 0.000000 -0.208000 4.117000 0.000000 -0.329000 4.880000 -0.286000 -0.164000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-46"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-46"
>
<gml:posList
srsDimension=
"3"
>
0.171000 0.099000 4.050000 0.138000 0.080000 3.982000 0.000000 0.160000 3.982000 0.000000 0.198000 4.050000 0.171000 0.099000 4.050000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-47"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-47"
>
<gml:posList
srsDimension=
"3"
>
0.000000 0.198000 4.050000 0.000000 0.209000 4.117000 0.181000 0.105000 4.117000 0.171000 0.099000 4.050000 0.000000 0.198000 4.050000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-48"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-48"
>
<gml:posList
srsDimension=
"3"
>
-0.171000 -0.099000 4.050000 -0.181000 -0.104000 4.117000 -0.181000 0.105000 4.117000 -0.171000 0.099000 4.050000 -0.171000 -0.099000 4.050000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-49"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-49"
>
<gml:posList
srsDimension=
"3"
>
-0.171000 0.099000 4.050000 -0.138000 0.080000 3.982000 -0.138000 -0.080000 3.982000 -0.171000 -0.099000 4.050000 -0.171000 0.099000 4.050000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-50"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-50"
>
<gml:posList
srsDimension=
"3"
>
-0.171000 0.099000 4.050000 -0.181000 0.105000 4.117000 0.000000 0.209000 4.117000 0.000000 0.198000 4.050000 -0.171000 0.099000 4.050000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-51"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-51"
>
<gml:posList
srsDimension=
"3"
>
0.000000 0.331000 4.880000 0.000000 0.209000 4.117000 -0.181000 0.105000 4.117000 -0.286000 0.166000 4.880000 0.000000 0.331000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-52"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-52"
>
<gml:posList
srsDimension=
"3"
>
-0.138000 0.080000 3.982000 0.000000 0.160000 3.982000 0.138000 0.080000 3.982000 0.138000 -0.080000 3.982000 0.000000 -0.160000 3.982000 -0.138000 -0.080000 3.982000 -0.138000 0.080000 3.982000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-52_1"
>
<gml:posList
srsDimension=
"3"
>
0.069000 0.040000 3.982000 0.000000 0.080000 3.982000 -0.069000 0.040000 3.982000 -0.069000 -0.040000 3.982000 0.000000 -0.080000 3.982000 0.069000 -0.040000 3.982000 0.069000 0.040000 3.982000
</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-53"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-53"
>
<gml:posList
srsDimension=
"3"
>
0.052000 -0.030000 3.892000 0.052000 -0.030000 1.162000 0.052000 0.030000 1.162000 0.052000 0.030000 3.892000 0.052000 -0.030000 3.892000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-54"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-54"
>
<gml:posList
srsDimension=
"3"
>
0.000000 -0.197000 4.050000 0.000000 -0.208000 4.117000 -0.181000 -0.104000 4.117000 -0.171000 -0.099000 4.050000 0.000000 -0.197000 4.050000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-55"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-55"
>
<gml:posList
srsDimension=
"3"
>
0.286000 0.166000 4.880000 0.181000 0.105000 4.117000 0.000000 0.209000 4.117000 0.000000 0.331000 4.880000 0.286000 0.166000 4.880000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</gen:lod2Geometry>
</gen:GenericCityObject>
</core:cityObjectMember>
</core:CityModel>
CityDoctorParent/CityDoctorModel/src/test/resources/zip/implicit/Main_model.gml
0 → 100644
View file @
2d57794b
<?xml version="1.0" encoding="UTF-8"?>
<core:CityModel
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:core=
"http://www.opengis.net/citygml/2.0"
xmlns:gml=
"http://www.opengis.net/gml"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xmlns:tran=
"http://www.opengis.net/citygml/transportation/2.0"
xmlns:wtr=
"http://www.opengis.net/citygml/waterbody/2.0"
xmlns:smil20lang=
"http://www.w3.org/2001/SMIL20/Language"
xmlns:grp=
"http://www.opengis.net/citygml/cityobjectgroup/2.0"
xmlns:luse=
"http://www.opengis.net/citygml/landuse/2.0"
xmlns:frn=
"http://www.opengis.net/citygml/cityfurniture/2.0"
xmlns:app=
"http://www.opengis.net/citygml/appearance/2.0"
xmlns:tex=
"http://www.opengis.net/citygml/texturedsurface/2.0"
xmlns:smil20=
"http://www.w3.org/2001/SMIL20/"
xmlns:xAL=
"urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"
xmlns:bldg=
"http://www.opengis.net/citygml/building/2.0"
xmlns:dem=
"http://www.opengis.net/citygml/relief/2.0"
xmlns:veg=
"http://www.opengis.net/citygml/vegetation/2.0"
xmlns:brid=
"http://www.opengis.net/citygml/bridge/2.0"
xmlns:tun=
"http://www.opengis.net/citygml/tunnel/2.0"
xmlns:gen=
"http://www.opengis.net/citygml/generics/2.0"
xmlns:wfs=
"http://www.opengis.net/wfs"
xsi:schemaLocation=
"http://www.opengis.net/citygml/landuse/2.0 http://schemas.opengis.net/citygml/landuse/2.0/landUse.xsd http://www.opengis.net/citygml/cityfurniture/2.0 http://schemas.opengis.net/citygml/cityfurniture/2.0/cityFurniture.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/texturedsurface/2.0 http://schemas.opengis.net/citygml/texturedsurface/2.0/texturedSurface.xsd http://www.opengis.net/citygml/transportation/2.0 http://schemas.opengis.net/citygml/transportation/2.0/transportation.xsd http://www.opengis.net/citygml/waterbody/2.0 http://schemas.opengis.net/citygml/waterbody/2.0/waterBody.xsd http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/vegetation/2.0 http://schemas.opengis.net/citygml/vegetation/2.0/vegetation.xsd http://www.opengis.net/citygml/cityobjectgroup/2.0 http://schemas.opengis.net/citygml/cityobjectgroup/2.0/cityObjectGroup.xsd http://www.opengis.net/citygml/bridge/2.0 http://schemas.opengis.net/citygml/bridge/2.0/bridge.xsd http://www.opengis.net/citygml/tunnel/2.0 http://schemas.opengis.net/citygml/tunnel/2.0/tunnel.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd"
>
<gml:description>
G:\62\GIS_tui\Produkte\3D\Zusammenarbeit_Universitäten\HFT Stuttgart\Testdatensatz_28062022\Export_Wiesdorf.gml
</gml:description>
<gml:name>
G:\62\GIS_tui\Produkte\3D\Zusammenarbeit_Universitäten\HFT Stuttgart\Testdatensatz_28062022\Export_Wiesdorf.gml
</gml:name>
<gml:boundedBy>
<gml:Envelope
srsDimension=
"3"
srsName=
"urn:ogc:def:crs:EPSG::25832"
>
<gml:lowerCorner>
357978.09 5654873.32 0.00
</gml:lowerCorner>
<gml:upperCorner>
359213.91 5656013.49 0.00
</gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"IC40f8b818-84e2-4bf7-bbfa-22af5f20f9f3"
>
<core:transformationMatrix>
1.0 0.0 0 0
-0.0 1.0 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
Implicit2.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
359134.053 5655248.918 46.90999985
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#IC40f8b818-84e2-4bf7-bbfa-22af5f20f9f3"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#IC40f8b818-84e2-4bf7-bbfa-22af5f20f9f3"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#IC40f8b818-84e2-4bf7-bbfa-22af5f20f9f3"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"IC18370283-fc17-4a8d-812e-ac677b3cc6aa"
>
<core:transformationMatrix>
1.0 0.0 0 0
-0.0 1.0 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
Implicit2.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
358805.594 5655223.78 46.59999847
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#IC18370283-fc17-4a8d-812e-ac677b3cc6aa"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#IC18370283-fc17-4a8d-812e-ac677b3cc6aa"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#IC18370283-fc17-4a8d-812e-ac677b3cc6aa"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"ICf9ac1d5a-4be4-466c-934e-58cdce2cb082"
>
<core:transformationMatrix>
1.0 0.0 0 0
-0.0 1.0 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
Implicit2.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
358528.544 5655634.731 44.45999908
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#ICf9ac1d5a-4be4-466c-934e-58cdce2cb082"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#ICf9ac1d5a-4be4-466c-934e-58cdce2cb082"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#ICf9ac1d5a-4be4-466c-934e-58cdce2cb082"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"IC1f5d078e-869e-4adc-95bf-6e1ada98105d"
>
<core:transformationMatrix>
1.0 0.0 0 0
-0.0 1.0 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
Implicit2.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
358921.258 5655754.859 44.00999832
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#IC1f5d078e-869e-4adc-95bf-6e1ada98105d"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#IC1f5d078e-869e-4adc-95bf-6e1ada98105d"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#IC1f5d078e-869e-4adc-95bf-6e1ada98105d"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"IC15f429a4-4997-4e7f-8eca-e5c6087ed869"
>
<core:transformationMatrix>
1.0 0.0 0 0
-0.0 1.0 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
Implicit2.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
358566.979 5655138.757 46.36000061
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#IC15f429a4-4997-4e7f-8eca-e5c6087ed869"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#IC15f429a4-4997-4e7f-8eca-e5c6087ed869"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#IC15f429a4-4997-4e7f-8eca-e5c6087ed869"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"ICf9cb14cc-99a2-4bf2-ac68-75e876aebe1a"
>
<core:transformationMatrix>
1.0 0.0 0 0
-0.0 1.0 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
Implicit2.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
358503.967 5655267.126 46.91999817
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#ICf9cb14cc-99a2-4bf2-ac68-75e876aebe1a"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#ICf9cb14cc-99a2-4bf2-ac68-75e876aebe1a"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#ICf9cb14cc-99a2-4bf2-ac68-75e876aebe1a"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"IC2df38958-7c1d-4804-aaea-93ea742e62c1"
>
<core:transformationMatrix>
1.0 0.0 0 0
-0.0 1.0 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
Implicit2.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
359055.978 5655849.151 42.93000031
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#IC2df38958-7c1d-4804-aaea-93ea742e62c1"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#IC2df38958-7c1d-4804-aaea-93ea742e62c1"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#IC2df38958-7c1d-4804-aaea-93ea742e62c1"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"IC6cd916e8-1916-4e68-ae19-2b48b02a3cd9"
>
<core:transformationMatrix>
1.0 0.0 0 0
-0.0 1.0 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
Implicit2.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
358551.225 5655559.56 44.58000183
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#IC6cd916e8-1916-4e68-ae19-2b48b02a3cd9"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#IC6cd916e8-1916-4e68-ae19-2b48b02a3cd9"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#IC6cd916e8-1916-4e68-ae19-2b48b02a3cd9"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"IC9926fd28-fa21-4a5c-8829-9baf2100ee74"
>
<core:transformationMatrix>
1.0 0.0 0 0
-0.0 1.0 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
Implicit2.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
359050.629 5655010.897 45.25999832
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#IC9926fd28-fa21-4a5c-8829-9baf2100ee74"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#IC9926fd28-fa21-4a5c-8829-9baf2100ee74"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#IC9926fd28-fa21-4a5c-8829-9baf2100ee74"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"IC860511a3-6d12-4d5e-9ecc-c8c8ab866d48"
>
<core:transformationMatrix>
1.0 0.0 0 0
-0.0 1.0 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
Implicit2.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
358445.815 5655744.757 43.90999985
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#IC860511a3-6d12-4d5e-9ecc-c8c8ab866d48"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#IC860511a3-6d12-4d5e-9ecc-c8c8ab866d48"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#IC860511a3-6d12-4d5e-9ecc-c8c8ab866d48"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"IC9a67f98b-ea7c-4650-a76b-70ddf055693e"
>
<core:transformationMatrix>
1.0 0.0 0 0
-0.0 1.0 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
Implicit2.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
357980.349 5655498.896 46.88999939
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#IC9a67f98b-ea7c-4650-a76b-70ddf055693e"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#IC9a67f98b-ea7c-4650-a76b-70ddf055693e"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#IC9a67f98b-ea7c-4650-a76b-70ddf055693e"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"IC574549b9-5daf-4404-922f-ad143f772cf5"
>
<core:transformationMatrix>
1.0 0.0 0 0
-0.0 1.0 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
Implicit2.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
358828.134 5655492.423 45.84000015
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#IC574549b9-5daf-4404-922f-ad143f772cf5"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#IC574549b9-5daf-4404-922f-ad143f772cf5"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#IC574549b9-5daf-4404-922f-ad143f772cf5"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"IC16de12fd-a52a-4c99-91e1-6466bf223c35"
>
<core:transformationMatrix>
1.0 0.0 0 0
-0.0 1.0 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
Implicit2.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
358872.807 5655511.242 45.72999954
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#IC16de12fd-a52a-4c99-91e1-6466bf223c35"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#IC16de12fd-a52a-4c99-91e1-6466bf223c35"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#IC16de12fd-a52a-4c99-91e1-6466bf223c35"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"IC06c0a1de-c757-41d1-8142-eb43b941c06e"
>
<core:transformationMatrix>
0.9444916824817261 -0.3285353279676911 0 0
0.3285353279676911 0.9444916824817261 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
Implicit1.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
358600.899 5655436.227 46.47575902257221
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#IC06c0a1de-c757-41d1-8142-eb43b941c06e"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#IC06c0a1de-c757-41d1-8142-eb43b941c06e"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#IC06c0a1de-c757-41d1-8142-eb43b941c06e"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"ICe37a46d4-dd5c-4da4-bc63-4fd64104fa7f"
>
<core:transformationMatrix>
-0.9667328231176867 0.2557882888384602 0 0
-0.2557882888384602 -0.9667328231176867 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
Implicit1.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
358564.214 5655406.122 46.67377932584644
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#ICe37a46d4-dd5c-4da4-bc63-4fd64104fa7f"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#ICe37a46d4-dd5c-4da4-bc63-4fd64104fa7f"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#ICe37a46d4-dd5c-4da4-bc63-4fd64104fa7f"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"ICd0cefddc-7ed8-44c4-8ef2-a7f517e374c5"
>
<core:transformationMatrix>
0.4199574315257782 0.9075438037396715 0 0
-0.9075438037396715 0.4199574315257782 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
Implicit1.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
358996.371 5655511.698 47.731653352198045
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#ICd0cefddc-7ed8-44c4-8ef2-a7f517e374c5"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#ICd0cefddc-7ed8-44c4-8ef2-a7f517e374c5"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#ICd0cefddc-7ed8-44c4-8ef2-a7f517e374c5"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"IC8f1f5e1b-2612-49d8-b3a1-76a304142566"
>
<core:transformationMatrix>
-0.3960952573399263 -0.9182094244304061 0 0
0.9182094244304061 -0.3960952573399263 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
subdir/Implicit3.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
358965.209 5655485.702 47.407838617376704
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#IC8f1f5e1b-2612-49d8-b3a1-76a304142566"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#IC8f1f5e1b-2612-49d8-b3a1-76a304142566"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#IC8f1f5e1b-2612-49d8-b3a1-76a304142566"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
<core:cityObjectMember>
<gen:GenericCityObject>
<gen:lod1ImplicitRepresentation>
<core:ImplicitGeometry
gml:id=
"ICe80df500-b965-49be-b06a-3993f02370ce"
>
<core:transformationMatrix>
-0.35611833267672716 -0.9344408665782699 0 0
0.9344408665782699 -0.35611833267672716 0 0
0 0 1.0 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
subdir/Implicit3.gml
</core:libraryObject>
<core:referencePoint>
<gml:Point>
<gml:pos>
358973.349 5655464.637 47.32017288640677
</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</gen:lod1ImplicitRepresentation>
<gen:lod2ImplicitRepresentation
xlink:href=
"#ICe80df500-b965-49be-b06a-3993f02370ce"
/>
<gen:lod3ImplicitRepresentation
xlink:href=
"#ICe80df500-b965-49be-b06a-3993f02370ce"
/>
<gen:lod4ImplicitRepresentation
xlink:href=
"#ICe80df500-b965-49be-b06a-3993f02370ce"
/>
</gen:GenericCityObject>
</core:cityObjectMember>
</core:CityModel>
\ No newline at end of file
CityDoctorParent/CityDoctorModel/src/test/resources/zip/implicit/subdir/Implicit3.gml
0 → 100644
View file @
2d57794b
<?xml version="1.0" encoding="UTF-8"?>
<core:CityModel
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:core=
"http://www.opengis.net/citygml/2.0"
xmlns:gml=
"http://www.opengis.net/gml"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xmlns:tran=
"http://www.opengis.net/citygml/transportation/2.0"
xmlns:wtr=
"http://www.opengis.net/citygml/waterbody/2.0"
xmlns:smil20lang=
"http://www.w3.org/2001/SMIL20/Language"
xmlns:grp=
"http://www.opengis.net/citygml/cityobjectgroup/2.0"
xmlns:luse=
"http://www.opengis.net/citygml/landuse/2.0"
xmlns:frn=
"http://www.opengis.net/citygml/cityfurniture/2.0"
xmlns:app=
"http://www.opengis.net/citygml/appearance/2.0"
xmlns:tex=
"http://www.opengis.net/citygml/texturedsurface/2.0"
xmlns:smil20=
"http://www.w3.org/2001/SMIL20/"
xmlns:xAL=
"urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"
xmlns:bldg=
"http://www.opengis.net/citygml/building/2.0"
xmlns:dem=
"http://www.opengis.net/citygml/relief/2.0"
xmlns:veg=
"http://www.opengis.net/citygml/vegetation/2.0"
xmlns:brid=
"http://www.opengis.net/citygml/bridge/2.0"
xmlns:tun=
"http://www.opengis.net/citygml/tunnel/2.0"
xmlns:gen=
"http://www.opengis.net/citygml/generics/2.0"
xmlns:wfs=
"http://www.opengis.net/wfs"
xsi:schemaLocation=
"http://www.opengis.net/citygml/landuse/2.0 http://schemas.opengis.net/citygml/landuse/2.0/landUse.xsd http://www.opengis.net/citygml/cityfurniture/2.0 http://schemas.opengis.net/citygml/cityfurniture/2.0/cityFurniture.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/texturedsurface/2.0 http://schemas.opengis.net/citygml/texturedsurface/2.0/texturedSurface.xsd http://www.opengis.net/citygml/transportation/2.0 http://schemas.opengis.net/citygml/transportation/2.0/transportation.xsd http://www.opengis.net/citygml/waterbody/2.0 http://schemas.opengis.net/citygml/waterbody/2.0/waterBody.xsd http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/vegetation/2.0 http://schemas.opengis.net/citygml/vegetation/2.0/vegetation.xsd http://www.opengis.net/citygml/cityobjectgroup/2.0 http://schemas.opengis.net/citygml/cityobjectgroup/2.0/cityObjectGroup.xsd http://www.opengis.net/citygml/bridge/2.0 http://schemas.opengis.net/citygml/bridge/2.0/bridge.xsd http://www.opengis.net/citygml/tunnel/2.0 http://schemas.opengis.net/citygml/tunnel/2.0/tunnel.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd"
>
<gml:description>
Testdataset
</gml:description>
<gml:name>
ImplicitGeometry zipfile testdata
</gml:name>
<core:cityObjectMember>
<gen:GenericCityObject>
<gml:description>
CPA_Symbol
</gml:description>
<gml:name>
Implicit3
</gml:name>
<gen:lod2Geometry>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-5"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-5"
>
<gml:posList
srsDimension=
"3"
>
-0.147000 0.860000 1.282000 -0.147000 0.860000 1.232000 -1.238000 0.860000 1.232000 -1.238000 0.860000 1.282000 -0.147000 0.860000 1.282000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-6"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-6"
>
<gml:posList
srsDimension=
"3"
>
-1.440000 0.760000 0.000000 -1.440000 0.760000 2.100000 -1.441000 -0.890000 2.100000 -1.441000 -0.890000 2.190000 -1.441000 -0.820000 2.260000 -1.440000 0.790000 2.260000 -1.440000 0.860000 2.190000 -1.440000 0.860000 0.000000 -1.440000 0.760000 0.000000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-7"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-7"
>
<gml:posList
srsDimension=
"3"
>
-0.049000 -0.890000 2.100000 -0.049000 -0.890000 2.190000 -1.441000 -0.890000 2.190000 -1.441000 -0.890000 2.100000 -0.049000 -0.890000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-8"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-8"
>
<gml:posList
srsDimension=
"3"
>
-1.441000 -0.820000 2.260000 -1.441000 -0.890000 2.190000 -0.049000 -0.890000 2.190000 -0.049000 -0.820000 2.260000 -1.441000 -0.820000 2.260000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-9"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-9"
>
<gml:posList
srsDimension=
"3"
>
-1.440000 0.860000 2.190000 -1.440000 0.790000 2.260000 -0.049000 0.790000 2.260000 -0.049000 0.860000 2.190000 -1.440000 0.860000 2.190000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-10"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-10"
>
<gml:posList
srsDimension=
"3"
>
-1.238000 0.860000 1.132000 -1.238000 0.860000 1.182000 -0.147000 0.860000 1.182000 -0.147000 0.860000 1.132000 -1.238000 0.860000 1.132000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-11"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-11"
>
<gml:posList
srsDimension=
"3"
>
-0.049000 0.790000 2.260000 -1.440000 0.790000 2.260000 -1.441000 -0.820000 2.260000 -0.049000 -0.820000 2.260000 -0.049000 0.790000 2.260000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-12"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-12"
>
<gml:posList
srsDimension=
"3"
>
-1.342000 0.760000 2.100000 -1.440000 0.760000 2.100000 -1.440000 0.760000 0.000000 -1.342000 0.760000 0.000000 -1.342000 0.760000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-13"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-13"
>
<gml:posList
srsDimension=
"3"
>
-1.441000 -0.890000 2.100000 -1.440000 0.760000 2.100000 -1.342000 0.760000 2.100000 -1.342000 0.860000 2.100000 -0.049000 0.860000 2.100000 -0.049000 -0.890000 2.100000 -1.441000 -0.890000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-14"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-14"
>
<gml:posList
srsDimension=
"3"
>
-1.440000 0.860000 2.190000 -0.049000 0.860000 2.190000 -0.049000 0.860000 2.100000 -1.342000 0.860000 2.100000 -1.342000 0.860000 0.547000 -1.342000 0.860000 0.504000 -1.342000 0.860000 0.300000 -1.342000 0.860000 0.220000 -1.342000 0.860000 0.000000 -1.440000 0.860000 0.000000 -1.440000 0.860000 2.190000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-15"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-15"
>
<gml:posList
srsDimension=
"3"
>
-1.342000 0.860000 0.220000 -1.342000 0.860000 0.300000 -0.049000 0.860000 0.300000 -0.049000 0.860000 0.220000 -1.342000 0.860000 0.220000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-16"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-16"
>
<gml:posList
srsDimension=
"3"
>
-1.342000 0.860000 2.100000 -1.342000 0.760000 2.100000 -1.342000 0.760000 0.000000 -1.342000 0.860000 0.000000 -1.342000 0.860000 0.220000 -1.342000 0.860000 0.300000 -1.342000 0.860000 0.504000 -1.342000 0.860000 0.547000 -1.342000 0.860000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-17"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-17"
>
<gml:posList
srsDimension=
"3"
>
-1.342000 0.860000 0.547000 -1.342000 0.860000 0.504000 -1.242000 0.860000 0.504000 -1.242000 0.860000 0.547000 -1.342000 0.860000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-18"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-18"
>
<gml:posList
srsDimension=
"3"
>
-1.242000 0.860000 0.504000 -1.242000 0.535000 0.504000 -1.242000 0.535000 0.547000 -1.242000 0.860000 0.547000 -1.242000 0.860000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-19"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-19"
>
<gml:posList
srsDimension=
"3"
>
-1.192000 0.535000 0.504000 -1.192000 0.860000 0.504000 -1.192000 0.860000 0.547000 -1.192000 0.535000 0.547000 -1.192000 0.535000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-20"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-20"
>
<gml:posList
srsDimension=
"3"
>
-1.242000 0.535000 0.547000 -1.242000 0.535000 0.504000 -1.192000 0.535000 0.504000 -1.192000 0.535000 0.547000 -1.242000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-21"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-21"
>
<gml:posList
srsDimension=
"3"
>
-1.242000 0.860000 0.547000 -1.242000 0.535000 0.547000 -1.192000 0.535000 0.547000 -1.192000 0.860000 0.547000 -1.242000 0.860000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-22"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-22"
>
<gml:posList
srsDimension=
"3"
>
-0.199000 0.860000 0.504000 -0.199000 0.535000 0.504000 -0.199000 0.535000 0.547000 -0.199000 0.860000 0.547000 -0.199000 0.860000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-23"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-23"
>
<gml:posList
srsDimension=
"3"
>
-0.149000 0.535000 0.504000 -0.149000 0.535000 0.547000 -0.199000 0.535000 0.547000 -0.199000 0.535000 0.504000 -0.149000 0.535000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-24"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-24"
>
<gml:posList
srsDimension=
"3"
>
-0.149000 0.535000 0.547000 -0.149000 0.860000 0.547000 -0.199000 0.860000 0.547000 -0.199000 0.535000 0.547000 -0.149000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-25"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-25"
>
<gml:posList
srsDimension=
"3"
>
-0.892000 0.860000 0.547000 -0.892000 0.535000 0.547000 -0.842000 0.535000 0.547000 -0.842000 0.860000 0.547000 -0.892000 0.860000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-26"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-26"
>
<gml:posList
srsDimension=
"3"
>
-0.892000 0.535000 0.547000 -0.892000 0.535000 0.504000 -0.842000 0.535000 0.504000 -0.842000 0.535000 0.547000 -0.892000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-27"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-27"
>
<gml:posList
srsDimension=
"3"
>
-0.842000 0.535000 0.504000 -0.842000 0.860000 0.504000 -0.842000 0.860000 0.547000 -0.842000 0.535000 0.547000 -0.842000 0.535000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-28"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-28"
>
<gml:posList
srsDimension=
"3"
>
-0.892000 0.860000 0.504000 -0.892000 0.535000 0.504000 -0.892000 0.535000 0.547000 -0.892000 0.860000 0.547000 -0.892000 0.860000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-29"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-29"
>
<gml:posList
srsDimension=
"3"
>
-0.552000 0.535000 0.547000 -0.552000 0.535000 0.504000 -0.502000 0.535000 0.504000 -0.502000 0.535000 0.547000 -0.552000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-30"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-30"
>
<gml:posList
srsDimension=
"3"
>
-0.502000 0.535000 0.504000 -0.502000 0.860000 0.504000 -0.502000 0.860000 0.547000 -0.502000 0.535000 0.547000 -0.502000 0.535000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-31"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-31"
>
<gml:posList
srsDimension=
"3"
>
-0.552000 0.860000 0.547000 -0.552000 0.535000 0.547000 -0.502000 0.535000 0.547000 -0.502000 0.860000 0.547000 -0.552000 0.860000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-32"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-32"
>
<gml:posList
srsDimension=
"3"
>
-1.172000 0.840000 0.547000 -1.172000 0.535000 0.547000 -0.912000 0.535000 0.547000 -0.912000 0.840000 0.547000 -1.172000 0.840000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-33"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-33"
>
<gml:posList
srsDimension=
"3"
>
-1.172000 0.535000 0.520000 -1.172000 0.840000 0.520000 -0.912000 0.840000 0.520000 -0.912000 0.535000 0.520000 -1.172000 0.535000 0.520000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-34"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-34"
>
<gml:posList
srsDimension=
"3"
>
-1.172000 0.535000 0.547000 -1.172000 0.840000 0.547000 -1.172000 0.840000 0.520000 -1.172000 0.535000 0.520000 -1.172000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-35"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-35"
>
<gml:posList
srsDimension=
"3"
>
-1.172000 0.840000 0.547000 -0.912000 0.840000 0.547000 -0.912000 0.840000 0.520000 -1.172000 0.840000 0.520000 -1.172000 0.840000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-36"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-36"
>
<gml:posList
srsDimension=
"3"
>
-0.912000 0.840000 0.547000 -0.912000 0.535000 0.547000 -0.912000 0.535000 0.520000 -0.912000 0.840000 0.520000 -0.912000 0.840000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-37"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-37"
>
<gml:posList
srsDimension=
"3"
>
-0.912000 0.535000 0.547000 -1.172000 0.535000 0.547000 -1.172000 0.535000 0.520000 -0.912000 0.535000 0.520000 -0.912000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-38"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-38"
>
<gml:posList
srsDimension=
"3"
>
-0.552000 0.860000 0.504000 -0.552000 0.535000 0.504000 -0.552000 0.535000 0.547000 -0.552000 0.860000 0.547000 -0.552000 0.860000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-39"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-39"
>
<gml:posList
srsDimension=
"3"
>
-0.828000 0.840000 0.547000 -0.568000 0.840000 0.547000 -0.568000 0.840000 0.520000 -0.828000 0.840000 0.520000 -0.828000 0.840000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-40"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-40"
>
<gml:posList
srsDimension=
"3"
>
-0.828000 0.535000 0.520000 -0.828000 0.840000 0.520000 -0.568000 0.840000 0.520000 -0.568000 0.535000 0.520000 -0.828000 0.535000 0.520000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-41"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-41"
>
<gml:posList
srsDimension=
"3"
>
-0.828000 0.535000 0.547000 -0.828000 0.840000 0.547000 -0.828000 0.840000 0.520000 -0.828000 0.535000 0.520000 -0.828000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-42"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-42"
>
<gml:posList
srsDimension=
"3"
>
-0.568000 0.535000 0.547000 -0.828000 0.535000 0.547000 -0.828000 0.535000 0.520000 -0.568000 0.535000 0.520000 -0.568000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-43"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-43"
>
<gml:posList
srsDimension=
"3"
>
-0.568000 0.840000 0.547000 -0.568000 0.535000 0.547000 -0.568000 0.535000 0.520000 -0.568000 0.840000 0.520000 -0.568000 0.840000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-44"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-44"
>
<gml:posList
srsDimension=
"3"
>
-0.828000 0.840000 0.547000 -0.828000 0.535000 0.547000 -0.568000 0.535000 0.547000 -0.568000 0.840000 0.547000 -0.828000 0.840000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-45"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-45"
>
<gml:posList
srsDimension=
"3"
>
-0.481000 0.840000 0.547000 -0.481000 0.535000 0.547000 -0.221000 0.535000 0.547000 -0.221000 0.840000 0.547000 -0.481000 0.840000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-46"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-46"
>
<gml:posList
srsDimension=
"3"
>
-0.221000 0.840000 0.547000 -0.221000 0.535000 0.547000 -0.221000 0.535000 0.520000 -0.221000 0.840000 0.520000 -0.221000 0.840000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-47"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-47"
>
<gml:posList
srsDimension=
"3"
>
-0.481000 0.535000 0.520000 -0.481000 0.840000 0.520000 -0.221000 0.840000 0.520000 -0.221000 0.535000 0.520000 -0.481000 0.535000 0.520000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-48"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-48"
>
<gml:posList
srsDimension=
"3"
>
-0.221000 0.535000 0.547000 -0.481000 0.535000 0.547000 -0.481000 0.535000 0.520000 -0.221000 0.535000 0.520000 -0.221000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-49"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-49"
>
<gml:posList
srsDimension=
"3"
>
-0.481000 0.840000 0.547000 -0.221000 0.840000 0.547000 -0.221000 0.840000 0.520000 -0.481000 0.840000 0.520000 -0.481000 0.840000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-50"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-50"
>
<gml:posList
srsDimension=
"3"
>
-0.481000 0.535000 0.547000 -0.481000 0.840000 0.547000 -0.481000 0.840000 0.520000 -0.481000 0.535000 0.520000 -0.481000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-51"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-51"
>
<gml:posList
srsDimension=
"3"
>
-0.149000 0.535000 0.504000 -0.149000 0.860000 0.504000 -0.149000 0.860000 0.547000 -0.149000 0.535000 0.547000 -0.149000 0.535000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-52"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-52"
>
<gml:posList
srsDimension=
"3"
>
-0.502000 0.860000 0.547000 -0.502000 0.860000 0.504000 -0.552000 0.860000 0.504000 -0.552000 0.860000 0.547000 -0.502000 0.860000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-53"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-53"
>
<gml:posList
srsDimension=
"3"
>
-0.842000 0.860000 0.547000 -0.842000 0.860000 0.504000 -0.892000 0.860000 0.504000 -0.892000 0.860000 0.547000 -0.842000 0.860000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-54"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-54"
>
<gml:posList
srsDimension=
"3"
>
-0.149000 0.860000 0.504000 -0.199000 0.860000 0.504000 -0.199000 0.860000 0.547000 -0.149000 0.860000 0.547000 -0.149000 0.860000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-55"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-55"
>
<gml:posList
srsDimension=
"3"
>
-1.192000 0.860000 0.504000 -1.242000 0.860000 0.504000 -1.242000 0.860000 0.547000 -1.192000 0.860000 0.547000 -1.192000 0.860000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-56"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-56"
>
<gml:posList
srsDimension=
"3"
>
-1.242000 0.860000 0.504000 -1.192000 0.860000 0.504000 -0.892000 0.860000 0.504000 -0.842000 0.860000 0.504000 -0.552000 0.860000 0.504000 -0.502000 0.860000 0.504000 -0.199000 0.860000 0.504000 -0.149000 0.860000 0.504000 -0.049000 0.860000 0.504000 -0.049000 0.860000 0.300000 -1.342000 0.860000 0.300000 -1.342000 0.860000 0.504000 -1.242000 0.860000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-57"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-57"
>
<gml:posList
srsDimension=
"3"
>
-0.842000 0.860000 0.547000 -0.842000 0.860000 0.504000 -0.552000 0.860000 0.504000 -0.552000 0.860000 0.547000 -0.842000 0.860000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-58"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-58"
>
<gml:posList
srsDimension=
"3"
>
-1.192000 0.860000 0.547000 -1.192000 0.860000 0.504000 -0.892000 0.860000 0.504000 -0.892000 0.860000 0.547000 -1.192000 0.860000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-59"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-59"
>
<gml:posList
srsDimension=
"3"
>
-0.502000 0.860000 0.547000 -0.502000 0.860000 0.504000 -0.199000 0.860000 0.504000 -0.199000 0.860000 0.547000 -0.502000 0.860000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-60"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-60"
>
<gml:posList
srsDimension=
"3"
>
-0.149000 0.860000 0.547000 -0.149000 0.860000 0.504000 -0.049000 0.860000 0.504000 -0.049000 0.860000 0.547000 -0.149000 0.860000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-61"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-61"
>
<gml:posList
srsDimension=
"3"
>
-0.049000 0.860000 2.100000 -0.049000 0.860000 0.547000 -0.149000 0.860000 0.547000 -0.199000 0.860000 0.547000 -0.502000 0.860000 0.547000 -0.552000 0.860000 0.547000 -0.842000 0.860000 0.547000 -0.892000 0.860000 0.547000 -1.192000 0.860000 0.547000 -1.242000 0.860000 0.547000 -1.342000 0.860000 0.547000 -1.342000 0.860000 2.100000 -0.049000 0.860000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-61_1"
>
<gml:posList
srsDimension=
"3"
>
-0.147000 0.860000 1.182000 -1.238000 0.860000 1.182000 -1.238000 0.860000 1.132000 -0.147000 0.860000 1.132000 -0.147000 0.860000 1.182000
</gml:posList>
</gml:LinearRing>
</gml:interior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-61_2"
>
<gml:posList
srsDimension=
"3"
>
-1.238000 0.860000 1.282000 -1.238000 0.860000 1.232000 -0.147000 0.860000 1.232000 -0.147000 0.860000 1.282000 -1.238000 0.860000 1.282000
</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-62"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-62"
>
<gml:posList
srsDimension=
"3"
>
2.832000 0.759000 2.100000 2.734000 0.759000 2.100000 2.734000 0.759000 0.000000 2.832000 0.759000 0.000000 2.832000 0.759000 0.220000 2.832000 0.759000 0.300000 2.832000 0.759000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-63"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-63"
>
<gml:posList
srsDimension=
"3"
>
2.764000 0.789000 2.260000 2.832000 0.859000 2.190000 1.343000 0.859000 2.190000 1.343000 0.789000 2.260000 2.764000 0.789000 2.260000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-64"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-64"
>
<gml:posList
srsDimension=
"3"
>
2.832000 -0.391000 1.182000 2.832000 -0.391000 1.132000 2.832000 0.659000 1.132000 2.832000 0.659000 1.182000 2.832000 -0.391000 1.182000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-65"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-65"
>
<gml:posList
srsDimension=
"3"
>
2.832000 0.859000 2.190000 2.764000 0.789000 2.260000 2.763000 -0.821000 2.260000 2.832000 -0.891000 2.190000 2.832000 0.859000 2.190000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-66"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-66"
>
<gml:posList
srsDimension=
"3"
>
1.343000 -0.891000 2.190000 2.832000 -0.891000 2.190000 2.763000 -0.821000 2.260000 1.343000 -0.821000 2.260000 1.343000 -0.891000 2.190000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-67"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-67"
>
<gml:posList
srsDimension=
"3"
>
1.539000 0.859000 1.232000 1.539000 0.859000 1.282000 2.630000 0.859000 1.282000 2.630000 0.859000 1.232000 1.539000 0.859000 1.232000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-68"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-68"
>
<gml:posList
srsDimension=
"3"
>
2.734000 -0.591000 2.100000 2.734000 -0.591000 0.000000 2.832000 -0.591000 0.000000 2.832000 -0.591000 2.100000 2.734000 -0.591000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-69"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-69"
>
<gml:posList
srsDimension=
"3"
>
2.832000 -0.491000 0.300000 2.832000 -0.491000 0.220000 2.832000 0.759000 0.220000 2.832000 0.759000 0.300000 2.832000 -0.491000 0.300000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-70"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-70"
>
<gml:posList
srsDimension=
"3"
>
2.734000 -0.591000 2.100000 2.734000 -0.491000 2.100000 2.734000 -0.491000 0.000000 2.734000 -0.591000 0.000000 2.734000 -0.591000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-71"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-71"
>
<gml:posList
srsDimension=
"3"
>
2.734000 0.859000 0.300000 2.734000 0.859000 0.220000 1.441000 0.859000 0.220000 1.441000 0.859000 0.300000 2.734000 0.859000 0.300000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-72"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-72"
>
<gml:posList
srsDimension=
"3"
>
1.441000 0.859000 2.100000 2.734000 0.859000 2.100000 2.734000 0.859000 0.300000 1.441000 0.859000 0.300000 1.441000 0.859000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-72_1"
>
<gml:posList
srsDimension=
"3"
>
2.630000 0.859000 1.182000 1.539000 0.859000 1.182000 1.539000 0.859000 1.132000 2.630000 0.859000 1.132000 2.630000 0.859000 1.182000
</gml:posList>
</gml:LinearRing>
</gml:interior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-72_2"
>
<gml:posList
srsDimension=
"3"
>
2.630000 0.859000 1.232000 2.630000 0.859000 1.282000 1.539000 0.859000 1.282000 1.539000 0.859000 1.232000 2.630000 0.859000 1.232000
</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-73"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-73"
>
<gml:posList
srsDimension=
"3"
>
2.832000 0.659000 1.232000 2.832000 0.659000 1.282000 2.832000 -0.391000 1.282000 2.832000 -0.391000 1.232000 2.832000 0.659000 1.232000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-74"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-74"
>
<gml:posList
srsDimension=
"3"
>
2.630000 0.859000 1.182000 2.630000 0.859000 1.132000 1.539000 0.859000 1.132000 1.539000 0.859000 1.182000 2.630000 0.859000 1.182000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-75"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-75"
>
<gml:posList
srsDimension=
"3"
>
2.734000 0.759000 2.100000 2.734000 0.859000 2.100000 2.734000 0.859000 0.300000 2.734000 0.859000 0.220000 2.734000 0.859000 0.000000 2.734000 0.759000 0.000000 2.734000 0.759000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-76"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-76"
>
<gml:posList
srsDimension=
"3"
>
2.832000 -0.491000 2.100000 2.832000 -0.491000 0.300000 2.832000 0.759000 0.300000 2.832000 0.759000 2.100000 2.832000 -0.491000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-76_1"
>
<gml:posList
srsDimension=
"3"
>
2.832000 -0.391000 1.132000 2.832000 -0.391000 1.182000 2.832000 0.659000 1.182000 2.832000 0.659000 1.132000 2.832000 -0.391000 1.132000
</gml:posList>
</gml:LinearRing>
</gml:interior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-76_2"
>
<gml:posList
srsDimension=
"3"
>
2.832000 0.659000 1.232000 2.832000 -0.391000 1.232000 2.832000 -0.391000 1.282000 2.832000 0.659000 1.282000 2.832000 0.659000 1.232000
</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-77"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-77"
>
<gml:posList
srsDimension=
"3"
>
2.832000 -0.891000 2.100000 2.832000 -0.891000 2.190000 1.343000 -0.891000 2.190000 1.343000 -0.891000 2.100000 2.832000 -0.891000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-78"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-78"
>
<gml:posList
srsDimension=
"3"
>
2.832000 0.859000 0.000000 2.832000 0.859000 2.190000 2.832000 -0.891000 2.190000 2.832000 -0.891000 2.100000 2.832000 -0.591000 2.100000 2.832000 -0.591000 0.000000 2.832000 -0.491000 0.000000 2.832000 -0.491000 0.220000 2.832000 -0.491000 0.300000 2.832000 -0.491000 2.100000 2.832000 0.759000 2.100000 2.832000 0.759000 0.300000 2.832000 0.759000 0.220000 2.832000 0.759000 0.000000 2.832000 0.859000 0.000000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-79"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-79"
>
<gml:posList
srsDimension=
"3"
>
2.734000 0.859000 2.100000 1.441000 0.859000 2.100000 1.441000 0.859000 0.300000 1.441000 0.859000 0.220000 1.441000 0.859000 0.000000 1.343000 0.859000 0.000000 1.343000 0.859000 2.190000 2.832000 0.859000 2.190000 2.832000 0.859000 0.000000 2.734000 0.859000 0.000000 2.734000 0.859000 0.220000 2.734000 0.859000 0.300000 2.734000 0.859000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-80"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-80"
>
<gml:posList
srsDimension=
"3"
>
2.734000 -0.491000 2.100000 2.832000 -0.491000 2.100000 2.832000 -0.491000 0.300000 2.832000 -0.491000 0.220000 2.832000 -0.491000 0.000000 2.734000 -0.491000 0.000000 2.734000 -0.491000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-81"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-81"
>
<gml:posList
srsDimension=
"3"
>
2.764000 0.789000 2.260000 1.343000 0.789000 2.260000 1.343000 -0.821000 2.260000 2.763000 -0.821000 2.260000 2.764000 0.789000 2.260000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-82"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-82"
>
<gml:posList
srsDimension=
"3"
>
1.441000 0.759000 2.100000 1.343000 0.759000 2.100000 1.343000 0.759000 0.000000 1.441000 0.759000 0.000000 1.441000 0.759000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-83"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-83"
>
<gml:posList
srsDimension=
"3"
>
1.343000 0.759000 0.000000 1.343000 0.759000 2.100000 1.343000 -0.891000 2.100000 1.343000 -0.891000 2.190000 1.343000 -0.821000 2.260000 1.343000 0.789000 2.260000 1.343000 0.859000 2.190000 1.343000 0.859000 0.000000 1.343000 0.759000 0.000000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-84"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-84"
>
<gml:posList
srsDimension=
"3"
>
1.441000 0.859000 2.100000 1.441000 0.759000 2.100000 1.441000 0.759000 0.000000 1.441000 0.859000 0.000000 1.441000 0.859000 0.220000 1.441000 0.859000 0.300000 1.441000 0.859000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-85"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-85"
>
<gml:posList
srsDimension=
"3"
>
2.832000 -0.591000 2.100000 2.832000 -0.891000 2.100000 1.343000 -0.891000 2.100000 1.343000 0.759000 2.100000 1.441000 0.759000 2.100000 1.441000 0.859000 2.100000 2.734000 0.859000 2.100000 2.734000 0.759000 2.100000 2.832000 0.759000 2.100000 2.832000 -0.491000 2.100000 2.734000 -0.491000 2.100000 2.734000 -0.591000 2.100000 2.832000 -0.591000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-86"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-86"
>
<gml:posList
srsDimension=
"3"
>
-1.441000 -0.890000 2.100000 -1.441000 -0.890000 2.190000 -2.832000 -0.890000 2.190000 -2.832000 -0.890000 2.100000 -1.441000 -0.890000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-87"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-87"
>
<gml:posList
srsDimension=
"3"
>
-2.832000 -0.490000 0.300000 -2.832000 -0.490000 2.100000 -2.832000 0.760000 2.100000 -2.832000 0.760000 0.300000 -2.832000 -0.490000 0.300000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-87_1"
>
<gml:posList
srsDimension=
"3"
>
-2.832000 0.660000 1.132000 -2.832000 0.660000 1.182000 -2.832000 -0.390000 1.182000 -2.832000 -0.390000 1.132000 -2.832000 0.660000 1.132000
</gml:posList>
</gml:LinearRing>
</gml:interior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-87_2"
>
<gml:posList
srsDimension=
"3"
>
-2.832000 -0.390000 1.232000 -2.832000 0.660000 1.232000 -2.832000 0.660000 1.282000 -2.832000 -0.390000 1.282000 -2.832000 -0.390000 1.232000
</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-88"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-88"
>
<gml:posList
srsDimension=
"3"
>
-2.763000 0.790000 2.260000 -2.764000 -0.820000 2.260000 -1.441000 -0.820000 2.260000 -1.441000 0.790000 2.260000 -2.763000 0.790000 2.260000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-89"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-89"
>
<gml:posList
srsDimension=
"3"
>
-2.832000 0.860000 2.190000 -1.441000 0.860000 2.190000 -1.441000 0.860000 2.100000 -2.734000 0.860000 2.100000 -2.734000 0.860000 0.300000 -2.734000 0.860000 0.220000 -2.734000 0.860000 0.000000 -2.832000 0.860000 0.000000 -2.832000 0.860000 2.190000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-90"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-90"
>
<gml:posList
srsDimension=
"3"
>
-2.832000 0.760000 2.100000 -2.734000 0.760000 2.100000 -2.734000 0.860000 2.100000 -1.441000 0.860000 2.100000 -1.441000 -0.890000 2.100000 -2.832000 -0.890000 2.100000 -2.832000 -0.590000 2.100000 -2.734000 -0.590000 2.100000 -2.734000 -0.490000 2.100000 -2.832000 -0.490000 2.100000 -2.832000 0.760000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-91"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-91"
>
<gml:posList
srsDimension=
"3"
>
-2.832000 0.760000 0.300000 -2.832000 0.760000 2.100000 -2.832000 -0.490000 2.100000 -2.832000 -0.490000 0.300000 -2.832000 -0.490000 0.220000 -2.832000 -0.490000 0.000000 -2.832000 -0.590000 0.000000 -2.832000 -0.590000 2.100000 -2.832000 -0.890000 2.100000 -2.832000 -0.890000 2.190000 -2.832000 0.860000 2.190000 -2.832000 0.860000 0.000000 -2.832000 0.760000 0.000000 -2.832000 0.760000 0.220000 -2.832000 0.760000 0.300000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-92"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-92"
>
<gml:posList
srsDimension=
"3"
>
-2.832000 -0.490000 2.100000 -2.734000 -0.490000 2.100000 -2.734000 -0.490000 0.000000 -2.832000 -0.490000 0.000000 -2.832000 -0.490000 0.220000 -2.832000 -0.490000 0.300000 -2.832000 -0.490000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-93"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-93"
>
<gml:posList
srsDimension=
"3"
>
-2.734000 -0.590000 2.100000 -2.832000 -0.590000 2.100000 -2.832000 -0.590000 0.000000 -2.734000 -0.590000 0.000000 -2.734000 -0.590000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-94"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-94"
>
<gml:posList
srsDimension=
"3"
>
-2.763000 0.790000 2.260000 -2.832000 0.860000 2.190000 -2.832000 -0.890000 2.190000 -2.764000 -0.820000 2.260000 -2.763000 0.790000 2.260000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-95"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-95"
>
<gml:posList
srsDimension=
"3"
>
-2.734000 -0.490000 2.100000 -2.734000 -0.590000 2.100000 -2.734000 -0.590000 0.000000 -2.734000 -0.490000 0.000000 -2.734000 -0.490000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-96"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-96"
>
<gml:posList
srsDimension=
"3"
>
-1.441000 -0.890000 2.190000 -1.441000 -0.820000 2.260000 -2.764000 -0.820000 2.260000 -2.832000 -0.890000 2.190000 -1.441000 -0.890000 2.190000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-97"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-97"
>
<gml:posList
srsDimension=
"3"
>
-2.734000 0.760000 2.100000 -2.832000 0.760000 2.100000 -2.832000 0.760000 0.300000 -2.832000 0.760000 0.220000 -2.832000 0.760000 0.000000 -2.734000 0.760000 0.000000 -2.734000 0.760000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-98"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-98"
>
<gml:posList
srsDimension=
"3"
>
-1.441000 0.790000 2.260000 -1.441000 0.860000 2.190000 -2.832000 0.860000 2.190000 -2.763000 0.790000 2.260000 -1.441000 0.790000 2.260000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-99"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-99"
>
<gml:posList
srsDimension=
"3"
>
-2.734000 0.860000 2.100000 -2.734000 0.760000 2.100000 -2.734000 0.760000 0.000000 -2.734000 0.860000 0.000000 -2.734000 0.860000 0.220000 -2.734000 0.860000 0.300000 -2.734000 0.860000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-100"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-100"
>
<gml:posList
srsDimension=
"3"
>
-2.832000 -0.490000 0.220000 -2.832000 -0.490000 0.300000 -2.832000 0.760000 0.300000 -2.832000 0.760000 0.220000 -2.832000 -0.490000 0.220000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-101"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-101"
>
<gml:posList
srsDimension=
"3"
>
-2.734000 0.860000 0.220000 -2.734000 0.860000 0.300000 -1.441000 0.860000 0.300000 -1.441000 0.860000 0.220000 -2.734000 0.860000 0.220000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-102"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-102"
>
<gml:posList
srsDimension=
"3"
>
-2.832000 0.660000 1.282000 -2.832000 0.660000 1.232000 -2.832000 -0.390000 1.232000 -2.832000 -0.390000 1.282000 -2.832000 0.660000 1.282000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-103"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-103"
>
<gml:posList
srsDimension=
"3"
>
-2.832000 -0.390000 1.132000 -2.832000 -0.390000 1.182000 -2.832000 0.660000 1.182000 -2.832000 0.660000 1.132000 -2.832000 -0.390000 1.132000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-104"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-104"
>
<gml:posList
srsDimension=
"3"
>
-2.629000 0.860000 1.132000 -2.629000 0.860000 1.182000 -1.539000 0.860000 1.182000 -1.539000 0.860000 1.132000 -2.629000 0.860000 1.132000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-105"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-105"
>
<gml:posList
srsDimension=
"3"
>
-1.539000 0.860000 1.282000 -1.539000 0.860000 1.232000 -2.629000 0.860000 1.232000 -2.629000 0.860000 1.282000 -1.539000 0.860000 1.282000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-106"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-106"
>
<gml:posList
srsDimension=
"3"
>
-2.734000 0.860000 2.100000 -1.441000 0.860000 2.100000 -1.441000 0.860000 0.300000 -2.734000 0.860000 0.300000 -2.734000 0.860000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-106_1"
>
<gml:posList
srsDimension=
"3"
>
-1.539000 0.860000 1.182000 -2.629000 0.860000 1.182000 -2.629000 0.860000 1.132000 -1.539000 0.860000 1.132000 -1.539000 0.860000 1.182000
</gml:posList>
</gml:LinearRing>
</gml:interior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-106_2"
>
<gml:posList
srsDimension=
"3"
>
-2.629000 0.860000 1.282000 -2.629000 0.860000 1.232000 -1.539000 0.860000 1.232000 -1.539000 0.860000 1.282000 -2.629000 0.860000 1.282000
</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-107"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-107"
>
<gml:posList
srsDimension=
"3"
>
1.245000 0.859000 1.282000 1.245000 0.859000 1.232000 0.154000 0.860000 1.232000 0.154000 0.860000 1.282000 1.245000 0.859000 1.282000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-108"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-108"
>
<gml:posList
srsDimension=
"3"
>
-0.049000 0.760000 0.000000 -0.049000 0.760000 2.100000 -0.049000 -0.890000 2.100000 -0.049000 -0.890000 2.190000 -0.049000 -0.820000 2.260000 -0.049000 0.790000 2.260000 -0.049000 0.860000 2.190000 -0.049000 0.860000 0.000000 -0.049000 0.760000 0.000000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-109"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-109"
>
<gml:posList
srsDimension=
"3"
>
1.343000 -0.891000 2.100000 1.343000 -0.891000 2.190000 -0.049000 -0.890000 2.190000 -0.049000 -0.890000 2.100000 1.343000 -0.891000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-110"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-110"
>
<gml:posList
srsDimension=
"3"
>
-0.049000 -0.820000 2.260000 -0.049000 -0.890000 2.190000 1.343000 -0.891000 2.190000 1.343000 -0.821000 2.260000 -0.049000 -0.820000 2.260000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-111"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-111"
>
<gml:posList
srsDimension=
"3"
>
-0.049000 0.860000 2.190000 -0.049000 0.790000 2.260000 1.343000 0.789000 2.260000 1.343000 0.859000 2.190000 -0.049000 0.860000 2.190000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-112"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-112"
>
<gml:posList
srsDimension=
"3"
>
0.154000 0.860000 1.132000 0.154000 0.860000 1.182000 1.245000 0.859000 1.182000 1.245000 0.859000 1.132000 0.154000 0.860000 1.132000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-113"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-113"
>
<gml:posList
srsDimension=
"3"
>
1.343000 0.789000 2.260000 -0.049000 0.790000 2.260000 -0.049000 -0.820000 2.260000 1.343000 -0.821000 2.260000 1.343000 0.789000 2.260000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-114"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-114"
>
<gml:posList
srsDimension=
"3"
>
0.049000 0.760000 2.100000 -0.049000 0.760000 2.100000 -0.049000 0.760000 0.000000 0.049000 0.760000 0.000000 0.049000 0.760000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-115"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-115"
>
<gml:posList
srsDimension=
"3"
>
-0.049000 -0.890000 2.100000 -0.049000 0.760000 2.100000 0.049000 0.760000 2.100000 0.049000 0.860000 2.100000 1.343000 0.859000 2.100000 1.343000 -0.891000 2.100000 -0.049000 -0.890000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-116"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-116"
>
<gml:posList
srsDimension=
"3"
>
-0.049000 0.860000 2.190000 1.343000 0.859000 2.190000 1.343000 0.859000 2.100000 0.049000 0.860000 2.100000 0.049000 0.860000 0.547000 0.049000 0.860000 0.504000 0.049000 0.860000 0.300000 0.049000 0.860000 0.220000 0.049000 0.860000 0.000000 -0.049000 0.860000 0.000000 -0.049000 0.860000 2.190000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-117"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-117"
>
<gml:posList
srsDimension=
"3"
>
0.049000 0.860000 0.220000 0.049000 0.860000 0.300000 1.343000 0.859000 0.300000 1.343000 0.859000 0.220000 0.049000 0.860000 0.220000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-118"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-118"
>
<gml:posList
srsDimension=
"3"
>
0.049000 0.860000 2.100000 0.049000 0.760000 2.100000 0.049000 0.760000 0.000000 0.049000 0.860000 0.000000 0.049000 0.860000 0.220000 0.049000 0.860000 0.300000 0.049000 0.860000 0.504000 0.049000 0.860000 0.547000 0.049000 0.860000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-119"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-119"
>
<gml:posList
srsDimension=
"3"
>
0.049000 0.860000 0.547000 0.049000 0.860000 0.504000 0.149000 0.860000 0.504000 0.149000 0.860000 0.547000 0.049000 0.860000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-120"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-120"
>
<gml:posList
srsDimension=
"3"
>
0.149000 0.860000 0.504000 0.149000 0.535000 0.504000 0.149000 0.535000 0.547000 0.149000 0.860000 0.547000 0.149000 0.860000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-121"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-121"
>
<gml:posList
srsDimension=
"3"
>
0.199000 0.535000 0.504000 0.199000 0.860000 0.504000 0.199000 0.860000 0.547000 0.199000 0.535000 0.547000 0.199000 0.535000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-122"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-122"
>
<gml:posList
srsDimension=
"3"
>
0.149000 0.535000 0.547000 0.149000 0.535000 0.504000 0.199000 0.535000 0.504000 0.199000 0.535000 0.547000 0.149000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-123"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-123"
>
<gml:posList
srsDimension=
"3"
>
0.149000 0.860000 0.547000 0.149000 0.535000 0.547000 0.199000 0.535000 0.547000 0.199000 0.860000 0.547000 0.149000 0.860000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-124"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-124"
>
<gml:posList
srsDimension=
"3"
>
1.193000 0.859000 0.504000 1.192000 0.534000 0.504000 1.192000 0.534000 0.547000 1.193000 0.859000 0.547000 1.193000 0.859000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-125"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-125"
>
<gml:posList
srsDimension=
"3"
>
1.242000 0.534000 0.504000 1.242000 0.534000 0.547000 1.192000 0.534000 0.547000 1.192000 0.534000 0.504000 1.242000 0.534000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-126"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-126"
>
<gml:posList
srsDimension=
"3"
>
1.242000 0.534000 0.547000 1.243000 0.859000 0.547000 1.193000 0.859000 0.547000 1.192000 0.534000 0.547000 1.242000 0.534000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-127"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-127"
>
<gml:posList
srsDimension=
"3"
>
0.499000 0.859000 0.547000 0.499000 0.535000 0.547000 0.549000 0.535000 0.547000 0.549000 0.859000 0.547000 0.499000 0.859000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-128"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-128"
>
<gml:posList
srsDimension=
"3"
>
0.499000 0.535000 0.547000 0.499000 0.535000 0.504000 0.549000 0.535000 0.504000 0.549000 0.535000 0.547000 0.499000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-129"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-129"
>
<gml:posList
srsDimension=
"3"
>
0.549000 0.535000 0.504000 0.549000 0.859000 0.504000 0.549000 0.859000 0.547000 0.549000 0.535000 0.547000 0.549000 0.535000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-130"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-130"
>
<gml:posList
srsDimension=
"3"
>
0.499000 0.859000 0.504000 0.499000 0.535000 0.504000 0.499000 0.535000 0.547000 0.499000 0.859000 0.547000 0.499000 0.859000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-131"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-131"
>
<gml:posList
srsDimension=
"3"
>
0.839000 0.535000 0.547000 0.839000 0.535000 0.504000 0.889000 0.535000 0.504000 0.889000 0.535000 0.547000 0.839000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-132"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-132"
>
<gml:posList
srsDimension=
"3"
>
0.889000 0.535000 0.504000 0.889000 0.859000 0.504000 0.889000 0.859000 0.547000 0.889000 0.535000 0.547000 0.889000 0.535000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-133"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-133"
>
<gml:posList
srsDimension=
"3"
>
0.839000 0.859000 0.547000 0.839000 0.535000 0.547000 0.889000 0.535000 0.547000 0.889000 0.859000 0.547000 0.839000 0.859000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-134"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-134"
>
<gml:posList
srsDimension=
"3"
>
0.219000 0.840000 0.547000 0.219000 0.535000 0.547000 0.479000 0.535000 0.547000 0.479000 0.839000 0.547000 0.219000 0.840000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-135"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-135"
>
<gml:posList
srsDimension=
"3"
>
0.219000 0.535000 0.520000 0.219000 0.840000 0.520000 0.479000 0.839000 0.520000 0.479000 0.535000 0.520000 0.219000 0.535000 0.520000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-136"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-136"
>
<gml:posList
srsDimension=
"3"
>
0.219000 0.535000 0.547000 0.219000 0.840000 0.547000 0.219000 0.840000 0.520000 0.219000 0.535000 0.520000 0.219000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-137"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-137"
>
<gml:posList
srsDimension=
"3"
>
0.219000 0.840000 0.547000 0.479000 0.839000 0.547000 0.479000 0.839000 0.520000 0.219000 0.840000 0.520000 0.219000 0.840000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-138"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-138"
>
<gml:posList
srsDimension=
"3"
>
0.479000 0.839000 0.547000 0.479000 0.535000 0.547000 0.479000 0.535000 0.520000 0.479000 0.839000 0.520000 0.479000 0.839000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-139"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-139"
>
<gml:posList
srsDimension=
"3"
>
0.479000 0.535000 0.547000 0.219000 0.535000 0.547000 0.219000 0.535000 0.520000 0.479000 0.535000 0.520000 0.479000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-140"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-140"
>
<gml:posList
srsDimension=
"3"
>
0.839000 0.859000 0.504000 0.839000 0.535000 0.504000 0.839000 0.535000 0.547000 0.839000 0.859000 0.547000 0.839000 0.859000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-141"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-141"
>
<gml:posList
srsDimension=
"3"
>
0.564000 0.839000 0.547000 0.824000 0.839000 0.547000 0.824000 0.839000 0.520000 0.564000 0.839000 0.520000 0.564000 0.839000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-142"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-142"
>
<gml:posList
srsDimension=
"3"
>
0.564000 0.535000 0.520000 0.564000 0.839000 0.520000 0.824000 0.839000 0.520000 0.824000 0.535000 0.520000 0.564000 0.535000 0.520000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-143"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-143"
>
<gml:posList
srsDimension=
"3"
>
0.564000 0.535000 0.547000 0.564000 0.839000 0.547000 0.564000 0.839000 0.520000 0.564000 0.535000 0.520000 0.564000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-144"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-144"
>
<gml:posList
srsDimension=
"3"
>
0.824000 0.535000 0.547000 0.564000 0.535000 0.547000 0.564000 0.535000 0.520000 0.824000 0.535000 0.520000 0.824000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-145"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-145"
>
<gml:posList
srsDimension=
"3"
>
0.824000 0.839000 0.547000 0.824000 0.535000 0.547000 0.824000 0.535000 0.520000 0.824000 0.839000 0.520000 0.824000 0.839000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-146"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-146"
>
<gml:posList
srsDimension=
"3"
>
0.564000 0.839000 0.547000 0.564000 0.535000 0.547000 0.824000 0.535000 0.547000 0.824000 0.839000 0.547000 0.564000 0.839000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-147"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-147"
>
<gml:posList
srsDimension=
"3"
>
0.911000 0.839000 0.547000 0.910000 0.535000 0.547000 1.170000 0.534000 0.547000 1.171000 0.839000 0.547000 0.911000 0.839000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-148"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-148"
>
<gml:posList
srsDimension=
"3"
>
1.171000 0.839000 0.547000 1.170000 0.534000 0.547000 1.170000 0.534000 0.520000 1.171000 0.839000 0.520000 1.171000 0.839000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-149"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-149"
>
<gml:posList
srsDimension=
"3"
>
0.910000 0.535000 0.520000 0.911000 0.839000 0.520000 1.171000 0.839000 0.520000 1.170000 0.534000 0.520000 0.910000 0.535000 0.520000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-150"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-150"
>
<gml:posList
srsDimension=
"3"
>
1.170000 0.534000 0.547000 0.910000 0.535000 0.547000 0.910000 0.535000 0.520000 1.170000 0.534000 0.520000 1.170000 0.534000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-151"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-151"
>
<gml:posList
srsDimension=
"3"
>
0.911000 0.839000 0.547000 1.171000 0.839000 0.547000 1.171000 0.839000 0.520000 0.911000 0.839000 0.520000 0.911000 0.839000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-152"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-152"
>
<gml:posList
srsDimension=
"3"
>
0.910000 0.535000 0.547000 0.911000 0.839000 0.547000 0.911000 0.839000 0.520000 0.910000 0.535000 0.520000 0.910000 0.535000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-153"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-153"
>
<gml:posList
srsDimension=
"3"
>
1.242000 0.534000 0.504000 1.243000 0.859000 0.504000 1.243000 0.859000 0.547000 1.242000 0.534000 0.547000 1.242000 0.534000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-154"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-154"
>
<gml:posList
srsDimension=
"3"
>
0.889000 0.859000 0.547000 0.889000 0.859000 0.504000 0.839000 0.859000 0.504000 0.839000 0.859000 0.547000 0.889000 0.859000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-155"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-155"
>
<gml:posList
srsDimension=
"3"
>
0.549000 0.859000 0.547000 0.549000 0.859000 0.504000 0.499000 0.859000 0.504000 0.499000 0.859000 0.547000 0.549000 0.859000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-156"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-156"
>
<gml:posList
srsDimension=
"3"
>
1.243000 0.859000 0.504000 1.193000 0.859000 0.504000 1.193000 0.859000 0.547000 1.243000 0.859000 0.547000 1.243000 0.859000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-157"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-157"
>
<gml:posList
srsDimension=
"3"
>
0.199000 0.860000 0.504000 0.149000 0.860000 0.504000 0.149000 0.860000 0.547000 0.199000 0.860000 0.547000 0.199000 0.860000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-158"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-158"
>
<gml:posList
srsDimension=
"3"
>
0.149000 0.860000 0.504000 0.199000 0.860000 0.504000 0.499000 0.859000 0.504000 0.549000 0.859000 0.504000 0.839000 0.859000 0.504000 0.889000 0.859000 0.504000 1.193000 0.859000 0.504000 1.243000 0.859000 0.504000 1.343000 0.859000 0.504000 1.343000 0.859000 0.300000 0.049000 0.860000 0.300000 0.049000 0.860000 0.504000 0.149000 0.860000 0.504000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-159"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-159"
>
<gml:posList
srsDimension=
"3"
>
0.549000 0.859000 0.547000 0.549000 0.859000 0.504000 0.839000 0.859000 0.504000 0.839000 0.859000 0.547000 0.549000 0.859000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-160"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-160"
>
<gml:posList
srsDimension=
"3"
>
0.199000 0.860000 0.547000 0.199000 0.860000 0.504000 0.499000 0.859000 0.504000 0.499000 0.859000 0.547000 0.199000 0.860000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-161"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-161"
>
<gml:posList
srsDimension=
"3"
>
0.889000 0.859000 0.547000 0.889000 0.859000 0.504000 1.193000 0.859000 0.504000 1.193000 0.859000 0.547000 0.889000 0.859000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-162"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-162"
>
<gml:posList
srsDimension=
"3"
>
1.243000 0.859000 0.547000 1.243000 0.859000 0.504000 1.343000 0.859000 0.504000 1.343000 0.859000 0.547000 1.243000 0.859000 0.547000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"PolyIDGeo-163"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"ringID-163"
>
<gml:posList
srsDimension=
"3"
>
1.343000 0.859000 2.100000 1.343000 0.859000 0.547000 1.243000 0.859000 0.547000 1.193000 0.859000 0.547000 0.889000 0.859000 0.547000 0.839000 0.859000 0.547000 0.549000 0.859000 0.547000 0.499000 0.859000 0.547000 0.199000 0.860000 0.547000 0.149000 0.860000 0.547000 0.049000 0.860000 0.547000 0.049000 0.860000 2.100000 1.343000 0.859000 2.100000
</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-163_1"
>
<gml:posList
srsDimension=
"3"
>
1.245000 0.859000 1.182000 0.154000 0.860000 1.182000 0.154000 0.860000 1.132000 1.245000 0.859000 1.132000 1.245000 0.859000 1.182000
</gml:posList>
</gml:LinearRing>
</gml:interior>
<gml:interior>
<gml:LinearRing
gml:id=
"ringID-163_2"
>
<gml:posList
srsDimension=
"3"
>
0.154000 0.860000 1.282000 0.154000 0.860000 1.232000 1.245000 0.859000 1.232000 1.245000 0.859000 1.282000 0.154000 0.860000 1.282000
</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</gen:lod2Geometry>
</gen:GenericCityObject>
</core:cityObjectMember>
</core:CityModel>
CityDoctorParent/CityDoctorModel/src/test/resources/zip/mock_archive.zip
0 → 100644
View file @
2d57794b
File added
CityDoctorParent/CityDoctorModel/src/test/resources/zip/mock_archive/mock1.gml
0 → 100644
View file @
2d57794b
<?xml version="1.0" encoding="utf-8"?>
<core:CityModel
xmlns:core=
"http://www.opengis.net/citygml/2.0"
xmlns:gen=
"http://www.opengis.net/citygml/generics/2.0"
xmlns:bldg=
"http://www.opengis.net/citygml/building/2.0"
xmlns:app=
"http://www.opengis.net/citygml/appearance/2.0"
xmlns:dem=
"http://www.opengis.net/citygml/relief/2.0"
xmlns:gml=
"http://www.opengis.net/gml"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd"
>
<!--
Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
Modelliert mit Begrenzungsflächen (eine Dachfläche, 4 Wandflächen, 1 Grundfläche),
die Gebäudegeometrie als Solid, der auf die Polygone der Begrenzungsflächen referenziert
CityGML 2.0
Gebäudevolumen: 56,25 m3
10.5.2017
Author: V. Coors, HFT Stuttgart
Lizenz:
-->
<core:cityObjectMember>
<bldg:Building
gml:id=
"_Simple_BD.1"
>
<bldg:lod2Solid>
<gml:Solid>
<gml:exterior>
<gml:CompositeSurface>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.1"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.2"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.3"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.4"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.5"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.6"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.7"
/>
</gml:CompositeSurface>
</gml:exterior>
</gml:Solid>
</bldg:lod2Solid>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.2"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.2_LR.1"
>
<gml:posList
srsDimension=
"3"
>
13.0 15.0 0.0
13.0 15.0 3.0
13.0 10.0 3.0
13.0 10.0 0.0
13.0 15.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_2"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.3"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.3_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 15.0 0.0
10.0 15.0 3.0
11.5 15.0 4.5
13.0 15.0 3.0
13.0 15.0 0.0
10.0 15.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_3"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.4"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.4_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 3.0
10.0 15.0 3.0
10.0 15.0 0.0
10.0 10.0 0.0
10.0 10.0 3.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_4"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.5"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.5_LR.1"
>
<gml:posList
srsDimension=
"3"
>
13.0 10.0 0.0
13.0 10.0 3.0
11.5 10.0 4.5
10.0 10.0 3.0
10.0 10.0 0.0
13.0 10.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:RoofSurface
gml:id=
"_Simple_BD.1_RoofSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.6"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.6_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 3.0
11.5 10.0 4.5
11.5 15.0 4.5
10.0 15.0 3.0
10.0 10.0 3.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.7"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.7_LR.1"
>
<gml:posList
srsDimension=
"3"
>
11.5 10.0 4.5
13.0 10.0 3.0
13.0 15.0 3.0
11.5 15.0 4.5
11.5 10.0 4.5
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:RoofSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:GroundSurface
gml:id=
"_Simple_BD.1_GroundSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.1"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.1_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 0.0
10.0 15.0 0.0
13.0 15.0 0.0
13.0 10.0 0.0
10.0 10.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:GroundSurface>
</bldg:boundedBy>
</bldg:Building>
</core:cityObjectMember>
</core:CityModel>
\ No newline at end of file
CityDoctorParent/CityDoctorModel/src/test/resources/zip/mock_archive/mock2.gml
0 → 100644
View file @
2d57794b
<?xml version="1.0" encoding="utf-8"?>
<core:CityModel
xmlns:core=
"http://www.opengis.net/citygml/2.0"
xmlns:gen=
"http://www.opengis.net/citygml/generics/2.0"
xmlns:bldg=
"http://www.opengis.net/citygml/building/2.0"
xmlns:app=
"http://www.opengis.net/citygml/appearance/2.0"
xmlns:dem=
"http://www.opengis.net/citygml/relief/2.0"
xmlns:gml=
"http://www.opengis.net/gml"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd"
>
<!--
Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
Modelliert mit Begrenzungsflächen (eine Dachfläche, 4 Wandflächen, 1 Grundfläche),
die Gebäudegeometrie als Solid, der auf die Polygone der Begrenzungsflächen referenziert
CityGML 2.0
Gebäudevolumen: 56,25 m3
10.5.2017
Author: V. Coors, HFT Stuttgart
Lizenz:
-->
<core:cityObjectMember>
<bldg:Building
gml:id=
"_Simple_BD.1"
>
<bldg:lod2Solid>
<gml:Solid>
<gml:exterior>
<gml:CompositeSurface>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.1"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.2"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.3"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.4"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.5"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.6"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.7"
/>
</gml:CompositeSurface>
</gml:exterior>
</gml:Solid>
</bldg:lod2Solid>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.2"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.2_LR.1"
>
<gml:posList
srsDimension=
"3"
>
13.0 15.0 0.0
13.0 15.0 3.0
13.0 10.0 3.0
13.0 10.0 0.0
13.0 15.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_2"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.3"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.3_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 15.0 0.0
10.0 15.0 3.0
11.5 15.0 4.5
13.0 15.0 3.0
13.0 15.0 0.0
10.0 15.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_3"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.4"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.4_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 3.0
10.0 15.0 3.0
10.0 15.0 0.0
10.0 10.0 0.0
10.0 10.0 3.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_4"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.5"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.5_LR.1"
>
<gml:posList
srsDimension=
"3"
>
13.0 10.0 0.0
13.0 10.0 3.0
11.5 10.0 4.5
10.0 10.0 3.0
10.0 10.0 0.0
13.0 10.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:RoofSurface
gml:id=
"_Simple_BD.1_RoofSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.6"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.6_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 3.0
11.5 10.0 4.5
11.5 15.0 4.5
10.0 15.0 3.0
10.0 10.0 3.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.7"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.7_LR.1"
>
<gml:posList
srsDimension=
"3"
>
11.5 10.0 4.5
13.0 10.0 3.0
13.0 15.0 3.0
11.5 15.0 4.5
11.5 10.0 4.5
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:RoofSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:GroundSurface
gml:id=
"_Simple_BD.1_GroundSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.1"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.1_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 0.0
10.0 15.0 0.0
13.0 15.0 0.0
13.0 10.0 0.0
10.0 10.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:GroundSurface>
</bldg:boundedBy>
</bldg:Building>
</core:cityObjectMember>
</core:CityModel>
\ No newline at end of file
CityDoctorParent/CityDoctorModel/src/test/resources/zip/mock_archive/mock3.gml
0 → 100644
View file @
2d57794b
<?xml version="1.0" encoding="utf-8"?>
<core:CityModel
xmlns:core=
"http://www.opengis.net/citygml/2.0"
xmlns:gen=
"http://www.opengis.net/citygml/generics/2.0"
xmlns:bldg=
"http://www.opengis.net/citygml/building/2.0"
xmlns:app=
"http://www.opengis.net/citygml/appearance/2.0"
xmlns:dem=
"http://www.opengis.net/citygml/relief/2.0"
xmlns:gml=
"http://www.opengis.net/gml"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd"
>
<!--
Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
Modelliert mit Begrenzungsflächen (eine Dachfläche, 4 Wandflächen, 1 Grundfläche),
die Gebäudegeometrie als Solid, der auf die Polygone der Begrenzungsflächen referenziert
CityGML 2.0
Gebäudevolumen: 56,25 m3
10.5.2017
Author: V. Coors, HFT Stuttgart
Lizenz:
-->
<core:cityObjectMember>
<bldg:Building
gml:id=
"_Simple_BD.1"
>
<bldg:lod2Solid>
<gml:Solid>
<gml:exterior>
<gml:CompositeSurface>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.1"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.2"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.3"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.4"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.5"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.6"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.7"
/>
</gml:CompositeSurface>
</gml:exterior>
</gml:Solid>
</bldg:lod2Solid>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.2"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.2_LR.1"
>
<gml:posList
srsDimension=
"3"
>
13.0 15.0 0.0
13.0 15.0 3.0
13.0 10.0 3.0
13.0 10.0 0.0
13.0 15.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_2"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.3"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.3_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 15.0 0.0
10.0 15.0 3.0
11.5 15.0 4.5
13.0 15.0 3.0
13.0 15.0 0.0
10.0 15.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_3"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.4"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.4_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 3.0
10.0 15.0 3.0
10.0 15.0 0.0
10.0 10.0 0.0
10.0 10.0 3.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_4"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.5"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.5_LR.1"
>
<gml:posList
srsDimension=
"3"
>
13.0 10.0 0.0
13.0 10.0 3.0
11.5 10.0 4.5
10.0 10.0 3.0
10.0 10.0 0.0
13.0 10.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:RoofSurface
gml:id=
"_Simple_BD.1_RoofSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.6"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.6_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 3.0
11.5 10.0 4.5
11.5 15.0 4.5
10.0 15.0 3.0
10.0 10.0 3.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.7"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.7_LR.1"
>
<gml:posList
srsDimension=
"3"
>
11.5 10.0 4.5
13.0 10.0 3.0
13.0 15.0 3.0
11.5 15.0 4.5
11.5 10.0 4.5
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:RoofSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:GroundSurface
gml:id=
"_Simple_BD.1_GroundSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.1"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.1_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 0.0
10.0 15.0 0.0
13.0 15.0 0.0
13.0 10.0 0.0
10.0 10.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:GroundSurface>
</bldg:boundedBy>
</bldg:Building>
</core:cityObjectMember>
</core:CityModel>
\ No newline at end of file
CityDoctorParent/CityDoctorModel/src/test/resources/zip/mock_archive/mock4.gml
0 → 100644
View file @
2d57794b
<?xml version="1.0" encoding="utf-8"?>
<core:CityModel
xmlns:core=
"http://www.opengis.net/citygml/2.0"
xmlns:gen=
"http://www.opengis.net/citygml/generics/2.0"
xmlns:bldg=
"http://www.opengis.net/citygml/building/2.0"
xmlns:app=
"http://www.opengis.net/citygml/appearance/2.0"
xmlns:dem=
"http://www.opengis.net/citygml/relief/2.0"
xmlns:gml=
"http://www.opengis.net/gml"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd"
>
<!--
Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
Modelliert mit Begrenzungsflächen (eine Dachfläche, 4 Wandflächen, 1 Grundfläche),
die Gebäudegeometrie als Solid, der auf die Polygone der Begrenzungsflächen referenziert
CityGML 2.0
Gebäudevolumen: 56,25 m3
10.5.2017
Author: V. Coors, HFT Stuttgart
Lizenz:
-->
<core:cityObjectMember>
<bldg:Building
gml:id=
"_Simple_BD.1"
>
<bldg:lod2Solid>
<gml:Solid>
<gml:exterior>
<gml:CompositeSurface>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.1"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.2"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.3"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.4"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.5"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.6"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.7"
/>
</gml:CompositeSurface>
</gml:exterior>
</gml:Solid>
</bldg:lod2Solid>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.2"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.2_LR.1"
>
<gml:posList
srsDimension=
"3"
>
13.0 15.0 0.0
13.0 15.0 3.0
13.0 10.0 3.0
13.0 10.0 0.0
13.0 15.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_2"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.3"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.3_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 15.0 0.0
10.0 15.0 3.0
11.5 15.0 4.5
13.0 15.0 3.0
13.0 15.0 0.0
10.0 15.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_3"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.4"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.4_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 3.0
10.0 15.0 3.0
10.0 15.0 0.0
10.0 10.0 0.0
10.0 10.0 3.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_4"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.5"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.5_LR.1"
>
<gml:posList
srsDimension=
"3"
>
13.0 10.0 0.0
13.0 10.0 3.0
11.5 10.0 4.5
10.0 10.0 3.0
10.0 10.0 0.0
13.0 10.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:RoofSurface
gml:id=
"_Simple_BD.1_RoofSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.6"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.6_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 3.0
11.5 10.0 4.5
11.5 15.0 4.5
10.0 15.0 3.0
10.0 10.0 3.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.7"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.7_LR.1"
>
<gml:posList
srsDimension=
"3"
>
11.5 10.0 4.5
13.0 10.0 3.0
13.0 15.0 3.0
11.5 15.0 4.5
11.5 10.0 4.5
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:RoofSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:GroundSurface
gml:id=
"_Simple_BD.1_GroundSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.1"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.1_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 0.0
10.0 15.0 0.0
13.0 15.0 0.0
13.0 10.0 0.0
10.0 10.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:GroundSurface>
</bldg:boundedBy>
</bldg:Building>
</core:cityObjectMember>
</core:CityModel>
\ No newline at end of file
CityDoctorParent/CityDoctorModel/src/test/resources/zip/mock_archive/mock5.gml
0 → 100644
View file @
2d57794b
<?xml version="1.0" encoding="utf-8"?>
<core:CityModel
xmlns:core=
"http://www.opengis.net/citygml/2.0"
xmlns:gen=
"http://www.opengis.net/citygml/generics/2.0"
xmlns:bldg=
"http://www.opengis.net/citygml/building/2.0"
xmlns:app=
"http://www.opengis.net/citygml/appearance/2.0"
xmlns:dem=
"http://www.opengis.net/citygml/relief/2.0"
xmlns:gml=
"http://www.opengis.net/gml"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd"
>
<!--
Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
Modelliert mit Begrenzungsflächen (eine Dachfläche, 4 Wandflächen, 1 Grundfläche),
die Gebäudegeometrie als Solid, der auf die Polygone der Begrenzungsflächen referenziert
CityGML 2.0
Gebäudevolumen: 56,25 m3
10.5.2017
Author: V. Coors, HFT Stuttgart
Lizenz:
-->
<core:cityObjectMember>
<bldg:Building
gml:id=
"_Simple_BD.1"
>
<bldg:lod2Solid>
<gml:Solid>
<gml:exterior>
<gml:CompositeSurface>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.1"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.2"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.3"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.4"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.5"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.6"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.7"
/>
</gml:CompositeSurface>
</gml:exterior>
</gml:Solid>
</bldg:lod2Solid>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.2"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.2_LR.1"
>
<gml:posList
srsDimension=
"3"
>
13.0 15.0 0.0
13.0 15.0 3.0
13.0 10.0 3.0
13.0 10.0 0.0
13.0 15.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_2"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.3"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.3_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 15.0 0.0
10.0 15.0 3.0
11.5 15.0 4.5
13.0 15.0 3.0
13.0 15.0 0.0
10.0 15.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_3"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.4"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.4_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 3.0
10.0 15.0 3.0
10.0 15.0 0.0
10.0 10.0 0.0
10.0 10.0 3.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_4"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.5"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.5_LR.1"
>
<gml:posList
srsDimension=
"3"
>
13.0 10.0 0.0
13.0 10.0 3.0
11.5 10.0 4.5
10.0 10.0 3.0
10.0 10.0 0.0
13.0 10.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:RoofSurface
gml:id=
"_Simple_BD.1_RoofSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.6"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.6_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 3.0
11.5 10.0 4.5
11.5 15.0 4.5
10.0 15.0 3.0
10.0 10.0 3.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.7"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.7_LR.1"
>
<gml:posList
srsDimension=
"3"
>
11.5 10.0 4.5
13.0 10.0 3.0
13.0 15.0 3.0
11.5 15.0 4.5
11.5 10.0 4.5
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:RoofSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:GroundSurface
gml:id=
"_Simple_BD.1_GroundSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.1"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.1_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 0.0
10.0 15.0 0.0
13.0 15.0 0.0
13.0 10.0 0.0
10.0 10.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:GroundSurface>
</bldg:boundedBy>
</bldg:Building>
</core:cityObjectMember>
</core:CityModel>
\ No newline at end of file
CityDoctorParent/CityDoctorModel/src/test/resources/zip/validate.zip
0 → 100644
View file @
2d57794b
File added
CityDoctorParent/CityDoctorModel/src/test/resources/zip/validate/valCorrect.gml
0 → 100644
View file @
2d57794b
<?xml version="1.0" encoding="utf-8"?>
<core:CityModel
xmlns:core=
"http://www.opengis.net/citygml/2.0"
xmlns:gen=
"http://www.opengis.net/citygml/generics/2.0"
xmlns:bldg=
"http://www.opengis.net/citygml/building/2.0"
xmlns:app=
"http://www.opengis.net/citygml/appearance/2.0"
xmlns:dem=
"http://www.opengis.net/citygml/relief/2.0"
xmlns:gml=
"http://www.opengis.net/gml"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd"
>
<!--
Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
Modelliert mit Begrenzungsflächen (eine Dachfläche, 4 Wandflächen, 1 Grundfläche),
die Gebäudegeometrie als Solid, der auf die Polygone der Begrenzungsflächen referenziert
CityGML 2.0
Gebäudevolumen: 56,25 m3
10.5.2017
Author: V. Coors, HFT Stuttgart
Lizenz:
-->
<core:cityObjectMember>
<bldg:Building
gml:id=
"_Simple_BD.1"
>
<bldg:lod2Solid>
<gml:Solid>
<gml:exterior>
<gml:CompositeSurface>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.1"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.2"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.3"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.4"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.5"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.6"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.7"
/>
</gml:CompositeSurface>
</gml:exterior>
</gml:Solid>
</bldg:lod2Solid>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.2"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.2_LR.1"
>
<gml:posList
srsDimension=
"3"
>
13.0 15.0 0.0
13.0 15.0 3.0
13.0 10.0 3.0
13.0 10.0 0.0
13.0 15.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_2"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.3"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.3_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 15.0 0.0
10.0 15.0 3.0
11.5 15.0 4.5
13.0 15.0 3.0
13.0 15.0 0.0
10.0 15.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_3"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.4"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.4_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 3.0
10.0 15.0 3.0
10.0 15.0 0.0
10.0 10.0 0.0
10.0 10.0 3.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_4"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.5"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.5_LR.1"
>
<gml:posList
srsDimension=
"3"
>
13.0 10.0 0.0
13.0 10.0 3.0
11.5 10.0 4.5
10.0 10.0 3.0
10.0 10.0 0.0
13.0 10.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:RoofSurface
gml:id=
"_Simple_BD.1_RoofSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.6"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.6_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 3.0
11.5 10.0 4.5
11.5 15.0 4.5
10.0 15.0 3.0
10.0 10.0 3.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.7"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.7_LR.1"
>
<gml:posList
srsDimension=
"3"
>
11.5 10.0 4.5
13.0 10.0 3.0
13.0 15.0 3.0
11.5 15.0 4.5
11.5 10.0 4.5
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:RoofSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:GroundSurface
gml:id=
"_Simple_BD.1_GroundSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.1"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.1_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 0.0
10.0 15.0 0.0
13.0 15.0 0.0
13.0 10.0 0.0
10.0 10.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:GroundSurface>
</bldg:boundedBy>
</bldg:Building>
</core:cityObjectMember>
</core:CityModel>
\ No newline at end of file
CityDoctorParent/CityDoctorModel/src/test/resources/zip/validate/valFaulty.gml
0 → 100644
View file @
2d57794b
<?xml version="1.0" encoding="utf-8"?>
<core:CityModel
xmlns:core=
"http://www.opengis.net/citygml/2.0"
xmlns:gen=
"http://www.opengis.net/citygml/generics/2.0"
xmlns:bldg=
"http://www.opengis.net/citygml/building/2.0"
xmlns:app=
"http://www.opengis.net/citygml/appearance/2.0"
xmlns:dem=
"http://www.opengis.net/citygml/relief/2.0"
xmlns:gml=
"http://www.opengis.net/gml"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://www.opengis.net/citygml/building/2.0 http://schemas.opengis.net/citygml/building/2.0/building.xsd http://www.opengis.net/citygml/appearance/2.0 http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd http://www.opengis.net/citygml/relief/2.0 http://schemas.opengis.net/citygml/relief/2.0/relief.xsd http://www.opengis.net/citygml/2.0 http://schemas.opengis.net/citygml/2.0/cityGMLBase.xsd http://www.opengis.net/citygml/generics/2.0 http://schemas.opengis.net/citygml/generics/2.0/generics.xsd"
>
<!--
Einfaches Gebäude mit Grundriss 3m x 5m und Satteldach, Traufhöhe 3m, Firsthöhe 4,5m
Modelliert mit Begrenzungsflächen (eine Dachfläche, 4 Wandflächen, 1 Grundfläche),
die Gebäudegeometrie als Solid, der auf die Polygone der Begrenzungsflächen referenziert
CityGML 2.0
Gebäudevolumen: 56,25 m3
10.5.2017
Author: V. Coors, HFT Stuttgart
Lizenz:
-->
<core:cityObjectMember>
<bldg:Building
gml:id=
"_Simple_BD.1"
>
<bldg:lod2Solid>
<gml:Solid>
<gml:exterior>
<gml:CompositeSurface>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.1"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.2"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.3"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.4"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.5"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.6"
/>
<gml:surfaceMember
xlink:href=
"#_Simple_BD.1_PG.7"
/>
</gml:CompositeSurface>
</gml:exterior>
</gml:Solid>
</bldg:lod2Solid>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.2"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.2_LR.1"
>
<gml:posList
srsDimension=
"3"
>
13.0 15.0 0.0
13.0 15.0 3.0
13.0 10.0 3.0
13.0 10.0 0.0
13.0 15.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_2"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.3"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.3_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 15.0 0.0
10.0 15.0 3.0
11.5 15.0 4.5
13.0 15.0 3.0
13.0 15.0 0.0
10.0 15.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_3"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.4"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.4_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 3.0
10.0 15.0 3.0
10.0 15.0 0.0
10.0 10.0 0.0
10.0 10.0 3.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:WallSurface
gml:id=
"_Simple_BD.1_WallSurface_4"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.5"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.5_LR.1"
>
<gml:posList
srsDimension=
"3"
>
13.0 10.0 0.0
13.0 10.0 3.0
11.5 10.0 4.5
10.0 10.0 3.0
10.0 10.0 0.0
13.0 10.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:WallSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:RoofSurface
gml:id=
"_Simple_BD.1_RoofSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.6"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.6_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 3.0
11.5 10.0 4.5
11.5 15.0 4.5
10.0 15.0 3.0
10.0 10.0 3.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.7"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.7_LR.1"
>
<gml:posList
srsDimension=
"3"
>
11.5 10.0 4.5
13.0 10.0 3.0
13.0 15.0 3.0
11.5 15.0 4.5
11.5 10.0 4.5
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:RoofSurface>
</bldg:boundedBy>
<bldg:boundedBy>
<bldg:GroundSurface
gml:id=
"_Simple_BD.1_GroundSurface_1"
>
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon
gml:id=
"_Simple_BD.1_PG.1"
>
<gml:exterior>
<gml:LinearRing
gml:id=
"_Simple_BD.1_PG.1_LR.1"
>
<gml:posList
srsDimension=
"3"
>
10.0 10.0 0.0
10.0 15.0 0.0
13.0 15.0 0.0
13.0 10.0 0.0
10.0 10.0 0.0
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:GroundSurface>
</bldg:boundedBy>
</bldg:Building>
</core:cityObjectMember>
CityDoctorParent/CityDoctorValidation/pom.xml
View file @
2d57794b
<?xml version="1.0" encoding="utf-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
>
<project
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns=
"http://maven.apache.org/POM/4.0.0"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
de.hft.stuttgart
</groupId>
<artifactId>
CityDoctorParent
</artifactId>
<version>
3.1
6
.0
</version>
<version>
3.1
7
.0
</version>
</parent>
<artifactId>
CityDoctorValidation
</artifactId>
<name>
CityDoctorValidation
</name>
...
...
@@ -65,11 +65,11 @@
<groupId>
net.sf.saxon
</groupId>
<artifactId>
Saxon-HE
</artifactId>
</dependency>
<dependency>
<groupId>
org.yaml
</groupId>
<artifactId>
snakeyaml
</artifactId>
</dependency>
</dependencies>
<dependency>
<groupId>
org.yaml
</groupId>
<artifactId>
snakeyaml
</artifactId>
</dependency>
</dependencies>
<build>
<resources>
<resource>
...
...
CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/CityDoctorValidation.java
View file @
2d57794b
...
...
@@ -21,8 +21,10 @@ package de.hft.stuttgart.citydoctor2;
import
java.io.File
;
import
java.io.FileNotFoundException
;
import
java.io.IOException
;
import
java.nio.file.Path
;
import
java.util.List
;
import
de.hft.stuttgart.citydoctor2.zip.CityGmlZipArchive
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.citygml4j.core.ade.ADEException
;
...
...
@@ -72,7 +74,7 @@ public class CityDoctorValidation {
String
outputFile
=
getOutputFile
(
argParser
,
true
);
ValidationConfiguration
config
=
getValidationConfig
(
argParser
);
startValidationProcess
(
new
File
(
inputFile
)
,
xmlOutput
,
pdfOutput
,
config
,
outputFile
);
startValidationProcess
(
inputFile
,
xmlOutput
,
pdfOutput
,
config
,
outputFile
);
}
private
static
String
getOutputFile
(
ArgumentParser
argParser
,
boolean
optional
)
{
...
...
@@ -144,13 +146,28 @@ public class CityDoctorValidation {
pdfOutputPath
=
pdfOutput
.
getAbsolutePath
();
}
try
{
startValidation
Process
(
inputFile
,
xmlOutputPath
,
pdfOutputPath
,
config
,
null
);
start
File
Validation
(
inputFile
,
xmlOutputPath
,
pdfOutputPath
,
config
,
null
);
}
catch
(
CityDoctorWriteException
e
)
{
// this does not happen as no output file is specified
logger
.
catching
(
e
);
}
}
public
static
void
startValidationProcess
(
String
input
,
String
xmlOutput
,
String
pdfOutput
,
ValidationConfiguration
config
,
String
outputFile
)
throws
CityDoctorWriteException
,
CityGmlParseException
,
IOException
,
InvalidGmlFileException
{
File
inputFile
=
new
File
(
input
);
if
(!
inputFile
.
exists
())
{
logger
.
error
(
"Input file '{}' does not exist."
,
input
);
System
.
exit
(
1
);
}
if
(
inputFile
.
getName
().
endsWith
(
".gml"
))
{
startFileValidation
(
inputFile
,
xmlOutput
,
pdfOutput
,
config
,
outputFile
);
}
else
if
(
inputFile
.
getName
().
endsWith
(
".zip"
))
{
startZipValidation
(
input
,
xmlOutput
,
pdfOutput
,
config
,
outputFile
);
}
}
/**
* This function will handle the complete validation process
*
...
...
@@ -164,7 +181,7 @@ public class CityDoctorValidation {
* @throws CityGMLBuilderException
* @throws ADEException
*/
public
static
void
startValidation
Process
(
File
inputFile
,
String
xmlOutput
,
String
pdfOutput
,
public
static
void
start
File
Validation
(
File
inputFile
,
String
xmlOutput
,
String
pdfOutput
,
ValidationConfiguration
config
,
String
outputFile
)
throws
IOException
,
CityGmlParseException
,
InvalidGmlFileException
,
CityDoctorWriteException
{
...
...
@@ -181,6 +198,29 @@ public class CityDoctorValidation {
}
}
public
static
void
startZipValidation
(
String
inputZipFile
,
String
xmlOutput
,
String
pdfOutput
,
ValidationConfiguration
config
,
String
outputFile
)
throws
CityGmlParseException
,
IOException
{
xmlOutput
=
toDirectoryPath
(
xmlOutput
);
pdfOutput
=
toDirectoryPath
(
pdfOutput
);
outputFile
=
toDirectoryPath
(
outputFile
);
if
(
xmlOutput
==
null
&&
pdfOutput
==
null
&&
outputFile
==
null
)
{
logger
.
warn
(
"No output locations specified, results of validation will not be saved"
);
}
CityGmlZipArchive
archive
=
CityGmlZipArchive
.
register
(
inputZipFile
);
Checker
.
streamCheck
(
archive
,
xmlOutput
,
pdfOutput
,
config
,
outputFile
);
}
public
static
String
toDirectoryPath
(
String
input
)
{
if
(
input
==
null
)
{
return
null
;
}
String
parentDirectory
=
Path
.
of
(
input
).
getParent
().
toString
()
+
File
.
separator
;
String
name
=
Path
.
of
(
input
).
getFileName
().
toString
().
replaceFirst
(
"\\..+"
,
""
)
+
File
.
separator
;
File
f
=
new
File
(
parentDirectory
+
name
);
f
.
mkdir
();
return
f
.
getPath
()
+
File
.
separator
;
}
public
static
String
getPdfOutput
(
ArgumentParser
argParser
)
{
if
(
argParser
.
containsOption
(
"pdfreport"
))
{
List
<
String
>
reportFiles
=
argParser
.
getValues
(
"pdfreport"
);
...
...
CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/CityDoctorValidationCLI.java
0 → 100644
View file @
2d57794b
package
de.hft.stuttgart.citydoctor2
;
import
picocli.CommandLine
;
import
picocli.CommandLine.Command
;
import
picocli.CommandLine.Option
;
import
picocli.CommandLine.Parameters
;
import
java.util.concurrent.Callable
;
@Command
(
name
=
"citydoctor2"
,
mixinStandardHelpOptions
=
true
,
description
=
"Validates CityGML files according to a provided validation-plan."
)
public
class
CityDoctorValidationCLI
implements
Callable
<
Integer
>
{
@Option
(
names
=
{
"-i"
,
"--in"
,
"--input"
},
description
=
"Filepath of the CityGML file."
,
required
=
true
)
private
String
input
;
@Option
(
names
=
{
"-c"
,
"--config"
,
"--configuration"
,
"--plan"
},
description
=
"Filepath of the validation configuration .yml"
,
required
=
true
)
private
String
config
;
@Option
(
names
=
{
"-x"
,
"--xml"
,
"--xmlReport"
},
description
=
"Create a XML validation report at target location"
)
private
String
xmlReport
;
@Option
(
names
=
{
"-p"
,
"--pdf"
,
"--pdfReport"
},
description
=
"Create a PDF validation report at target location"
)
private
String
pdfReport
;
@Option
(
names
=
{
"-o"
,
"--out"
,
"--output"
},
description
=
"Create a validated copy of the CityGML input with QualityADE at target location."
)
private
String
output
;
@Override
public
Integer
call
()
throws
Exception
{
return
0
;
}
}
CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/Checker.java
View file @
2d57794b
/*-
* Copyright 2020 Beuth Hochschule für Technik Berlin, Hochschule für Technik Stuttgart
*
*
* This file is part of CityDoctor2.
*
* CityDoctor2 is free software: you can redistribute it and/or modify
...
...
@@ -18,39 +18,6 @@
*/
package
de.hft.stuttgart.citydoctor2.check
;
import
java.io.BufferedOutputStream
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.FileNotFoundException
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.UncheckedIOException
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.Set
;
import
java.util.stream.Stream
;
import
javax.xml.XMLConstants
;
import
javax.xml.transform.Result
;
import
javax.xml.transform.Source
;
import
javax.xml.transform.Transformer
;
import
javax.xml.transform.TransformerException
;
import
javax.xml.transform.TransformerFactory
;
import
javax.xml.transform.dom.DOMResult
;
import
javax.xml.transform.dom.DOMSource
;
import
javax.xml.transform.sax.SAXResult
;
import
javax.xml.transform.stream.StreamSource
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
de.hft.stuttgart.citydoctor2.check.error.AttributeInvalidError
;
import
de.hft.stuttgart.citydoctor2.check.error.AttributeMissingError
;
import
de.hft.stuttgart.citydoctor2.check.error.AttributeValueWrongError
;
...
...
@@ -75,7 +42,11 @@ import de.hft.stuttgart.citydoctor2.reporting.XmlStreamReporter;
import
de.hft.stuttgart.citydoctor2.reporting.XmlValidationReporter
;
import
de.hft.stuttgart.citydoctor2.reporting.pdf.PdfReporter
;
import
de.hft.stuttgart.citydoctor2.reporting.pdf.PdfStreamReporter
;
import
de.hft.stuttgart.citydoctor2.utils.ArchivePacker
;
import
de.hft.stuttgart.citydoctor2.utils.Localization
;
import
de.hft.stuttgart.citydoctor2.zip.CityGmlZipArchive
;
import
de.hft.stuttgart.citydoctor2.zip.CityGmlZipEntry
;
import
de.hft.stuttgart.citydoctor2.zip.CityGmlZipEntryFile
;
import
de.hft.stuttgart.quality.model.enums.RequirementId
;
import
de.hft.stuttgart.quality.model.enums.TopLevelFeatureType
;
import
de.hft.stuttgart.quality.model.properties.CheckingProperty
;
...
...
@@ -86,309 +57,341 @@ import de.hft.stuttgart.quality.model.properties.RequirementProperty;
import
de.hft.stuttgart.quality.model.types.Checking
;
import
de.hft.stuttgart.quality.model.types.Parameter
;
import
de.hft.stuttgart.quality.model.types.ValidationPlan
;
import
org.apache.commons.io.FilenameUtils
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
javax.xml.XMLConstants
;
import
javax.xml.transform.Result
;
import
javax.xml.transform.Source
;
import
javax.xml.transform.Transformer
;
import
javax.xml.transform.TransformerException
;
import
javax.xml.transform.TransformerFactory
;
import
javax.xml.transform.dom.DOMResult
;
import
javax.xml.transform.dom.DOMSource
;
import
javax.xml.transform.sax.SAXResult
;
import
javax.xml.transform.stream.StreamSource
;
import
java.io.BufferedOutputStream
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.FileNotFoundException
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.UncheckedIOException
;
import
java.nio.file.Path
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.Iterator
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.Set
;
import
java.util.stream.Stream
;
/**
* The main container class for checking. It contains the logic for validation,
* as well as contains the state of the checks performed.
*
* @author Matthias Betz
*
* @author Matthias Betz
*/
public
class
Checker
{
private
static
final
Logger
logger
=
LogManager
.
getLogger
(
Checker
.
class
);
private
ValidationConfiguration
config
;
private
List
<
List
<
Check
>>
execLayers
;
private
List
<
Filter
>
includeFilters
;
private
List
<
Filter
>
excludeFilters
;
private
final
Checks
checkConfig
;
private
final
CityDoctorModel
model
;
public
Checker
(
CityDoctorModel
model
)
{
this
(
ValidationConfiguration
.
loadStandardValidationConfig
(),
model
);
}
public
Checker
(
ValidationConfiguration
config
,
CityDoctorModel
model
)
{
this
.
model
=
model
;
checkConfig
=
new
Checks
();
setValidationConfig
(
config
);
}
public
Checks
getChecks
()
{
return
checkConfig
;
}
public
CityDoctorModel
getModel
()
{
return
model
;
}
/**
* Write the xml report for the given CityDoctorModel. If no report location is
* given or this checker has not validated anything, nothing is done.
*
* @param xmlOutput the output file location for the XML report. Can be null.
*/
public
void
writeXmlReport
(
String
xmlOutput
)
{
if
(!
model
.
isValidated
()
||
xmlOutput
==
null
)
{
return
;
}
File
xmlFile
=
new
File
(
xmlOutput
);
if
(
xmlFile
.
getParentFile
()
!=
null
)
{
xmlFile
.
getParentFile
().
mkdirs
();
}
Reporter
reporter
=
new
XmlValidationReporter
();
try
(
BufferedOutputStream
bos
=
new
BufferedOutputStream
(
new
FileOutputStream
(
xmlFile
.
getAbsolutePath
())))
{
reporter
.
writeReport
(
checkConfig
,
bos
,
model
,
config
);
}
catch
(
CheckReportWriteException
|
IOException
e
)
{
logger
.
error
(
Localization
.
getText
(
"Checker.failXml"
),
e
);
}
}
public
void
writePdfReport
(
String
pdfOutput
)
{
if
(!
model
.
isValidated
()
||
pdfOutput
==
null
)
{
return
;
}
File
pdfFile
=
new
File
(
pdfOutput
);
if
(
pdfFile
.
getParentFile
()
!=
null
)
{
pdfFile
.
getParentFile
().
mkdirs
();
}
Reporter
reporter
=
new
PdfReporter
();
try
(
BufferedOutputStream
bos
=
new
BufferedOutputStream
(
new
FileOutputStream
(
pdfFile
.
getAbsolutePath
())))
{
reporter
.
writeReport
(
checkConfig
,
bos
,
model
,
config
);
}
catch
(
IOException
|
CheckReportWriteException
e
)
{
logger
.
error
(
Localization
.
getText
(
"Checker.failPdf"
),
e
);
}
}
public
void
runChecks
()
{
runChecks
((
ProgressListener
)
null
);
}
public
void
runChecks
(
String
xmlOutput
)
{
runChecks
();
writeXmlReport
(
xmlOutput
);
}
public
void
runChecks
(
String
xmlOutput
,
String
pdfOutput
)
{
runChecks
();
writeXmlReport
(
xmlOutput
);
writePdfReport
(
pdfOutput
);
}
public
void
runChecks
(
String
xmlOutput
,
String
pdfOutput
,
ProgressListener
l
)
{
runChecks
(
l
);
writeXmlReport
(
xmlOutput
);
writePdfReport
(
pdfOutput
);
}
public
void
runChecks
(
ProgressListener
l
)
{
if
(
config
==
null
)
{
config
=
ValidationConfiguration
.
loadStandardValidationConfig
();
}
checkCityModel
(
model
,
l
);
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
Localization
.
getText
(
"Checker.checksFinished"
));
}
SvrlContentHandler
handler
=
executeSchematronValidationIfAvailable
(
config
,
model
.
getFile
());
if
(
handler
!=
null
)
{
handleSchematronResults
(
handler
);
}
model
.
setValidated
(
createValidationPlan
());
}
private
void
handleSchematronResults
(
SvrlContentHandler
handler
)
{
model
.
addGlobalErrors
(
handler
.
getGeneralErrors
());
Map
<
String
,
CityObject
>
featureMap
=
new
HashMap
<>();
model
.
createFeatureStream
().
forEach
(
f
->
featureMap
.
put
(
f
.
getGmlId
().
getGmlString
(),
f
));
handler
.
getFeatureErrors
().
forEach
((
k
,
v
)
->
{
if
(
k
.
trim
().
isEmpty
())
{
// missing gml id, ignore?
return
;
}
CityObject
co
=
featureMap
.
get
(
k
);
if
(
co
==
null
)
{
// gml id reported by schematron was not found, add to general errors
for
(
SchematronError
se
:
v
)
{
model
.
addGlobalError
(
se
);
}
}
else
{
handleSchematronErrorsForCityObject
(
v
,
co
);
}
});
}
public
static
void
handleSchematronErrorsForCityObject
(
List
<
SchematronError
>
v
,
CityObject
co
)
{
int
count
=
0
;
for
(
SchematronError
se
:
v
)
{
CheckError
err
;
if
(
AttributeMissingError
.
ID
.
getIdString
().
equals
(
se
.
getErrorIdString
()))
{
err
=
new
AttributeMissingError
(
co
,
se
.
getChildId
(),
se
.
getNameOfAttribute
());
}
else
if
(
AttributeValueWrongError
.
ID
.
getIdString
().
equals
(
se
.
getErrorIdString
()))
{
err
=
new
AttributeValueWrongError
(
co
,
se
.
getChildId
(),
se
.
getNameOfAttribute
());
}
else
if
(
AttributeInvalidError
.
ID
.
getIdString
().
equals
(
se
.
getErrorIdString
()))
{
err
=
new
AttributeInvalidError
(
co
,
se
.
getChildId
(),
se
.
getNameOfAttribute
());
}
else
{
throw
new
IllegalStateException
(
"Unknown error ID was given in schematron file: "
+
se
.
getErrorIdString
());
}
co
.
addCheckResult
(
new
CheckResult
(
new
CheckId
(
"SchematronCheck "
+
count
),
ResultStatus
.
ERROR
,
err
));
count
++;
}
}
ValidationPlan
createValidationPlan
()
{
ValidationPlan
plan
=
new
ValidationPlan
();
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Filter
filter
=
createFilter
();
plan
.
setFilter
(
new
FilterProperty
(
filter
));
Map
<
String
,
de
.
hft
.
stuttgart
.
citydoctor2
.
check
.
Requirement
>
reqs
=
Checks
.
getAvailableRequirements
();
for
(
Entry
<
String
,
RequirementConfiguration
>
e
:
config
.
getRequirements
().
entrySet
())
{
RequirementId
reqId
=
mapToRequirement
(
e
.
getKey
());
if
(
reqId
==
null
)
{
continue
;
}
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Requirement
req
=
new
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Requirement
();
req
.
setRequirementType
(
reqId
);
req
.
setEnabled
(
e
.
getValue
().
isEnabled
());
plan
.
getRequirements
().
add
(
new
RequirementProperty
(
req
));
Map
<
String
,
String
>
parameters
=
e
.
getValue
().
getParameters
();
if
(
parameters
!=
null
)
{
for
(
Entry
<
String
,
String
>
param
:
parameters
.
entrySet
())
{
Parameter
p
=
new
Parameter
();
DefaultParameter
defaultP
=
getDefaultParameter
(
e
.
getKey
(),
reqs
,
param
.
getKey
());
if
(
defaultP
!=
null
)
{
p
.
setUom
(
defaultP
.
getUnitType
().
getGmlRepresentation
());
}
p
.
setName
(
param
.
getKey
());
p
.
setValue
(
param
.
getValue
());
req
.
getParameters
().
add
(
new
ParameterProperty
(
p
));
}
}
}
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Requirement
missing
=
new
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Requirement
();
missing
.
setRequirementType
(
RequirementId
.
R_SE_ATTRIBUTES_EXISTING
);
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Requirement
correct
=
new
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Requirement
();
correct
.
setRequirementType
(
RequirementId
.
R_SE_ATTRIBUTES_CORRECT
);
missing
.
setEnabled
(
config
.
getSchematronFilePath
()
!=
null
);
correct
.
setEnabled
(
config
.
getSchematronFilePath
()
!=
null
);
plan
.
getRequirements
().
add
(
new
RequirementProperty
(
missing
));
plan
.
getRequirements
().
add
(
new
RequirementProperty
(
correct
));
Parameter
numRounding
=
new
Parameter
();
numRounding
.
setName
(
"numberOfRoundingPlaces"
);
numRounding
.
setValue
(
""
+
config
.
getNumberOfRoundingPlaces
());
Parameter
minVertexDistance
=
new
Parameter
();
minVertexDistance
.
setName
(
"minVertexDistance"
);
minVertexDistance
.
setUom
(
"m"
);
minVertexDistance
.
setValue
(
""
+
config
.
getMinVertexDistance
());
Parameter
schematronFile
=
new
Parameter
();
schematronFile
.
setName
(
"schematronFile"
);
schematronFile
.
setValue
(
config
.
getSchematronFilePath
());
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
GlobalParameters
globParams
=
new
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
GlobalParameters
();
plan
.
setGlobalParameters
(
new
GlobalParametersProperty
(
globParams
));
globParams
.
getParameters
().
add
(
new
ParameterProperty
(
numRounding
));
globParams
.
getParameters
().
add
(
new
ParameterProperty
(
minVertexDistance
));
globParams
.
getParameters
().
add
(
new
ParameterProperty
(
schematronFile
));
return
plan
;
}
private
DefaultParameter
getDefaultParameter
(
String
reqKey
,
Map
<
String
,
de
.
hft
.
stuttgart
.
citydoctor2
.
check
.
Requirement
>
reqs
,
String
paramName
)
{
de
.
hft
.
stuttgart
.
citydoctor2
.
check
.
Requirement
requirement
=
reqs
.
get
(
reqKey
);
if
(
requirement
!=
null
)
{
for
(
DefaultParameter
param
:
requirement
.
getDefaultParameter
())
{
if
(
param
.
getName
().
equals
(
paramName
))
{
return
param
;
}
}
}
return
null
;
}
private
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Filter
createFilter
()
{
var
filter
=
new
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Filter
();
handleInputFilter
(
filter
);
if
(
excludeFilters
!=
null
)
{
for
(
Filter
f
:
excludeFilters
)
{
if
(
f
instanceof
TypeFilter
tf
)
{
FeatureType
type
=
tf
.
getType
();
TopLevelFeatureType
tlft
=
mapToTopLevelFeatureType
(
type
);
if
(
tlft
==
null
)
{
continue
;
}
removeFilter
(
tlft
,
filter
);
}
}
}
return
filter
;
}
private
void
handleInputFilter
(
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Filter
filter
)
{
if
(
includeFilters
==
null
||
includeFilters
.
isEmpty
())
{
// no filter means, use all
addAllFilters
(
filter
);
}
else
{
for
(
Filter
f
:
includeFilters
)
{
if
(
f
instanceof
TypeFilter
tf
)
{
FeatureType
type
=
tf
.
getType
();
TopLevelFeatureType
tlft
=
mapToTopLevelFeatureType
(
type
);
if
(
tlft
==
null
)
{
continue
;
}
Checking
c
=
new
Checking
();
c
.
setFeatureType
(
tlft
);
filter
.
getChecking
().
add
(
new
CheckingProperty
(
c
));
}
}
if
(
filter
.
getChecking
().
isEmpty
())
{
// this happens if no type include filter was used
// it is possible only single objects were tested then
// so include everything
addAllFilters
(
filter
);
}
}
}
private
void
addAllFilters
(
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Filter
filter
)
{
Checking
buildingChecking
=
new
Checking
();
buildingChecking
.
setFeatureType
(
TopLevelFeatureType
.
BUILDING
);
filter
.
getChecking
().
add
(
new
CheckingProperty
(
buildingChecking
));
Checking
bridgeChecking
=
new
Checking
();
bridgeChecking
.
setFeatureType
(
TopLevelFeatureType
.
BRIDGE
);
filter
.
getChecking
().
add
(
new
CheckingProperty
(
bridgeChecking
));
Checking
landChecking
=
new
Checking
();
landChecking
.
setFeatureType
(
TopLevelFeatureType
.
LAND
);
filter
.
getChecking
().
add
(
new
CheckingProperty
(
landChecking
));
Checking
transportationChecking
=
new
Checking
();
transportationChecking
.
setFeatureType
(
TopLevelFeatureType
.
TRANSPORTATION
);
filter
.
getChecking
().
add
(
new
CheckingProperty
(
transportationChecking
));
Checking
vegetationChecking
=
new
Checking
();
vegetationChecking
.
setFeatureType
(
TopLevelFeatureType
.
VEGETATION
);
filter
.
getChecking
().
add
(
new
CheckingProperty
(
vegetationChecking
));
Checking
waterChecking
=
new
Checking
();
waterChecking
.
setFeatureType
(
TopLevelFeatureType
.
WATER
);
filter
.
getChecking
().
add
(
new
CheckingProperty
(
waterChecking
));
}
private
void
removeFilter
(
TopLevelFeatureType
tlft
,
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Filter
filter
)
{
for
(
CheckingProperty
c
:
filter
.
getChecking
())
{
if
(
c
.
getObject
().
getFeatureType
().
equals
(
tlft
))
{
filter
.
getChecking
().
remove
(
c
);
return
;
}
}
}
private
TopLevelFeatureType
mapToTopLevelFeatureType
(
FeatureType
type
)
{
private
static
final
Logger
logger
=
LogManager
.
getLogger
(
Checker
.
class
);
private
ValidationConfiguration
config
;
private
List
<
List
<
Check
>>
execLayers
;
private
List
<
Filter
>
includeFilters
;
private
List
<
Filter
>
excludeFilters
;
private
final
Checks
checkConfig
;
private
final
CityDoctorModel
model
;
public
Checker
(
CityDoctorModel
model
)
{
this
(
ValidationConfiguration
.
loadStandardValidationConfig
(),
model
);
}
public
Checker
(
ValidationConfiguration
config
,
CityDoctorModel
model
)
{
this
.
model
=
model
;
checkConfig
=
new
Checks
();
setValidationConfig
(
config
);
}
public
Checks
getChecks
()
{
return
checkConfig
;
}
public
CityDoctorModel
getModel
()
{
return
model
;
}
/**
* Write the xml report for the given CityDoctorModel. If no report location is
* given or this checker has not validated anything, nothing is done.
*
* @param xmlOutput the output file location for the XML report. Can be null.
*/
public
void
writeXmlReport
(
String
xmlOutput
)
{
if
(!
model
.
isValidated
()
||
xmlOutput
==
null
)
{
return
;
}
File
xmlFile
=
new
File
(
xmlOutput
);
if
(
xmlFile
.
getParentFile
()
!=
null
)
{
xmlFile
.
getParentFile
().
mkdirs
();
}
Reporter
reporter
=
new
XmlValidationReporter
();
try
(
BufferedOutputStream
bos
=
new
BufferedOutputStream
(
new
FileOutputStream
(
xmlFile
.
getAbsolutePath
())))
{
reporter
.
writeReport
(
checkConfig
,
bos
,
model
,
config
);
}
catch
(
CheckReportWriteException
|
IOException
e
)
{
logger
.
error
(
Localization
.
getText
(
"Checker.failXml"
),
e
);
}
}
public
void
writePdfReport
(
String
pdfOutput
)
{
if
(!
model
.
isValidated
()
||
pdfOutput
==
null
)
{
return
;
}
File
pdfFile
=
new
File
(
pdfOutput
);
if
(
pdfFile
.
getParentFile
()
!=
null
)
{
pdfFile
.
getParentFile
().
mkdirs
();
}
Reporter
reporter
=
new
PdfReporter
();
try
(
BufferedOutputStream
bos
=
new
BufferedOutputStream
(
new
FileOutputStream
(
pdfFile
.
getAbsolutePath
())))
{
reporter
.
writeReport
(
checkConfig
,
bos
,
model
,
config
);
}
catch
(
IOException
|
CheckReportWriteException
e
)
{
logger
.
error
(
Localization
.
getText
(
"Checker.failPdf"
),
e
);
}
}
public
void
runChecks
()
{
runChecks
((
ProgressListener
)
null
);
}
public
void
runChecks
(
String
xmlOutput
)
{
runChecks
();
writeXmlReport
(
xmlOutput
);
}
public
void
runChecks
(
String
xmlOutput
,
String
pdfOutput
)
{
runChecks
();
writeXmlReport
(
xmlOutput
);
writePdfReport
(
pdfOutput
);
}
public
void
runChecks
(
String
xmlOutput
,
String
pdfOutput
,
ProgressListener
l
)
{
runChecks
(
l
);
writeXmlReport
(
xmlOutput
);
writePdfReport
(
pdfOutput
);
}
public
void
runChecks
(
ProgressListener
l
)
{
if
(
config
==
null
)
{
config
=
ValidationConfiguration
.
loadStandardValidationConfig
();
}
checkCityModel
(
model
,
l
);
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
Localization
.
getText
(
"Checker.checksFinished"
));
}
SvrlContentHandler
handler
=
executeSchematronValidationIfAvailable
(
config
,
model
.
getFile
());
if
(
handler
!=
null
)
{
handleSchematronResults
(
handler
);
}
model
.
setValidated
(
createValidationPlan
());
}
private
void
handleSchematronResults
(
SvrlContentHandler
handler
)
{
model
.
addGlobalErrors
(
handler
.
getGeneralErrors
());
Map
<
String
,
CityObject
>
featureMap
=
new
HashMap
<>();
model
.
createFeatureStream
().
forEach
(
f
->
featureMap
.
put
(
f
.
getGmlId
().
getGmlString
(),
f
));
handler
.
getFeatureErrors
().
forEach
((
k
,
v
)
->
{
if
(
k
.
trim
().
isEmpty
())
{
// missing gml id, ignore?
return
;
}
CityObject
co
=
featureMap
.
get
(
k
);
if
(
co
==
null
)
{
// gml id reported by schematron was not found, add to general errors
for
(
SchematronError
se
:
v
)
{
model
.
addGlobalError
(
se
);
}
}
else
{
handleSchematronErrorsForCityObject
(
v
,
co
);
}
});
}
public
static
void
handleSchematronErrorsForCityObject
(
List
<
SchematronError
>
v
,
CityObject
co
)
{
int
count
=
0
;
for
(
SchematronError
se
:
v
)
{
CheckError
err
;
if
(
AttributeMissingError
.
ID
.
getIdString
().
equals
(
se
.
getErrorIdString
()))
{
err
=
new
AttributeMissingError
(
co
,
se
.
getChildId
(),
se
.
getNameOfAttribute
());
}
else
if
(
AttributeValueWrongError
.
ID
.
getIdString
().
equals
(
se
.
getErrorIdString
()))
{
err
=
new
AttributeValueWrongError
(
co
,
se
.
getChildId
(),
se
.
getNameOfAttribute
());
}
else
if
(
AttributeInvalidError
.
ID
.
getIdString
().
equals
(
se
.
getErrorIdString
()))
{
err
=
new
AttributeInvalidError
(
co
,
se
.
getChildId
(),
se
.
getNameOfAttribute
());
}
else
{
throw
new
IllegalStateException
(
"Unknown error ID was given in schematron file: "
+
se
.
getErrorIdString
());
}
co
.
addCheckResult
(
new
CheckResult
(
new
CheckId
(
"SchematronCheck "
+
count
),
ResultStatus
.
ERROR
,
err
));
count
++;
}
}
ValidationPlan
createValidationPlan
()
{
ValidationPlan
plan
=
new
ValidationPlan
();
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Filter
filter
=
createFilter
();
plan
.
setFilter
(
new
FilterProperty
(
filter
));
Map
<
String
,
de
.
hft
.
stuttgart
.
citydoctor2
.
check
.
Requirement
>
reqs
=
Checks
.
getAvailableRequirements
();
for
(
Entry
<
String
,
RequirementConfiguration
>
e
:
config
.
getRequirements
().
entrySet
())
{
RequirementId
reqId
=
mapToRequirement
(
e
.
getKey
());
if
(
reqId
==
null
)
{
continue
;
}
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Requirement
req
=
new
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Requirement
();
req
.
setRequirementType
(
reqId
);
req
.
setEnabled
(
e
.
getValue
().
isEnabled
());
plan
.
getRequirements
().
add
(
new
RequirementProperty
(
req
));
Map
<
String
,
String
>
parameters
=
e
.
getValue
().
getParameters
();
if
(
parameters
!=
null
)
{
for
(
Entry
<
String
,
String
>
param
:
parameters
.
entrySet
())
{
Parameter
p
=
new
Parameter
();
DefaultParameter
defaultP
=
getDefaultParameter
(
e
.
getKey
(),
reqs
,
param
.
getKey
());
if
(
defaultP
!=
null
)
{
p
.
setUom
(
defaultP
.
getUnitType
().
getGmlRepresentation
());
}
p
.
setName
(
param
.
getKey
());
p
.
setValue
(
param
.
getValue
());
req
.
getParameters
().
add
(
new
ParameterProperty
(
p
));
}
}
}
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Requirement
missing
=
new
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Requirement
();
missing
.
setRequirementType
(
RequirementId
.
R_SE_ATTRIBUTES_EXISTING
);
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Requirement
correct
=
new
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Requirement
();
correct
.
setRequirementType
(
RequirementId
.
R_SE_ATTRIBUTES_CORRECT
);
missing
.
setEnabled
(
config
.
getSchematronFilePath
()
!=
null
);
correct
.
setEnabled
(
config
.
getSchematronFilePath
()
!=
null
);
plan
.
getRequirements
().
add
(
new
RequirementProperty
(
missing
));
plan
.
getRequirements
().
add
(
new
RequirementProperty
(
correct
));
Parameter
numRounding
=
new
Parameter
();
numRounding
.
setName
(
"numberOfRoundingPlaces"
);
numRounding
.
setValue
(
""
+
config
.
getNumberOfRoundingPlaces
());
Parameter
minVertexDistance
=
new
Parameter
();
minVertexDistance
.
setName
(
"minVertexDistance"
);
minVertexDistance
.
setUom
(
"m"
);
minVertexDistance
.
setValue
(
""
+
config
.
getMinVertexDistance
());
Parameter
schematronFile
=
new
Parameter
();
schematronFile
.
setName
(
"schematronFile"
);
schematronFile
.
setValue
(
config
.
getSchematronFilePath
());
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
GlobalParameters
globParams
=
new
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
GlobalParameters
();
plan
.
setGlobalParameters
(
new
GlobalParametersProperty
(
globParams
));
globParams
.
getParameters
().
add
(
new
ParameterProperty
(
numRounding
));
globParams
.
getParameters
().
add
(
new
ParameterProperty
(
minVertexDistance
));
globParams
.
getParameters
().
add
(
new
ParameterProperty
(
schematronFile
));
return
plan
;
}
private
DefaultParameter
getDefaultParameter
(
String
reqKey
,
Map
<
String
,
de
.
hft
.
stuttgart
.
citydoctor2
.
check
.
Requirement
>
reqs
,
String
paramName
)
{
de
.
hft
.
stuttgart
.
citydoctor2
.
check
.
Requirement
requirement
=
reqs
.
get
(
reqKey
);
if
(
requirement
!=
null
)
{
for
(
DefaultParameter
param
:
requirement
.
getDefaultParameter
())
{
if
(
param
.
getName
().
equals
(
paramName
))
{
return
param
;
}
}
}
return
null
;
}
private
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Filter
createFilter
()
{
var
filter
=
new
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Filter
();
handleInputFilter
(
filter
);
if
(
excludeFilters
!=
null
)
{
for
(
Filter
f
:
excludeFilters
)
{
if
(
f
instanceof
TypeFilter
tf
)
{
FeatureType
type
=
tf
.
getType
();
TopLevelFeatureType
tlft
=
mapToTopLevelFeatureType
(
type
);
if
(
tlft
==
null
)
{
continue
;
}
removeFilter
(
tlft
,
filter
);
}
}
}
return
filter
;
}
private
void
handleInputFilter
(
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Filter
filter
)
{
if
(
includeFilters
==
null
||
includeFilters
.
isEmpty
())
{
// no filter means, use all
addAllFilters
(
filter
);
}
else
{
for
(
Filter
f
:
includeFilters
)
{
if
(
f
instanceof
TypeFilter
tf
)
{
FeatureType
type
=
tf
.
getType
();
TopLevelFeatureType
tlft
=
mapToTopLevelFeatureType
(
type
);
if
(
tlft
==
null
)
{
continue
;
}
Checking
c
=
new
Checking
();
c
.
setFeatureType
(
tlft
);
filter
.
getChecking
().
add
(
new
CheckingProperty
(
c
));
}
}
if
(
filter
.
getChecking
().
isEmpty
())
{
// this happens if no type include filter was used
// it is possible only single objects were tested then
// so include everything
addAllFilters
(
filter
);
}
}
}
private
void
addAllFilters
(
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Filter
filter
)
{
Checking
buildingChecking
=
new
Checking
();
buildingChecking
.
setFeatureType
(
TopLevelFeatureType
.
BUILDING
);
filter
.
getChecking
().
add
(
new
CheckingProperty
(
buildingChecking
));
Checking
bridgeChecking
=
new
Checking
();
bridgeChecking
.
setFeatureType
(
TopLevelFeatureType
.
BRIDGE
);
filter
.
getChecking
().
add
(
new
CheckingProperty
(
bridgeChecking
));
Checking
landChecking
=
new
Checking
();
landChecking
.
setFeatureType
(
TopLevelFeatureType
.
LAND
);
filter
.
getChecking
().
add
(
new
CheckingProperty
(
landChecking
));
Checking
transportationChecking
=
new
Checking
();
transportationChecking
.
setFeatureType
(
TopLevelFeatureType
.
TRANSPORTATION
);
filter
.
getChecking
().
add
(
new
CheckingProperty
(
transportationChecking
));
Checking
vegetationChecking
=
new
Checking
();
vegetationChecking
.
setFeatureType
(
TopLevelFeatureType
.
VEGETATION
);
filter
.
getChecking
().
add
(
new
CheckingProperty
(
vegetationChecking
));
Checking
waterChecking
=
new
Checking
();
waterChecking
.
setFeatureType
(
TopLevelFeatureType
.
WATER
);
filter
.
getChecking
().
add
(
new
CheckingProperty
(
waterChecking
));
}
private
void
removeFilter
(
TopLevelFeatureType
tlft
,
de
.
hft
.
stuttgart
.
quality
.
model
.
types
.
Filter
filter
)
{
for
(
CheckingProperty
c
:
filter
.
getChecking
())
{
if
(
c
.
getObject
().
getFeatureType
().
equals
(
tlft
))
{
filter
.
getChecking
().
remove
(
c
);
return
;
}
}
}
private
TopLevelFeatureType
mapToTopLevelFeatureType
(
FeatureType
type
)
{
return
switch
(
type
)
{
case
BRIDGE
->
TopLevelFeatureType
.
BRIDGE
;
case
BUILDING
->
TopLevelFeatureType
.
BUILDING
;
...
...
@@ -398,298 +401,299 @@ public class Checker {
case
WATER
->
TopLevelFeatureType
.
WATER
;
default
->
null
;
};
}
private
RequirementId
mapToRequirement
(
String
requirementName
)
{
try
{
return
RequirementId
.
valueOf
(
requirementName
);
}
catch
(
IllegalArgumentException
e
)
{
return
null
;
}
}
public
ValidationConfiguration
getConfig
()
{
return
config
;
}
public
static
SvrlContentHandler
executeSchematronValidationIfAvailable
(
ValidationConfiguration
config
,
File
file
)
{
if
(
file
==
null
||
!
file
.
exists
())
{
return
null
;
}
try
{
return
executeSchematronValidationIfAvailable
(
config
,
new
FileInputStream
(
file
));
}
catch
(
FileNotFoundException
e
)
{
throw
new
UncheckedIOException
(
e
);
}
}
public
static
SvrlContentHandler
executeSchematronValidationIfAvailable
(
ValidationConfiguration
config
,
InputStream
in
)
{
if
(
config
.
getSchematronFilePath
()
!=
null
&&
!
config
.
getSchematronFilePath
().
isEmpty
())
{
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
Localization
.
getText
(
"Checker.schematronValidation"
));
}
try
{
TransformerFactory
transformerFactory
=
TransformerFactory
.
newInstance
(
"net.sf.saxon.TransformerFactoryImpl"
,
Checker
.
class
.
getClassLoader
());
transformerFactory
.
setAttribute
(
XMLConstants
.
ACCESS_EXTERNAL_DTD
,
""
);
transformerFactory
.
setFeature
(
XMLConstants
.
FEATURE_SECURE_PROCESSING
,
true
);
transformerFactory
.
setURIResolver
((
href
,
base
)
->
new
StreamSource
(
Checker
.
class
.
getResourceAsStream
(
href
)));
Source
dsdlXslSource
=
new
StreamSource
(
Checker
.
class
.
getResourceAsStream
(
"iso_dsdl_include.xsl"
));
Transformer
dsdlXslTransformer
=
transformerFactory
.
newTransformer
(
dsdlXslSource
);
DOMResult
dsdlXslResult
=
new
DOMResult
();
dsdlXslTransformer
.
transform
(
new
StreamSource
(
new
File
(
config
.
getSchematronFilePath
())),
dsdlXslResult
);
Source
abstractExpandXsl
=
new
StreamSource
(
Checker
.
class
.
getResourceAsStream
(
"iso_abstract_expand.xsl"
));
Transformer
abstractExpandTransformer
=
transformerFactory
.
newTransformer
(
abstractExpandXsl
);
DOMResult
abstractExpandResult
=
new
DOMResult
();
abstractExpandTransformer
.
transform
(
new
DOMSource
(
dsdlXslResult
.
getNode
()),
abstractExpandResult
);
Source
svrlXslSource
=
new
StreamSource
(
Checker
.
class
.
getResourceAsStream
(
"iso_svrl_for_xslt2.xsl"
));
Transformer
svrlTransformer
=
transformerFactory
.
newTransformer
(
svrlXslSource
);
DOMResult
schematronXsltResult
=
new
DOMResult
();
svrlTransformer
.
transform
(
new
DOMSource
(
abstractExpandResult
.
getNode
()),
schematronXsltResult
);
Transformer
schematronTransformer
=
transformerFactory
.
newTransformer
(
new
DOMSource
(
schematronXsltResult
.
getNode
()));
Source
cityGmlSource
=
new
StreamSource
(
in
);
SvrlContentHandler
handler
=
new
SvrlContentHandler
();
Result
finalResult
=
new
SAXResult
(
handler
);
schematronTransformer
.
transform
(
cityGmlSource
,
finalResult
);
return
handler
;
}
catch
(
TransformerException
e
)
{
logger
.
catching
(
e
);
}
}
return
null
;
}
private
void
buildFilters
()
{
FilterConfiguration
filterConfig
=
config
.
getFilter
();
if
(
filterConfig
==
null
)
{
includeFilters
=
Collections
.
emptyList
();
excludeFilters
=
Collections
.
emptyList
();
return
;
}
excludeFilters
=
buildExcludeFilters
(
filterConfig
);
includeFilters
=
buildIncludeFilters
(
filterConfig
);
}
private
List
<
Filter
>
buildExcludeFilters
(
FilterConfiguration
filterConfig
)
{
if
(
filterConfig
==
null
)
{
return
Collections
.
emptyList
();
}
ExcludeFilterConfiguration
excludeConfig
=
filterConfig
.
getExclude
();
if
(
excludeConfig
==
null
)
{
return
Collections
.
emptyList
();
}
else
{
List
<
Filter
>
filters
=
new
ArrayList
<>();
if
(
excludeConfig
.
getTypes
()
!=
null
)
{
for
(
FeatureType
excludeType
:
excludeConfig
.
getTypes
())
{
filters
.
add
(
new
TypeFilter
(
excludeType
));
}
}
if
(
excludeConfig
.
getIds
()
!=
null
)
{
for
(
String
excludePattern
:
excludeConfig
.
getIds
())
{
Filter
f
=
new
EqualsIgnoreCaseFilter
(
excludePattern
);
filters
.
add
(
f
);
}
}
return
filters
;
}
}
private
List
<
Filter
>
buildIncludeFilters
(
FilterConfiguration
filterConfig
)
{
if
(
filterConfig
==
null
)
{
return
Collections
.
emptyList
();
}
IncludeFilterConfiguration
includeConfig
=
filterConfig
.
getInclude
();
if
(
includeConfig
==
null
)
{
return
Collections
.
emptyList
();
}
else
{
List
<
Filter
>
filters
=
new
ArrayList
<>();
if
(
includeConfig
.
getTypes
()
!=
null
)
{
for
(
FeatureType
includeType
:
includeConfig
.
getTypes
())
{
filters
.
add
(
new
TypeFilter
(
includeType
));
}
}
if
(
includeConfig
.
getIds
()
!=
null
)
{
for
(
String
includePattern
:
includeConfig
.
getIds
())
{
Filter
f
=
new
EqualsIgnoreCaseFilter
(
includePattern
);
filters
.
add
(
f
);
}
}
return
filters
;
}
}
private
void
setValidationConfig
(
ValidationConfiguration
config
)
{
if
(
config
==
null
)
{
throw
new
IllegalArgumentException
(
"Validation configuration may not be null"
);
}
this
.
config
=
config
;
buildFilters
();
ParserConfiguration
parserConfig
=
config
.
getParserConfiguration
();
List
<
Check
>
checks
=
collectEnabledChecksAndInit
(
parserConfig
,
config
);
execLayers
=
buildExecutionLayers
(
checks
);
}
private
List
<
Check
>
collectEnabledChecksAndInit
(
ParserConfiguration
parserConfig
,
ValidationConfiguration
config
)
{
Set
<
CheckId
>
enabledCheck
=
new
HashSet
<>();
Map
<
CheckId
,
Map
<
String
,
String
>>
parameterMap
=
new
HashMap
<>();
for
(
Entry
<
String
,
RequirementConfiguration
>
e
:
config
.
getRequirements
().
entrySet
())
{
de
.
hft
.
stuttgart
.
citydoctor2
.
check
.
Requirement
req
=
Checks
.
getAvailableRequirements
().
get
(
e
.
getKey
());
if
(
req
==
null
)
{
logger
.
warn
(
"Could not find any check that satisfies requirement {}, it will not be checked"
,
e
.
getKey
());
}
else
{
if
(
e
.
getValue
().
isEnabled
())
{
// this requirement is enabled
insertGlobalParameters
(
config
,
enabledCheck
,
parameterMap
,
e
,
req
);
}
}
}
fillParameterMapsWithDefaultParameter
(
enabledCheck
,
parameterMap
);
ArrayList
<
Check
>
checkList
=
new
ArrayList
<>();
for
(
CheckId
id
:
enabledCheck
)
{
Check
c
=
checkConfig
.
getCheckForId
(
id
);
c
.
init
(
parameterMap
.
get
(
id
),
parserConfig
);
checkList
.
add
(
c
);
}
return
checkList
;
}
private
void
insertGlobalParameters
(
ValidationConfiguration
config
,
Set
<
CheckId
>
enabledCheck
,
Map
<
CheckId
,
Map
<
String
,
String
>>
parameterMap
,
Entry
<
String
,
RequirementConfiguration
>
e
,
de
.
hft
.
stuttgart
.
citydoctor2
.
check
.
Requirement
req
)
{
for
(
CheckPrototype
proto
:
Checks
.
getCheckPrototypes
())
{
if
(
proto
.
checksRequirements
().
contains
(
req
))
{
// this requirement is checked by this check
// put all requirement parameter in the map
parameterMap
.
compute
(
proto
.
getCheckId
(),
(
k
,
v
)
->
{
if
(
v
==
null
)
{
v
=
new
HashMap
<>();
v
.
put
(
GlobalParameters
.
NUMBER_OF_ROUNDING_PLACES
,
config
.
getNumberOfRoundingPlacesAsString
());
v
.
put
(
GlobalParameters
.
MIN_VERTEX_DISTANCE
,
config
.
getMinVertexDistanceAsString
());
}
v
.
putAll
(
e
.
getValue
().
getParameters
());
return
v
;
});
enabledCheck
.
add
(
proto
.
getCheckId
());
collectDependencyChecks
(
proto
,
enabledCheck
);
}
}
}
private
void
fillParameterMapsWithDefaultParameter
(
Set
<
CheckId
>
enabledCheck
,
Map
<
CheckId
,
Map
<
String
,
String
>>
parameterMap
)
{
for
(
CheckId
id
:
enabledCheck
)
{
CheckPrototype
proto
=
Checks
.
getCheckPrototypeForId
(
id
);
Map
<
String
,
String
>
map
=
parameterMap
.
computeIfAbsent
(
id
,
k
->
new
HashMap
<>());
for
(
de
.
hft
.
stuttgart
.
citydoctor2
.
check
.
Requirement
req
:
proto
.
checksRequirements
())
{
if
(
proto
.
checksRequirements
().
contains
(
req
))
{
for
(
DefaultParameter
param
:
req
.
getDefaultParameter
())
{
map
.
computeIfAbsent
(
param
.
getName
(),
k
->
param
.
getValue
());
}
}
}
}
}
private
void
collectDependencyChecks
(
CheckPrototype
proto
,
Set
<
CheckId
>
enabledChecks
)
{
enabledChecks
.
addAll
(
proto
.
getDependencies
());
for
(
CheckId
id
:
proto
.
getDependencies
())
{
if
(
enabledChecks
.
contains
(
id
))
{
continue
;
}
CheckPrototype
depProto
=
Checks
.
getCheckPrototypeForId
(
id
);
collectDependencyChecks
(
depProto
,
enabledChecks
);
}
}
private
void
checkCityModel
(
CityDoctorModel
model
,
ProgressListener
l
)
{
Stream
<
CityObject
>
features
=
model
.
createFeatureStream
();
float
featureSum
=
model
.
getNumberOfFeatures
();
// stupid lamda with final variable restrictions
int
[]
currentFeature
=
new
int
[
1
];
features
.
forEach
(
co
->
{
if
(
config
.
getParserConfiguration
().
useLowMemoryConsumption
())
{
// no edges have been created yet, create them
co
.
prepareForChecking
();
}
// check every feature
executeChecksForCityObject
(
co
);
if
(
config
.
getParserConfiguration
().
useLowMemoryConsumption
())
{
// low memory consumption, remove edges again
co
.
clearMetaInformation
();
}
if
(
l
!=
null
)
{
currentFeature
[
0
]++;
l
.
updateProgress
(
currentFeature
[
0
]
/
featureSum
);
}
});
}
private
boolean
filterObject
(
CityObject
co
)
{
return
isObjectIncluded
(
co
,
includeFilters
,
excludeFilters
);
}
private
boolean
isObjectIncluded
(
CityObject
co
,
List
<
Filter
>
includeFilters
,
List
<
Filter
>
excludeFilters
)
{
if
(!
includeFilters
.
isEmpty
())
{
boolean
include
=
false
;
for
(
Filter
f
:
includeFilters
)
{
if
(
f
.
matches
(
co
))
{
include
=
true
;
break
;
}
}
if
(!
include
)
{
// not included, ignore
return
false
;
}
}
// check if object is excluded
for
(
Filter
f
:
excludeFilters
)
{
if
(
f
.
matches
(
co
))
{
// exclude object
return
false
;
}
}
return
true
;
}
/**
* Checks the city object if it has not been removed by the filters. The check
* result are stored into the city object itself.
*
* @param co the city object that is going to be checked
*/
private
void
executeChecksForCityObject
(
CityObject
co
)
{
if
(!
filterObject
(
co
))
{
return
;
}
executeChecksForCheckable
(
co
);
}
/**
* Executes all checks for the checkable. This will bypass the filters. This
* will clear the old check results
*
* @param co the checkable.
*/
public
void
executeChecksForCheckable
(
Checkable
co
)
{
// throw away old results
co
.
clearAllContainedCheckResults
();
if
(
logger
.
isDebugEnabled
())
{
logger
.
debug
(
Localization
.
getText
(
"Checker.checkFeature"
),
co
);
}
}
private
RequirementId
mapToRequirement
(
String
requirementName
)
{
try
{
return
RequirementId
.
valueOf
(
requirementName
);
}
catch
(
IllegalArgumentException
e
)
{
return
null
;
}
}
public
ValidationConfiguration
getConfig
()
{
return
config
;
}
public
static
SvrlContentHandler
executeSchematronValidationIfAvailable
(
ValidationConfiguration
config
,
File
file
)
{
if
(
file
==
null
||
!
file
.
exists
())
{
return
null
;
}
try
{
return
executeSchematronValidationIfAvailable
(
config
,
new
FileInputStream
(
file
));
}
catch
(
FileNotFoundException
e
)
{
throw
new
UncheckedIOException
(
e
);
}
}
@SuppressWarnings
(
"resource"
)
public
static
SvrlContentHandler
executeSchematronValidationIfAvailable
(
ValidationConfiguration
config
,
InputStream
in
)
{
if
(
config
.
getSchematronFilePath
()
!=
null
&&
!
config
.
getSchematronFilePath
().
isEmpty
())
{
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
Localization
.
getText
(
"Checker.schematronValidation"
));
}
try
{
TransformerFactory
transformerFactory
=
TransformerFactory
.
newInstance
(
"net.sf.saxon.TransformerFactoryImpl"
,
Checker
.
class
.
getClassLoader
());
transformerFactory
.
setAttribute
(
XMLConstants
.
ACCESS_EXTERNAL_DTD
,
""
);
transformerFactory
.
setFeature
(
XMLConstants
.
FEATURE_SECURE_PROCESSING
,
true
);
transformerFactory
.
setURIResolver
((
href
,
base
)
->
new
StreamSource
(
Checker
.
class
.
getResourceAsStream
(
href
)));
Source
dsdlXslSource
=
new
StreamSource
(
Checker
.
class
.
getResourceAsStream
(
"iso_dsdl_include.xsl"
));
Transformer
dsdlXslTransformer
=
transformerFactory
.
newTransformer
(
dsdlXslSource
);
DOMResult
dsdlXslResult
=
new
DOMResult
();
dsdlXslTransformer
.
transform
(
new
StreamSource
(
new
File
(
config
.
getSchematronFilePath
())),
dsdlXslResult
);
Source
abstractExpandXsl
=
new
StreamSource
(
Checker
.
class
.
getResourceAsStream
(
"iso_abstract_expand.xsl"
));
Transformer
abstractExpandTransformer
=
transformerFactory
.
newTransformer
(
abstractExpandXsl
);
DOMResult
abstractExpandResult
=
new
DOMResult
();
abstractExpandTransformer
.
transform
(
new
DOMSource
(
dsdlXslResult
.
getNode
()),
abstractExpandResult
);
Source
svrlXslSource
=
new
StreamSource
(
Checker
.
class
.
getResourceAsStream
(
"iso_svrl_for_xslt2.xsl"
));
Transformer
svrlTransformer
=
transformerFactory
.
newTransformer
(
svrlXslSource
);
DOMResult
schematronXsltResult
=
new
DOMResult
();
svrlTransformer
.
transform
(
new
DOMSource
(
abstractExpandResult
.
getNode
()),
schematronXsltResult
);
Transformer
schematronTransformer
=
transformerFactory
.
newTransformer
(
new
DOMSource
(
schematronXsltResult
.
getNode
()));
Source
cityGmlSource
=
new
StreamSource
(
in
);
SvrlContentHandler
handler
=
new
SvrlContentHandler
();
Result
finalResult
=
new
SAXResult
(
handler
);
schematronTransformer
.
transform
(
cityGmlSource
,
finalResult
);
return
handler
;
}
catch
(
TransformerException
e
)
{
logger
.
catching
(
e
);
}
}
return
null
;
}
private
void
buildFilters
()
{
FilterConfiguration
filterConfig
=
config
.
getFilter
();
if
(
filterConfig
==
null
)
{
includeFilters
=
Collections
.
emptyList
();
excludeFilters
=
Collections
.
emptyList
();
return
;
}
excludeFilters
=
buildExcludeFilters
(
filterConfig
);
includeFilters
=
buildIncludeFilters
(
filterConfig
);
}
private
List
<
Filter
>
buildExcludeFilters
(
FilterConfiguration
filterConfig
)
{
if
(
filterConfig
==
null
)
{
return
Collections
.
emptyList
();
}
ExcludeFilterConfiguration
excludeConfig
=
filterConfig
.
getExclude
();
if
(
excludeConfig
==
null
)
{
return
Collections
.
emptyList
();
}
else
{
List
<
Filter
>
filters
=
new
ArrayList
<>();
if
(
excludeConfig
.
getTypes
()
!=
null
)
{
for
(
FeatureType
excludeType
:
excludeConfig
.
getTypes
())
{
filters
.
add
(
new
TypeFilter
(
excludeType
));
}
}
if
(
excludeConfig
.
getIds
()
!=
null
)
{
for
(
String
excludePattern
:
excludeConfig
.
getIds
())
{
Filter
f
=
new
EqualsIgnoreCaseFilter
(
excludePattern
);
filters
.
add
(
f
);
}
}
return
filters
;
}
}
private
List
<
Filter
>
buildIncludeFilters
(
FilterConfiguration
filterConfig
)
{
if
(
filterConfig
==
null
)
{
return
Collections
.
emptyList
();
}
IncludeFilterConfiguration
includeConfig
=
filterConfig
.
getInclude
();
if
(
includeConfig
==
null
)
{
return
Collections
.
emptyList
();
}
else
{
List
<
Filter
>
filters
=
new
ArrayList
<>();
if
(
includeConfig
.
getTypes
()
!=
null
)
{
for
(
FeatureType
includeType
:
includeConfig
.
getTypes
())
{
filters
.
add
(
new
TypeFilter
(
includeType
));
}
}
if
(
includeConfig
.
getIds
()
!=
null
)
{
for
(
String
includePattern
:
includeConfig
.
getIds
())
{
Filter
f
=
new
EqualsIgnoreCaseFilter
(
includePattern
);
filters
.
add
(
f
);
}
}
return
filters
;
}
}
private
void
setValidationConfig
(
ValidationConfiguration
config
)
{
if
(
config
==
null
)
{
throw
new
IllegalArgumentException
(
"Validation configuration may not be null"
);
}
this
.
config
=
config
;
buildFilters
();
ParserConfiguration
parserConfig
=
config
.
getParserConfiguration
();
List
<
Check
>
checks
=
collectEnabledChecksAndInit
(
parserConfig
,
config
);
execLayers
=
buildExecutionLayers
(
checks
);
}
private
List
<
Check
>
collectEnabledChecksAndInit
(
ParserConfiguration
parserConfig
,
ValidationConfiguration
config
)
{
Set
<
CheckId
>
enabledCheck
=
new
HashSet
<>();
Map
<
CheckId
,
Map
<
String
,
String
>>
parameterMap
=
new
HashMap
<>();
for
(
Entry
<
String
,
RequirementConfiguration
>
e
:
config
.
getRequirements
().
entrySet
())
{
de
.
hft
.
stuttgart
.
citydoctor2
.
check
.
Requirement
req
=
Checks
.
getAvailableRequirements
().
get
(
e
.
getKey
());
if
(
req
==
null
)
{
logger
.
warn
(
"Could not find any check that satisfies requirement {}, it will not be checked"
,
e
.
getKey
());
}
else
{
if
(
e
.
getValue
().
isEnabled
())
{
// this requirement is enabled
insertGlobalParameters
(
config
,
enabledCheck
,
parameterMap
,
e
,
req
);
}
}
}
fillParameterMapsWithDefaultParameter
(
enabledCheck
,
parameterMap
);
ArrayList
<
Check
>
checkList
=
new
ArrayList
<>();
for
(
CheckId
id
:
enabledCheck
)
{
Check
c
=
checkConfig
.
getCheckForId
(
id
);
c
.
init
(
parameterMap
.
get
(
id
),
parserConfig
);
checkList
.
add
(
c
);
}
return
checkList
;
}
private
void
insertGlobalParameters
(
ValidationConfiguration
config
,
Set
<
CheckId
>
enabledCheck
,
Map
<
CheckId
,
Map
<
String
,
String
>>
parameterMap
,
Entry
<
String
,
RequirementConfiguration
>
e
,
de
.
hft
.
stuttgart
.
citydoctor2
.
check
.
Requirement
req
)
{
for
(
CheckPrototype
proto
:
Checks
.
getCheckPrototypes
())
{
if
(
proto
.
checksRequirements
().
contains
(
req
))
{
// this requirement is checked by this check
// put all requirement parameter in the map
parameterMap
.
compute
(
proto
.
getCheckId
(),
(
k
,
v
)
->
{
if
(
v
==
null
)
{
v
=
new
HashMap
<>();
v
.
put
(
GlobalParameters
.
NUMBER_OF_ROUNDING_PLACES
,
config
.
getNumberOfRoundingPlacesAsString
());
v
.
put
(
GlobalParameters
.
MIN_VERTEX_DISTANCE
,
config
.
getMinVertexDistanceAsString
());
}
v
.
putAll
(
e
.
getValue
().
getParameters
());
return
v
;
});
enabledCheck
.
add
(
proto
.
getCheckId
());
collectDependencyChecks
(
proto
,
enabledCheck
);
}
}
}
private
void
fillParameterMapsWithDefaultParameter
(
Set
<
CheckId
>
enabledCheck
,
Map
<
CheckId
,
Map
<
String
,
String
>>
parameterMap
)
{
for
(
CheckId
id
:
enabledCheck
)
{
CheckPrototype
proto
=
Checks
.
getCheckPrototypeForId
(
id
);
Map
<
String
,
String
>
map
=
parameterMap
.
computeIfAbsent
(
id
,
k
->
new
HashMap
<>());
for
(
de
.
hft
.
stuttgart
.
citydoctor2
.
check
.
Requirement
req
:
proto
.
checksRequirements
())
{
if
(
proto
.
checksRequirements
().
contains
(
req
))
{
for
(
DefaultParameter
param
:
req
.
getDefaultParameter
())
{
map
.
computeIfAbsent
(
param
.
getName
(),
k
->
param
.
getValue
());
}
}
}
}
}
private
void
collectDependencyChecks
(
CheckPrototype
proto
,
Set
<
CheckId
>
enabledChecks
)
{
enabledChecks
.
addAll
(
proto
.
getDependencies
());
for
(
CheckId
id
:
proto
.
getDependencies
())
{
if
(
enabledChecks
.
contains
(
id
))
{
continue
;
}
CheckPrototype
depProto
=
Checks
.
getCheckPrototypeForId
(
id
);
collectDependencyChecks
(
depProto
,
enabledChecks
);
}
}
private
void
checkCityModel
(
CityDoctorModel
model
,
ProgressListener
l
)
{
Stream
<
CityObject
>
features
=
model
.
createFeatureStream
();
float
featureSum
=
model
.
getNumberOfFeatures
();
// stupid lamda with final variable restrictions
int
[]
currentFeature
=
new
int
[
1
];
features
.
forEach
(
co
->
{
if
(
config
.
getParserConfiguration
().
useLowMemoryConsumption
())
{
// no edges have been created yet, create them
co
.
prepareForChecking
();
}
// check every feature
executeChecksForCityObject
(
co
);
if
(
config
.
getParserConfiguration
().
useLowMemoryConsumption
())
{
// low memory consumption, remove edges again
co
.
clearMetaInformation
();
}
if
(
l
!=
null
)
{
currentFeature
[
0
]++;
l
.
updateProgress
(
currentFeature
[
0
]
/
featureSum
);
}
});
}
private
boolean
filterObject
(
CityObject
co
)
{
return
isObjectIncluded
(
co
,
includeFilters
,
excludeFilters
);
}
private
boolean
isObjectIncluded
(
CityObject
co
,
List
<
Filter
>
includeFilters
,
List
<
Filter
>
excludeFilters
)
{
if
(!
includeFilters
.
isEmpty
())
{
boolean
include
=
false
;
for
(
Filter
f
:
includeFilters
)
{
if
(
f
.
matches
(
co
))
{
include
=
true
;
break
;
}
}
if
(!
include
)
{
// not included, ignore
return
false
;
}
}
// check if object is excluded
for
(
Filter
f
:
excludeFilters
)
{
if
(
f
.
matches
(
co
))
{
// exclude object
return
false
;
}
}
return
true
;
}
/**
* Checks the city object if it has not been removed by the filters. The check
* result are stored into the city object itself.
*
* @param co the city object that is going to be checked
*/
private
void
executeChecksForCityObject
(
CityObject
co
)
{
if
(!
filterObject
(
co
))
{
return
;
}
executeChecksForCheckable
(
co
);
}
/**
* Executes all checks for the checkable. This will bypass the filters. This
* will clear the old check results
*
* @param co the checkable.
*/
public
void
executeChecksForCheckable
(
Checkable
co
)
{
// throw away old results
co
.
clearAllContainedCheckResults
();
if
(
logger
.
isDebugEnabled
())
{
logger
.
debug
(
Localization
.
getText
(
"Checker.checkFeature"
),
co
);
}
for
(
List
<
Check
>
execLayer
:
execLayers
)
{
for
(
Check
check
:
execLayer
)
{
if
(
logger
.
isTraceEnabled
())
{
...
...
@@ -698,133 +702,200 @@ public class Checker {
co
.
accept
(
check
);
}
}
}
public
static
List
<
List
<
Check
>>
buildExecutionLayers
(
List
<
Check
>
checks
)
{
List
<
List
<
Check
>>
result
=
new
ArrayList
<>();
Set
<
Check
>
availableChecks
=
new
HashSet
<>(
checks
);
Set
<
CheckId
>
usedChecks
=
new
HashSet
<>();
while
(!
availableChecks
.
isEmpty
())
{
List
<
Check
>
layer
=
new
ArrayList
<>();
Iterator
<
Check
>
iterator
=
availableChecks
.
iterator
();
while
(
iterator
.
hasNext
())
{
Check
c
=
iterator
.
next
();
boolean
hasUnusedDependency
=
searchForUnusedDependency
(
usedChecks
,
c
);
if
(!
hasUnusedDependency
)
{
iterator
.
remove
();
layer
.
add
(
new
CheckContainer
(
c
));
}
}
if
(
layer
.
isEmpty
())
{
throw
new
IllegalStateException
(
"There are checks that have dependencies that are not executed or are unknown, aborting"
);
}
result
.
add
(
layer
);
for
(
Check
c
:
layer
)
{
usedChecks
.
add
(
c
.
getCheckId
());
}
}
return
result
;
}
private
static
boolean
searchForUnusedDependency
(
Set
<
CheckId
>
usedChecks
,
Check
c
)
{
boolean
hasUnusedDependency
=
false
;
for
(
CheckId
id
:
c
.
getDependencies
())
{
if
(!
usedChecks
.
contains
(
id
))
{
hasUnusedDependency
=
true
;
break
;
}
}
return
hasUnusedDependency
;
}
public
static
void
streamCheck
(
File
inputFile
,
String
xmlOutput
,
String
pdfOutput
,
ValidationConfiguration
config
,
String
outputFile
)
throws
IOException
,
CityGmlParseException
{
streamCheck
(
inputFile
,
xmlOutput
,
pdfOutput
,
config
,
null
,
outputFile
);
}
public
static
void
streamCheck
(
File
inputFile
,
String
xmlOutput
,
String
pdfOutput
,
ValidationConfiguration
config
,
FeatureCheckedListener
l
,
String
outputFile
)
throws
IOException
,
CityGmlParseException
{
try
(
BufferedOutputStream
xmlBos
=
getXmlOutputMaybe
(
xmlOutput
);
BufferedOutputStream
pdfBos
=
getPdfOutputMaybe
(
pdfOutput
))
{
Checker
c
=
new
Checker
(
config
,
null
);
String
fileName
=
inputFile
.
getName
();
// create reporter if available
XmlStreamReporter
xmlReporter
=
getXmlReporter
(
config
,
xmlBos
,
fileName
);
PdfStreamReporter
pdfReporter
=
getPdfReporter
(
config
,
pdfBos
,
fileName
);
// execute schematron first
SvrlContentHandler
handler
=
executeSchematronValidationIfAvailable
(
config
,
inputFile
);
CityGmlConsumer
con
=
new
StreamCityGmlConsumer
(
c
,
xmlReporter
,
pdfReporter
,
handler
,
config
,
l
);
// parse and validate
CityGmlParser
.
streamCityGml
(
inputFile
.
getAbsolutePath
(),
config
.
getParserConfiguration
(),
con
,
outputFile
);
// write reports if available
writeReport
(
xmlReporter
);
writeReport
(
pdfReporter
);
}
catch
(
CheckReportWriteException
e
)
{
logger
.
error
(
Localization
.
getText
(
"Checker.failReports"
),
e
);
}
}
private
static
XmlStreamReporter
getXmlReporter
(
ValidationConfiguration
config
,
BufferedOutputStream
xmlBos
,
String
fileName
)
{
XmlStreamReporter
xmlReporter
;
if
(
xmlBos
!=
null
)
{
xmlReporter
=
new
XmlStreamReporter
(
xmlBos
,
fileName
,
config
);
}
else
{
xmlReporter
=
null
;
}
return
xmlReporter
;
}
private
static
PdfStreamReporter
getPdfReporter
(
ValidationConfiguration
config
,
BufferedOutputStream
pdfBos
,
String
fileName
)
{
PdfStreamReporter
pdfReporter
;
if
(
pdfBos
!=
null
)
{
pdfReporter
=
new
PdfStreamReporter
(
pdfBos
,
fileName
,
config
);
}
else
{
pdfReporter
=
null
;
}
return
pdfReporter
;
}
public
static
void
writeReport
(
StreamReporter
reporter
)
throws
CheckReportWriteException
{
if
(
reporter
!=
null
)
{
reporter
.
finishReport
();
}
}
public
static
BufferedOutputStream
getPdfOutputMaybe
(
String
pdfOutput
)
throws
FileNotFoundException
{
return
pdfOutput
!=
null
?
new
BufferedOutputStream
(
new
FileOutputStream
(
pdfOutput
))
:
null
;
}
public
static
BufferedOutputStream
getXmlOutputMaybe
(
String
xmlOutput
)
throws
FileNotFoundException
{
return
xmlOutput
!=
null
?
new
BufferedOutputStream
(
new
FileOutputStream
(
xmlOutput
))
:
null
;
}
/**
* Checks the city object and writes report information into reporters. Clears
* old check results. If the city object would be filtered by the configured
* filters it is ignored and old check results are not cleared.
*
* @param xmlReporter a xml reporter
* @param pdfReporter a pdf reporter
* @param co the city object to be checked
*/
public
void
checkFeature
(
XmlStreamReporter
xmlReporter
,
PdfStreamReporter
pdfReporter
,
CityObject
co
)
{
if
(
logger
.
isDebugEnabled
())
{
logger
.
debug
(
Localization
.
getText
(
"Checker.checkFeature"
),
co
);
}
executeChecksForCityObject
(
co
);
if
(
xmlReporter
!=
null
)
{
xmlReporter
.
report
(
co
);
}
if
(
pdfReporter
!=
null
)
{
pdfReporter
.
report
(
co
);
}
}
}
public
static
List
<
List
<
Check
>>
buildExecutionLayers
(
List
<
Check
>
checks
)
{
List
<
List
<
Check
>>
result
=
new
ArrayList
<>();
Set
<
Check
>
availableChecks
=
new
HashSet
<>(
checks
);
Set
<
CheckId
>
usedChecks
=
new
HashSet
<>();
while
(!
availableChecks
.
isEmpty
())
{
List
<
Check
>
layer
=
new
ArrayList
<>();
Iterator
<
Check
>
iterator
=
availableChecks
.
iterator
();
while
(
iterator
.
hasNext
())
{
Check
c
=
iterator
.
next
();
boolean
hasUnusedDependency
=
searchForUnusedDependency
(
usedChecks
,
c
);
if
(!
hasUnusedDependency
)
{
iterator
.
remove
();
layer
.
add
(
new
CheckContainer
(
c
));
}
}
if
(
layer
.
isEmpty
())
{
throw
new
IllegalStateException
(
"There are checks that have dependencies that are not executed or are unknown, aborting"
);
}
result
.
add
(
layer
);
for
(
Check
c
:
layer
)
{
usedChecks
.
add
(
c
.
getCheckId
());
}
}
return
result
;
}
private
static
boolean
searchForUnusedDependency
(
Set
<
CheckId
>
usedChecks
,
Check
c
)
{
boolean
hasUnusedDependency
=
false
;
for
(
CheckId
id
:
c
.
getDependencies
())
{
if
(!
usedChecks
.
contains
(
id
))
{
hasUnusedDependency
=
true
;
break
;
}
}
return
hasUnusedDependency
;
}
public
static
void
streamCheck
(
CityGmlZipArchive
archive
,
String
xmlDirectory
,
String
pdfDirectory
,
ValidationConfiguration
config
,
String
outputDirectory
)
throws
IOException
,
CityGmlParseException
{
streamCheck
(
archive
,
xmlDirectory
,
pdfDirectory
,
config
,
null
,
outputDirectory
);
}
public
static
void
streamCheck
(
CityGmlZipArchive
archive
,
String
xmlDirectory
,
String
pdfDirectory
,
ValidationConfiguration
config
,
FeatureCheckedListener
l
,
String
outputDirectory
)
throws
IOException
,
CityGmlParseException
{
for
(
CityGmlZipEntry
entry
:
archive
.
getEntries
())
{
String
entryName
=
FilenameUtils
.
removeExtension
(
entry
.
getDisplayName
());
String
xmlOutput
=
null
;
String
pdfOutput
=
null
;
String
outputFile
=
null
;
if
(
xmlDirectory
!=
null
)
{
xmlOutput
=
Path
.
of
(
xmlDirectory
).
resolve
(
entryName
+
"_report.xml"
).
toString
();
}
if
(
pdfDirectory
!=
null
)
{
pdfOutput
=
Path
.
of
(
pdfDirectory
).
resolve
(
entryName
+
"_report.pdf"
).
toString
();
}
if
(
outputDirectory
!=
null
)
{
outputFile
=
Path
.
of
(
outputDirectory
).
resolve
(
entryName
+
"_validated.gml"
).
toString
();
}
streamCheck
(
entry
,
xmlOutput
,
pdfOutput
,
config
,
l
,
outputFile
);
}
if
(
outputDirectory
!=
null
)
{
ArchivePacker
.
packAndDeleteDirectory
(
outputDirectory
);
}
}
public
static
void
streamCheck
(
CityGmlZipEntry
entry
,
String
xmlOutput
,
String
pdfOutput
,
ValidationConfiguration
config
,
String
outputFile
)
throws
IOException
,
CityGmlParseException
{
streamCheck
(
entry
,
xmlOutput
,
pdfOutput
,
config
,
null
,
outputFile
);
}
public
static
void
streamCheck
(
CityGmlZipEntry
entry
,
String
xmlOutput
,
String
pdfOutput
,
ValidationConfiguration
config
,
FeatureCheckedListener
l
,
String
outputFile
)
throws
IOException
,
CityGmlParseException
{
try
(
BufferedOutputStream
xmlBos
=
getXmlOutputMaybe
(
xmlOutput
);
BufferedOutputStream
pdfBos
=
getPdfOutputMaybe
(
pdfOutput
))
{
Checker
c
=
new
Checker
(
config
,
null
);
String
fileName
=
entry
.
getEntrySubPath
();
// create reporter if available
XmlStreamReporter
xmlReporter
=
getXmlReporter
(
config
,
xmlBos
,
fileName
);
PdfStreamReporter
pdfReporter
=
getPdfReporter
(
config
,
pdfBos
,
fileName
);
// execute schematron first
try
(
CityGmlZipEntryFile
entryFile
=
new
CityGmlZipEntryFile
(
entry
))
{
SvrlContentHandler
handler
=
executeSchematronValidationIfAvailable
(
config
,
entryFile
.
getInputStream
());
CityGmlConsumer
con
=
new
StreamCityGmlConsumer
(
c
,
xmlReporter
,
pdfReporter
,
handler
,
config
,
l
);
// parse and validate
CityGmlParser
.
streamCityGml
(
entry
,
config
.
getParserConfiguration
(),
con
,
outputFile
);
// write reports if available
writeReport
(
xmlReporter
);
writeReport
(
pdfReporter
);
}
}
catch
(
CheckReportWriteException
e
)
{
logger
.
error
(
Localization
.
getText
(
"Checker.failReports"
),
e
);
}
}
public
static
void
streamCheck
(
File
inputFile
,
String
xmlOutput
,
String
pdfOutput
,
ValidationConfiguration
config
,
String
outputFile
)
throws
IOException
,
CityGmlParseException
{
streamCheck
(
inputFile
,
xmlOutput
,
pdfOutput
,
config
,
null
,
outputFile
);
}
public
static
void
streamCheck
(
File
inputFile
,
String
xmlOutput
,
String
pdfOutput
,
ValidationConfiguration
config
,
FeatureCheckedListener
l
,
String
outputFile
)
throws
IOException
,
CityGmlParseException
{
try
(
BufferedOutputStream
xmlBos
=
getXmlOutputMaybe
(
xmlOutput
);
BufferedOutputStream
pdfBos
=
getPdfOutputMaybe
(
pdfOutput
))
{
Checker
c
=
new
Checker
(
config
,
null
);
String
fileName
=
inputFile
.
getName
();
// create reporter if available
XmlStreamReporter
xmlReporter
=
getXmlReporter
(
config
,
xmlBos
,
fileName
);
PdfStreamReporter
pdfReporter
=
getPdfReporter
(
config
,
pdfBos
,
fileName
);
// execute schematron first
SvrlContentHandler
handler
=
executeSchematronValidationIfAvailable
(
config
,
inputFile
);
CityGmlConsumer
con
=
new
StreamCityGmlConsumer
(
c
,
xmlReporter
,
pdfReporter
,
handler
,
config
,
l
);
// parse and validate
CityGmlParser
.
streamCityGml
(
inputFile
.
getAbsolutePath
(),
config
.
getParserConfiguration
(),
con
,
outputFile
);
// write reports if available
writeReport
(
xmlReporter
);
writeReport
(
pdfReporter
);
}
catch
(
CheckReportWriteException
e
)
{
logger
.
error
(
Localization
.
getText
(
"Checker.failReports"
),
e
);
}
}
private
static
XmlStreamReporter
getXmlReporter
(
ValidationConfiguration
config
,
BufferedOutputStream
xmlBos
,
String
fileName
)
{
XmlStreamReporter
xmlReporter
;
if
(
xmlBos
!=
null
)
{
xmlReporter
=
new
XmlStreamReporter
(
xmlBos
,
fileName
,
config
);
}
else
{
xmlReporter
=
null
;
}
return
xmlReporter
;
}
private
static
PdfStreamReporter
getPdfReporter
(
ValidationConfiguration
config
,
BufferedOutputStream
pdfBos
,
String
fileName
)
{
PdfStreamReporter
pdfReporter
;
if
(
pdfBos
!=
null
)
{
pdfReporter
=
new
PdfStreamReporter
(
pdfBos
,
fileName
,
config
);
}
else
{
pdfReporter
=
null
;
}
return
pdfReporter
;
}
public
static
void
writeReport
(
StreamReporter
reporter
)
throws
CheckReportWriteException
{
if
(
reporter
!=
null
)
{
reporter
.
finishReport
();
}
}
public
static
BufferedOutputStream
getPdfOutputMaybe
(
String
pdfOutput
)
throws
FileNotFoundException
{
return
pdfOutput
!=
null
?
new
BufferedOutputStream
(
new
FileOutputStream
(
pdfOutput
))
:
null
;
}
public
static
BufferedOutputStream
getXmlOutputMaybe
(
String
xmlOutput
)
throws
FileNotFoundException
{
return
xmlOutput
!=
null
?
new
BufferedOutputStream
(
new
FileOutputStream
(
xmlOutput
))
:
null
;
}
/**
* Checks the city object and writes report information into reporters. Clears
* old check results. If the city object would be filtered by the configured
* filters it is ignored and old check results are not cleared.
*
* @param xmlReporter a xml reporter
* @param pdfReporter a pdf reporter
* @param co the city object to be checked
*/
public
void
checkFeature
(
XmlStreamReporter
xmlReporter
,
PdfStreamReporter
pdfReporter
,
CityObject
co
)
{
if
(
logger
.
isDebugEnabled
())
{
logger
.
debug
(
Localization
.
getText
(
"Checker.checkFeature"
),
co
);
}
executeChecksForCityObject
(
co
);
if
(
xmlReporter
!=
null
)
{
xmlReporter
.
report
(
co
);
}
if
(
pdfReporter
!=
null
)
{
pdfReporter
.
report
(
co
);
}
}
}
CityDoctorParent/CityDoctorValidation/src/main/java/de/hft/stuttgart/citydoctor2/check/StreamCityGmlConsumer.java
View file @
2d57794b
...
...
@@ -29,6 +29,9 @@ import java.util.Set;
import
java.util.UUID
;
import
java.util.concurrent.atomic.AtomicInteger
;
import
de.hft.stuttgart.citydoctor2.datastructure.AbstractTunnel
;
import
de.hft.stuttgart.citydoctor2.datastructure.CityFurniture
;
import
de.hft.stuttgart.citydoctor2.datastructure.GenericCityObject
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.citygml4j.core.model.core.AbstractFeatureProperty
;
...
...
@@ -139,8 +142,12 @@ public class StreamCityGmlConsumer implements CityGmlConsumer {
pdfReporter
.
report
(
co
);
}
// store quality ade datastructures in cityobject
QualityADEUtils
.
writeQualityAde
(
co
,
val
);
// TODO: Update QualityADE to be compatible with CityGML 3.0 or deprecate it, unhandled top-level feature types are just skipped for now
if
(!(
co
instanceof
AbstractTunnel
||
co
instanceof
CityFurniture
||
co
instanceof
GenericCityObject
))
{
// store quality ade datastructures in cityobject
QualityADEUtils
.
writeQualityAde
(
co
,
val
);
}
// recreate geometry
co
.
reCreateGeometries
(
gmlFactory
,
config
.
getParserConfiguration
());
...
...
Prev
1
2
3
4
5
6
7
8
9
…
13
Next