Commits (7)
......@@ -43,7 +43,7 @@ public class RegionChooserBrowser extends Region
public JavaScriptFXBridge() {
Preferences userPrefs = Preferences.userRoot().node("/eu/simstadt/desktop");
String repoString = userPrefs.get(PREF_RECENT_REPOSITORY, null);
repo = repoString == null? null : Paths.get(repoString);
repo = repoString == null ? null : Paths.get(repoString);
}
/**
......@@ -158,16 +158,15 @@ public void warning(String text) {
}
/*
* NOTE: Users sometime select some_region.proj/ as a repository.
* SimStadt won't show any project in this "repository", but RegionChooser shouldn't complain and
* still be able to extract regions.
* NOTE: Users sometime select some_region.proj/ as a repository. SimStadt won't show any project in this
* "repository", but RegionChooser shouldn't complain and still be able to extract regions.
*/
private boolean isRepoAProject(){
private boolean isRepoAProject() {
return repo.toString().endsWith(".proj");
}
private Path citygmlPath(String project, String citygml) {
if (isRepoAProject()){
if (isRepoAProject()) {
return repo.resolve(citygml);
} else {
return repo.resolve(project + ".proj").resolve(citygml);
......
......@@ -11,6 +11,7 @@
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.geom.Polygon;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import com.ximpleware.NavException;
......@@ -53,8 +54,8 @@ static int selectRegionDirectlyFromCityGML(String wktPolygon, String srsName, Wr
int cityObjectsCount = 0;
int foundBuildingsCount = 0;
int foundVegetationCount = 0;
Geometry poly = WKT_READER.read(wktPolygon);
int otherObjectsCount = 0;
Geometry selectionPolygon = WKT_READER.read(wktPolygon);
CityGmlIterator citygml = null;
for (int i = 0; i < citygmlPaths.length; i++) {
......@@ -64,17 +65,18 @@ static int selectRegionDirectlyFromCityGML(String wktPolygon, String srsName, Wr
citygml = new CityGmlIterator(citygmlPath);
for (CityObjectMember cityObjectNode : citygml) {
if (cityObjectsCount == 0) {
sb.append(replaceEnvelopeInHeader(citygml.getHeader(), poly.getEnvelopeInternal(), srsName));
sb.append(replaceEnvelopeInHeader(citygml.getHeader(), selectionPolygon.getEnvelopeInternal(), srsName));
}
cityObjectsCount += 1;
if (cityObjectNode.hasCoordinates()) {
Coordinate coord = new Coordinate(cityObjectNode.x, cityObjectNode.y);
Point point = GEOMETRY_FACTORY.createPoint(coord);
if (point.within(poly)) {
if (cityObjectNode.isBuilding()) {
boolean isBuilding = cityObjectNode.isBuilding();
boolean shouldBeIncluded = isBuilding ? isBuildingCenterInPolygon(cityObjectNode, selectionPolygon)
: isBoundingBoxTouching(cityObjectNode, selectionPolygon);
if (shouldBeIncluded) {
if (isBuilding) {
foundBuildingsCount++;
} else {
foundVegetationCount++;
otherObjectsCount++;
}
sb.append(cityObjectNode.toString());
}
......@@ -94,14 +96,39 @@ static int selectRegionDirectlyFromCityGML(String wktPolygon, String srsName, Wr
}
LOGGER.info("Buildings found in selected region : " + foundBuildingsCount);
if (foundVegetationCount > 0) {
LOGGER.info("Vegetation found in selected region : " + foundVegetationCount);
if (otherObjectsCount > 0) {
LOGGER.info("Other objects found in selected region : " + otherObjectsCount);
}
//NOTE: This could be a problem if header starts with <core:CityModel> and footer ends with </CityModel>
sb.append(citygml.getFooter());
return foundBuildingsCount;
}
/**
* Returns true if corners or center of bounding box of cityObjectNode are inside the polygon. Might select too much,
* which might be desirable for roads or landuse.
*/
private static boolean isBoundingBoxTouching(CityObjectMember cityObjectNode, Geometry polygon) {
Coordinate[] boundingBoxCoordinates = {
new Coordinate(cityObjectNode.xMax, cityObjectNode.yMax),
new Coordinate(cityObjectNode.xMin, cityObjectNode.yMax),
new Coordinate(cityObjectNode.xMin, cityObjectNode.yMin),
new Coordinate(cityObjectNode.xMax, cityObjectNode.yMin),
new Coordinate(cityObjectNode.xMax, cityObjectNode.yMax),
};
Polygon boundingBox = GEOMETRY_FACTORY.createPolygon(boundingBoxCoordinates);
return boundingBox.intersects(polygon);
}
private static boolean isBuildingCenterInPolygon(CityObjectMember cityObjectNode, Geometry polygon) {
return point(cityObjectNode.x, cityObjectNode.y).within(polygon);
}
private static Point point(Double x, Double y) {
Coordinate coord = new Coordinate(x, y);
return GEOMETRY_FACTORY.createPoint(coord);
}
/**
* Some Citygml files include an envelope (bounding box), defined at the very beginning of the file. If the extracted
* region comes from a huge file (e.g. from NYC), it might inherit this header with a huge envelope. Some methods
......
......@@ -14,7 +14,7 @@
public class CityObjectMember
{
static final String XPATH_PATTERN = "/CityModel/cityObjectMember[Building or SolitaryVegetationObject or PlantCover]";
static final String XPATH_PATTERN = "/CityModel/cityObjectMember[Building or SolitaryVegetationObject or PlantCover or LandUse or Road]";
private int nodeOffset;
private int nodeLength;
......
......@@ -166,7 +166,7 @@ void testExtractBuildingsFrom2Citygmls() throws Throwable {
}
@Test
void testExtractBuildingsAndTrees() throws Throwable {
void testExtractBuildingsAndTreesAndRoadsAndLandUses() throws Throwable {
String wktPolygon = "POLYGON((9.944100 49.802694, 9.944092 49.802490, 9.944975 49.802466, 9.944956 49.802689, 9.944100 49.802694))";
Path citygml = TEST_REPOSITORY.resolve("Others.proj/BuildingsAndTrees.gml");
CoordinateReferenceSystem crs = RegionChooserUtils.crsFromCityGMLHeader(citygml);
......@@ -178,7 +178,9 @@ void testExtractBuildingsAndTrees() throws Throwable {
assertEquals(4, count);
assertEquals(4, countRegexMatches(gmlWithSomeBuildingAndTrees, "<bldg:Building gml:id"));
assertEquals(1, countRegexMatches(gmlWithSomeBuildingAndTrees, "<veg:PlantCover gml:id"));
assertEquals(3, countRegexMatches(gmlWithSomeBuildingAndTrees, "<veg:SolitaryVegetationObject gml:id"));
assertEquals(5, countRegexMatches(gmlWithSomeBuildingAndTrees, "<tran:Road gml:id"));
assertEquals(1, countRegexMatches(gmlWithSomeBuildingAndTrees, "<luse:LandUse gml:id"));
assertEquals(7, countRegexMatches(gmlWithSomeBuildingAndTrees, "<veg:SolitaryVegetationObject gml:id"));
assertFalse(gmlWithSomeBuildingAndTrees.contains("DEBY_LOD2_605230"),
"Building in another corner should not be included");
......@@ -190,6 +192,8 @@ void testExtractBuildingsAndTrees() throws Throwable {
assertTrue(gmlWithSomeBuildingAndTrees.contains("DEBY_LOD2_605227"), "Building in corner should be included");
}
//TODO: Check Roads and LandUse too.
@Test
void testExtractBuildingsAndRemoveOld() throws Throwable {
String wktPolygon = "POLYGON((293229.6831819388 5623753.072371232,293681.22751166753 5623744.274551504,293668.8482257676 5623469.512992135,293197.09954629745 5623504.821467172,293229.6831819388 5623753.072371232))";
......
......@@ -4,8 +4,8 @@
<gml:boundedBy>
<gml:Envelope srsName="EPSG:25832" srsDimension="3">
<gml:lowerCorner>567936.6580971775 5517047.195527173 165.89</gml:lowerCorner>
<gml:upperCorner>568030.7615461947 5517126.859677341 315.68</gml:upperCorner>
<gml:lowerCorner>567935.512082407 5517048.029721002 165.89</gml:lowerCorner>
<gml:upperCorner>568029.4925210323 5517122.305503999 315.68</gml:upperCorner>
</gml:Envelope>
</gml:boundedBy>
<cityObjectMember>
......@@ -4080,6 +4080,139 @@
</gml:MultiSurface>
</veg:lod2MultiSurface>
</veg:PlantCover>
</cityObjectMember><cityObjectMember>
<tran:Road gml:id="2171bdf4-7c25-47c1-be09-e760b0f26c50">
<tran:lod1MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList>567562.94 5517252.7475521555 0.0 567577.25 5517253.61 0.0 567598.79 5517255.27 0.0 567604.85 5517255.81 0.0 567605.38 5517250.49 0.0 567612.71 5517251.18 0.0 567613.41 5517244.59 0.0 567635.53 5517239.76 0.0 567641.32 5517232.9 0.0 567646.24 5517225.46 0.0 567650.29 5517217.45 0.0 567653.66 5517209.11 0.0 567656.68 5517200.63 0.0 567659.45 5517192.11 0.0 567662.11 5517183.51 0.0 567664.64 5517174.84 0.0 567667.01 5517166.24 0.0 567669.25 5517157.47 0.0 567671.31 5517148.75 0.0 567673.18 5517139.63 0.0 567674.72 5517130.88 0.0 567675.2 5517131.03 0.0 567678.55 5517122.9 0.0 567682.69 5517077.87 0.0 567684.11 5517072.62 0.0 567685.68 5517067.99 0.0 567688.79 5517060.21 0.0 567691.45 5517054.75 0.0 567694.17 5517050.16 0.0 567697.53 5517045.18 0.0 567702.22 5517039.17 0.0 567705.51 5517035.47 0.0 567719.76 5517020.36 0.0 567733.64 5517007.08 0.0 567741.0 5517000.08 0.0 567748.81 5516993.91 0.0 567756.6 5516988.85 0.0 567766.13 5516983.99 0.0 567775.42 5516980.37 0.0 567784.99 5516977.32 0.0 567813.71 5516969.08 0.0 567842.47 5516960.42 0.0 567851.96 5516957.3 0.0 567861.5 5516954.08 0.0 567870.86 5516950.78 0.0 567887.76 5516944.63 0.0 567913.61 5516934.23 0.0 567913.97 5516934.49 0.0 567936.95 5516925.02 0.0 567947.02 5516921.24 0.0 567956.55 5516918.08 0.0 567964.29 5516915.94 0.0 567974.02 5516913.66 0.0 567982.89 5516911.86 0.0 567996.79 5516909.35 0.0 568031.39 5516903.33 0.0 568054.19 5516900.09 0.0 568092.01 5516893.6 0.0 568132.11 5516885.78 0.0 568143.74 5516885.36 0.0 568146.06 5516884.47 0.0 568148.48 5516883.7 0.0 568150.91 5516883.05 0.0 568153.31 5516882.5 0.0 568155.72 5516882.06 0.0 568158.74 5516881.72 0.0 568161.74 5516881.53 0.0 568164.72 5516881.47 0.0 568167.66 5516881.48 0.0 568170.71 5516881.71 0.0 568175.62 5516882.34 0.0 568180.55 5516883.16 0.0 568186.41 5516884.38 0.0 568210.83 5516889.82 0.0 568215.01 5516890.81 0.0 568221.04 5516892.28 0.0 568222.65 5516889.87 0.0 568223.74 5516887.5 0.0 568224.47 5516885.27 0.0 568221.2 5516855.85 0.0 568229.59 5516852.64 0.0 568259.78 5516839.6 0.0 568289.18 5516823.56 0.0 568317.79 5516805.1 0.0 568340.3 5516787.65 0.0 568348.13 5516776.04 0.0 568356.45 5516768.2 0.0 568337.26 5516750.31 0.0 568312.87 5516771.55 0.0 568282.67 5516792.02 0.0 568249.7 5516810.28 0.0 568229.2 5516819.88 0.0 568212.06 5516827.09 0.0 568179.4 5516837.99 0.0 568173.15 5516835.95 0.0 568120.52 5516848.97 0.0 568116.19 5516850.05 0.0 567961.72 5516881.35 0.0 567904.43 5516892.96 0.0 567878.44 5516898.23 0.0 567837.44 5516906.53 0.0 567785.21 5516918.47 0.0 567732.68 5516930.98 0.0 567670.14 5516945.87 0.0 567582.53 5516963.34 0.0 567562.94 5516967.248032648 0.0 567562.94 5517252.7475521555 0.0</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</tran:lod1MultiSurface>
</tran:Road>
</cityObjectMember><cityObjectMember>
<tran:Road gml:id="98a996b2-5783-4f7e-9a36-dfbefdc0bbaf">
<tran:lod1MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList>567917.55 5517000.03 0.0 567919.91 5517004.68 0.0 567924.58 5517014.7 0.0 567927.01 5517020.03 0.0 567930.74 5517028.53 0.0 567931.28 5517029.95 0.0 567932.2 5517032.69 0.0 567932.73 5517034.56 0.0 567933.35 5517037.53 0.0 567933.7 5517039.79 0.0 567933.84 5517042.03 0.0 567933.57 5517049.48 0.0 567933.34 5517056.94 0.0 567933.09 5517062.47 0.0 567932.78 5517069.28 0.0 567932.19 5517083.03 0.0 567931.8 5517091.62 0.0 567931.56 5517097.31 0.0 567931.15 5517105.56 0.0 567934.29 5517105.5 0.0 567934.46 5517100.47 0.0 567934.61 5517096.48 0.0 567935.21 5517083.72 0.0 567935.66 5517072.75 0.0 567936.55 5517051.92 0.0 567936.82 5517045.65 0.0 567936.93 5517042.26 0.0 567936.94 5517037.24 0.0 567936.91 5517035.25 0.0 567935.89 5517026.97 0.0 567935.49 5517025.25 0.0 567935.08 5517024.08 0.0 567931.96 5517017.14 0.0 567927.95 5517008.5 0.0 567925.85 5517003.95 0.0 567925.39 5517003.28 0.0 567924.54 5517002.0 0.0 567922.87 5516997.96 0.0 567917.55 5517000.03 0.0</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</tran:lod1MultiSurface>
</tran:Road>
</cityObjectMember><cityObjectMember>
<tran:Road gml:id="e334119f-233c-4702-9bbc-9bda885f765b">
<tran:lod1MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList>567951.73 5517045.75 0.0 567952.6 5517046.95 0.0 567953.59 5517048.05 0.0 567954.68 5517049.04 0.0 567955.86 5517049.93 0.0 567956.66 5517050.2 0.0 567957.69 5517050.35 0.0 567959.73 5517050.4 0.0 567965.73 5517049.91 0.0 567972.75 5517049.21 0.0 567983.7 5517048.2 0.0 567990.7 5517047.66 0.0 567995.66 5517047.27 0.0 568000.68 5517046.89 0.0 568005.34 5517046.56 0.0 568016.65 5517045.7 0.0 568018.64 5517045.43 0.0 568020.62 5517045.08 0.0 568025.14 5517044.81 0.0 568025.06 5517041.43 0.0 568024.44 5517041.81 0.0 568023.19 5517042.22 0.0 568021.71 5517042.3 0.0 568020.7 5517042.4 0.0 568014.99 5517042.8 0.0 568013.99 5517042.91 0.0 568013.03 5517043.1 0.0 568012.04 5517043.21 0.0 568002.02 5517043.97 0.0 567994.36 5517044.52 0.0 567973.89 5517046.22 0.0 567966.13 5517046.84 0.0 567962.92 5517047.07 0.0 567958.9 5517047.15 0.0 567955.82 5517046.97 0.0 567954.82 5517046.77 0.0 567953.39 5517046.25 0.0 567952.55 5517045.68 0.0 567951.73 5517045.75 0.0</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</tran:lod1MultiSurface>
</tran:Road>
</cityObjectMember><cityObjectMember>
<tran:Road gml:id="b7d19214-000f-4c45-9b6a-866c66532cde">
<tran:lod1MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList>567690.72 5517140.08 0.0 567694.57 5517136.53 0.0 567712.37 5517136.07 0.0 567733.32 5517135.56 0.0 567752.32 5517135.1 0.0 567771.38 5517134.66 0.0 567788.06 5517134.24 0.0 567801.19 5517133.93 0.0 567819.06 5517133.11 0.0 567834.06 5517132.69 0.0 567847.77 5517132.31 0.0 567860.54 5517131.97 0.0 567862.54 5517131.9 0.0 567873.63 5517131.56 0.0 567885.57 5517131.24 0.0 567902.38 5517130.79 0.0 567923.02 5517130.19 0.0 567940.31 5517133.08 0.0 567949.57 5517132.99 0.0 567968.44 5517132.02 0.0 567988.45 5517131.6 0.0 567991.18 5517131.52 0.0 568000.01 5517131.33 0.0 568009.28 5517131.06 0.0 568025.07 5517130.6 0.0 568040.55 5517128.42 0.0 568047.49 5517127.12 0.0 568064.01 5517123.99 0.0 568081.25 5517120.76 0.0 568103.96 5517116.93 0.0 568112.76 5517115.47 0.0 568123.82 5517113.5 0.0 568145.97 5517113.39 0.0 568145.93 5517109.48 0.0 568212.69 5517097.42 0.0 568213.65 5517102.74 0.0 568222.01 5517101.23 0.0 568223.56 5517102.53 0.0 568228.97 5517102.49 0.0 568228.85 5517094.47 0.0 568228.54 5517093.0 0.0 568226.12 5517093.11 0.0 568212.38 5517095.46 0.0 568180.47 5517101.18 0.0 568178.74 5517101.67 0.0 568138.75 5517108.78 0.0 568112.81 5517113.39 0.0 568084.37 5517118.46 0.0 568058.37 5517123.1 0.0 568040.68 5517126.19 0.0 568041.46 5517123.12 0.0 568047.54 5517121.95 0.0 568081.06 5517116.03 0.0 568112.25 5517110.46 0.0 568138.13 5517105.86 0.0 568145.7 5517104.46 0.0 568177.16 5517098.85 0.0 568211.71 5517092.69 0.0 568225.54 5517090.24 0.0 568227.88 5517089.85 0.0 568226.44 5517083.04 0.0 568220.79 5517084.04 0.0 568220.77 5517083.94 0.0 568213.43 5517085.28 0.0 568202.42 5517087.24 0.0 568202.43 5517087.33 0.0 568192.77 5517089.09 0.0 568185.01 5517090.5 0.0 568184.98 5517090.35 0.0 568176.04 5517091.95 0.0 568167.14 5517093.56 0.0 568167.16 5517093.71 0.0 568157.04 5517095.49 0.0 568120.85 5517101.85 0.0 568119.86 5517102.02 0.0 568100.7 5517105.4 0.0 568087.45 5517107.75 0.0 568075.06 5517109.96 0.0 568063.35 5517112.05 0.0 568053.78 5517113.75 0.0 568038.37 5517114.07 0.0 568029.39 5517116.11 0.0 568026.56 5517116.18 0.0 567981.96 5517117.2 0.0 567979.01 5517117.26 0.0 567966.14 5517117.42 0.0 567955.2 5517117.71 0.0 567942.22 5517118.07 0.0 567928.32 5517118.28 0.0 567903.79 5517118.9 0.0 567900.76 5517119.04 0.0 567883.52 5517119.57 0.0 567881.25 5517119.71 0.0 567880.32 5517119.74 0.0 567866.28 5517120.05 0.0 567863.84 5517120.12 0.0 567846.94 5517120.59 0.0 567844.84 5517120.65 0.0 567842.07 5517120.73 0.0 567823.29 5517121.26 0.0 567823.3 5517121.36 0.0 567819.12 5517121.46 0.0 567803.18 5517121.95 0.0 567790.66 5517122.29 0.0 567764.46 5517123.0 0.0 567764.2 5517123.04 0.0 567694.65 5517124.87 0.0 567690.72 5517140.08 0.0</gml:posList>
</gml:LinearRing>
</gml:exterior>
<gml:interior>
<gml:LinearRing>
<gml:posList>567954.09 5517128.47 0.0 567955.81 5517127.36 0.0 567956.77 5517127.3 0.0 567973.79 5517126.89 0.0 567998.91 5517126.31 0.0 568016.94 5517125.74 0.0 568022.97 5517125.36 0.0 568026.66 5517128.16 0.0 568021.11 5517128.56 0.0 568012.48 5517128.97 0.0 567991.95 5517129.48 0.0 567978.06 5517129.82 0.0 567963.5 5517130.17 0.0 567954.48 5517130.9 0.0 567954.09 5517128.47 0.0</gml:posList>
</gml:LinearRing>
</gml:interior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</tran:lod1MultiSurface>
</tran:Road>
</cityObjectMember><cityObjectMember>
<tran:Road gml:id="3652c878-ab97-48a2-bf35-14d5a53c0893">
<tran:lod1MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList>567942.27 5517059.63 0.0 567944.17 5517057.77 0.0 567947.95 5517057.49 0.0 567947.97 5517057.59 0.0 567953.38 5517057.19 0.0 567961.04 5517056.63 0.0 567961.03 5517056.53 0.0 567965.28 5517056.22 0.0 567965.55 5517070.45 0.0 567965.6 5517072.76 0.0 567965.71 5517072.75 0.0 567965.78 5517077.74 0.0 567965.63 5517077.74 0.0 567965.71 5517083.46 0.0 567965.8 5517089.64 0.0 567965.95 5517089.63 0.0 567966.05 5517096.91 0.0 567966.11 5517105.22 0.0 567965.96 5517105.23 0.0 567966.14 5517117.42 0.0 567979.01 5517117.26 0.0 567981.96 5517117.2 0.0 567981.11 5517116.97 0.0 567980.29 5517116.68 0.0 567979.5 5517116.31 0.0 567979.01 5517115.88 0.0 567978.6 5517115.38 0.0 567978.27 5517114.83 0.0 567977.99 5517114.1 0.0 567977.85 5517113.33 0.0 567977.69 5517096.0 0.0 567977.42 5517077.58 0.0 567977.25 5517065.85 0.0 567978.85 5517063.69 0.0 567981.67 5517061.75 0.0 568019.44 5517058.99 0.0 568023.0 5517059.99 0.0 568025.55 5517062.41 0.0 568025.29 5517051.93 0.0 568025.14 5517044.81 0.0 568020.62 5517045.08 0.0 568018.64 5517045.43 0.0 568016.65 5517045.7 0.0 568005.34 5517046.56 0.0 568000.68 5517046.89 0.0 567995.66 5517047.27 0.0 567990.7 5517047.66 0.0 567983.7 5517048.2 0.0 567972.75 5517049.21 0.0 567965.73 5517049.91 0.0 567959.73 5517050.4 0.0 567957.69 5517050.35 0.0 567956.66 5517050.2 0.0 567955.86 5517049.93 0.0 567954.68 5517049.04 0.0 567953.59 5517048.05 0.0 567952.6 5517046.95 0.0 567951.73 5517045.75 0.0 567952.55 5517045.68 0.0 567953.39 5517046.25 0.0 567954.82 5517046.77 0.0 567955.82 5517046.97 0.0 567958.9 5517047.15 0.0 567962.92 5517047.07 0.0 567966.13 5517046.84 0.0 567973.89 5517046.22 0.0 567994.36 5517044.52 0.0 568002.02 5517043.97 0.0 568012.04 5517043.21 0.0 568013.03 5517043.1 0.0 568013.99 5517042.91 0.0 568014.99 5517042.8 0.0 568020.7 5517042.4 0.0 568021.71 5517042.3 0.0 568023.19 5517042.22 0.0 568024.44 5517041.81 0.0 568025.06 5517041.43 0.0 568025.03 5517040.45 0.0 568024.98 5517038.23 0.0 568022.87 5517040.58 0.0 568018.19 5517040.93 0.0 568018.18 5517040.83 0.0 567997.91 5517042.36 0.0 567994.75 5517042.58 0.0 567987.9 5517042.9 0.0 567982.42 5517043.29 0.0 567982.43 5517043.58 0.0 567981.23 5517043.66 0.0 567981.21 5517043.37 0.0 567979.12 5517043.54 0.0 567978.98 5517043.55 0.0 567978.99 5517043.51 0.0 567975.49 5517043.77 0.0 567975.51 5517044.01 0.0 567965.01 5517044.79 0.0 567954.93 5517045.47 0.0 567953.98 5517032.32 0.0 567947.44 5517032.71 0.0 567943.79 5517024.63 0.0 567942.96 5517043.73 0.0 567942.27 5517059.63 0.0</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</tran:lod1MultiSurface>
</tran:Road>
</cityObjectMember><cityObjectMember>
<tran:Road gml:id="9b46d77d-9ef0-4d21-b3be-a897b54e9552">
<tran:lod1MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList>567915.5 5517000.83 0.0 567925.05 5517021.93 0.0 567930.13 5517033.16 0.0 567930.62 5517034.84 0.0 567930.91 5517035.87 0.0 567931.84 5517035.91 0.0 567931.74 5517038.16 0.0 567931.14 5517050.99 0.0 567930.84 5517058.32 0.0 567930.89 5517058.32 0.0 567930.67 5517063.36 0.0 567930.58 5517065.83 0.0 567930.49 5517068.06 0.0 567929.99 5517080.4 0.0 567929.5 5517092.62 0.0 567929.32 5517095.07 0.0 567929.29 5517095.82 0.0 567928.32 5517118.28 0.0 567942.22 5517118.07 0.0 567939.94 5517115.73 0.0 567940.73 5517097.17 0.0 567941.0 5517090.08 0.0 567941.15 5517090.09 0.0 567941.37 5517084.34 0.0 567941.62 5517077.88 0.0 567941.47 5517077.87 0.0 567941.66 5517073.04 0.0 567941.87 5517070.58 0.0 567942.04 5517068.19 0.0 567942.24 5517063.44 0.0 567942.14 5517063.44 0.0 567942.27 5517059.63 0.0 567942.96 5517043.73 0.0 567943.79 5517024.63 0.0 567944.22 5517014.36 0.0 567945.45 5516989.15 0.0 567922.87 5516997.96 0.0 567924.54 5517002.0 0.0 567925.39 5517003.28 0.0 567925.85 5517003.95 0.0 567927.95 5517008.5 0.0 567931.96 5517017.14 0.0 567935.08 5517024.08 0.0 567935.49 5517025.25 0.0 567935.89 5517026.97 0.0 567936.91 5517035.25 0.0 567936.94 5517037.24 0.0 567936.93 5517042.26 0.0 567936.82 5517045.65 0.0 567936.55 5517051.92 0.0 567935.66 5517072.75 0.0 567935.21 5517083.72 0.0 567934.61 5517096.48 0.0 567934.46 5517100.47 0.0 567934.29 5517105.5 0.0 567931.15 5517105.56 0.0 567931.56 5517097.31 0.0 567931.8 5517091.62 0.0 567932.19 5517083.03 0.0 567932.78 5517069.28 0.0 567933.09 5517062.47 0.0 567933.34 5517056.94 0.0 567933.57 5517049.48 0.0 567933.84 5517042.03 0.0 567933.7 5517039.79 0.0 567933.35 5517037.53 0.0 567932.73 5517034.56 0.0 567932.2 5517032.69 0.0 567931.28 5517029.95 0.0 567930.74 5517028.53 0.0 567927.01 5517020.03 0.0 567924.58 5517014.7 0.0 567919.91 5517004.68 0.0 567917.55 5517000.03 0.0 567915.5 5517000.83 0.0</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</tran:lod1MultiSurface>
</tran:Road>
</cityObjectMember><cityObjectMember>
<tran:Road gml:id="29e7cc5b-7448-4d11-a680-05638b29c056">
<tran:lod1MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList>568020.27 5516961.31 0.0 568023.33 5516963.39 0.0 568023.46 5516968.98 0.0 568023.36 5516968.97 0.0 568023.55 5516977.27 0.0 568023.65 5516977.27 0.0 568023.78 5516982.83 0.0 568023.82 5516989.01 0.0 568023.81 5516989.42 0.0 568023.94 5516996.44 0.0 568023.84 5516996.44 0.0 568023.97 5517003.45 0.0 568024.07 5517003.46 0.0 568024.16 5517008.22 0.0 568024.25 5517013.05 0.0 568024.67 5517029.78 0.0 568024.77 5517033.54 0.0 568024.87 5517033.55 0.0 568024.98 5517038.23 0.0 568025.03 5517040.45 0.0 568025.06 5517041.43 0.0 568025.14 5517044.81 0.0 568025.29 5517051.93 0.0 568025.55 5517062.41 0.0 568025.77 5517074.07 0.0 568026.56 5517116.18 0.0 568029.39 5517116.11 0.0 568038.37 5517114.07 0.0 568038.03 5517097.76 0.0 568037.81 5517089.07 0.0 568038.11 5517089.06 0.0 568037.83 5517077.64 0.0 568037.53 5517077.65 0.0 568037.52 5517077.3 0.0 568037.29 5517068.08 0.0 568037.28 5517067.69 0.0 568037.58 5517067.68 0.0 568037.23 5517054.67 0.0 568037.14 5517051.45 0.0 568036.66 5517039.8 0.0 568036.55 5517036.91 0.0 568036.18 5517022.03 0.0 568035.62 5516999.38 0.0 568047.26 5516999.95 0.0 568050.83 5517000.08 0.0 568052.72 5517000.15 0.0 568060.82 5517000.62 0.0 568067.15 5517000.99 0.0 568066.94 5516999.32 0.0 568066.77 5516999.33 0.0 568066.48 5516996.65 0.0 568066.46 5516996.28 0.0 568061.18 5516996.37 0.0 568061.09 5516996.95 0.0 568051.83 5516996.76 0.0 568043.46 5516996.54 0.0 568035.55 5516996.44 0.0 568034.92 5516970.25 0.0 568034.68 5516959.49 0.0 568037.19 5516956.24 0.0 568020.27 5516961.31 0.0</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</tran:lod1MultiSurface>
</tran:Road>
</cityObjectMember><cityObjectMember>
<luse:LandUse gml:id="c962a7a1-d771-4d02-9731-383c660a06cd">
<luse:lod0MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList>567939.94 5517115.73 0.0 567942.22 5517118.07 0.0 567955.2 5517117.71 0.0 567966.14 5517117.42 0.0 567965.96 5517105.23 0.0 567966.11 5517105.22 0.0 567966.05 5517096.91 0.0 567965.95 5517089.63 0.0 567965.8 5517089.64 0.0 567965.71 5517083.46 0.0 567965.63 5517077.74 0.0 567965.78 5517077.74 0.0 567965.71 5517072.75 0.0 567965.6 5517072.76 0.0 567965.55 5517070.45 0.0 567965.28 5517056.22 0.0 567961.03 5517056.53 0.0 567961.04 5517056.63 0.0 567953.38 5517057.19 0.0 567947.97 5517057.59 0.0 567947.95 5517057.49 0.0 567944.17 5517057.77 0.0 567942.27 5517059.63 0.0 567942.14 5517063.44 0.0 567942.24 5517063.44 0.0 567942.04 5517068.19 0.0 567941.87 5517070.58 0.0 567941.66 5517073.04 0.0 567941.47 5517077.87 0.0 567941.62 5517077.88 0.0 567941.37 5517084.34 0.0 567941.15 5517090.09 0.0 567941.0 5517090.08 0.0 567940.73 5517097.17 0.0 567939.94 5517115.73 0.0</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</luse:lod0MultiSurface>
</luse:LandUse>
</cityObjectMember><cityObjectMember>
<veg:SolitaryVegetationObject gml:id="9801a0c9-d792-4b64-9ea1-76d829cc42ea">
<veg:species>Acer campestre</veg:species>
......