Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Eric Duminil
RegionChooser
Commits
3a9b7c9d
Commit
3a9b7c9d
authored
Sep 29, 2022
by
Eric Duminil
Browse files
Small refactor.
parent
b6fe0254
Changes
4
Hide whitespace changes
Inline
Side-by-side
src/main/java/eu/simstadt/regionchooser/RegionChooserBrowser.java
View file @
3a9b7c9d
...
...
@@ -71,8 +71,8 @@ public Void call() throws IOException {
public
void
downloadRegionFromCityGML
(
String
wktPolygon
,
String
project
,
String
citygml
,
String
srsName
)
throws
IOException
,
ParseException
,
XPathParseException
,
NavException
,
XPathEvalException
{
StringBuilder
sb
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
citygmlPath
(
project
,
citygml
),
wktPolygon
,
srsName
);
StringBuilder
sb
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
wktPolygon
,
srsName
,
citygmlPath
(
project
,
citygml
)
);
File
buildingIdsFile
=
selectSaveFileWithDialog
(
project
,
citygml
,
"selected_region"
);
if
(
buildingIdsFile
!=
null
)
{
...
...
src/main/java/eu/simstadt/regionchooser/RegionExtractor.java
View file @
3a9b7c9d
...
...
@@ -31,11 +31,11 @@
* same coordinate system as the CityGML), it iterates over each Building and checks if the building is inside the
* geometry. It only works with CityGML files smaller than 2GB. It uses VTD-XML parser instead of a whole
* Simstadt/Citydoctor/Citygml model.
*
*
* @param citygmlPath
* @param wktPolygon
* @param citygmlPath
* @param string
*
*
* @return a StringBuffer, full with the extracted Citygml, including header, buildings and footer.
* @throws ParseException
* @throws IOException
...
...
@@ -44,9 +44,9 @@
* @throws XPathParseException
* @throws NumberFormatException
*/
static
StringBuilder
selectRegionDirectlyFromCityGML
(
Path
citygmlPath
,
String
wktPolygon
,
String
srsName
)
throws
ParseException
,
XPathParseException
,
NavException
,
X
Path
EvalException
,
IOException
{
//TODO: Try with multiple paths
static
StringBuilder
selectRegionDirectlyFromCityGML
(
String
wktPolygon
,
String
srsName
,
Path
citygmlPath
)
throws
ParseException
,
XPathParseException
,
NavException
,
IOException
{
int
buildingsCount
=
0
;
int
foundBuildingsCount
=
0
;
...
...
src/test/java/eu/simstadt/regionchooser/RegionExtractorTests.java
View file @
3a9b7c9d
...
...
@@ -35,7 +35,7 @@ public void testExtract3BuildingsFromGSK3Model() throws Throwable {
//NOTE: Small region around Martinskirche in Grünbühl
String
wktPolygon
=
"POLYGON((3515848.896028535 5415823.108586172,3515848.9512289143 5415803.590347393,3515829.0815150724 5415803.338023346,3515830.9784850604 5415793.437034622,3515842.0946056456 5415793.272282251,3515843.3515515197 5415766.204935087,3515864.1064344468 5415766.557899496,3515876.489172751 5415805.433782301,3515876.343844858 5415822.009293416,3515848.896028535 5415823.108586172))"
;
Path
citygmlPath
=
TEST_REPOSITORY
.
resolve
(
"Gruenbuehl.proj/20140218_Gruenbuehl_LOD2.gml"
);
String
churchGMLString
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
citygmlPath
,
wktPolygon
,
"EPSG:31467"
)
String
churchGMLString
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
wktPolygon
,
"EPSG:31467"
,
citygmlPath
)
.
toString
();
assertEquals
(
3
,
countRegexMatches
(
churchGMLString
,
CITY_OBJECT_MEMBER_REGEX
));
assertTrue
(
churchGMLString
.
contains
(
"Donaustr"
));
...
...
@@ -57,7 +57,7 @@ public void testExtractBuildingsWithoutCommentsInBetween() throws Throwable {
//NOTE: Small region around WashingtonSquare
String
wktPolygon
=
"POLYGON((300259.78663489706 62835.835907766595,300230.33294975647 62792.0482567884,300213.5667431851 62770.83143720031,300183.6592861123 62730.20347659383,300252.9947486632 62676.938468840905,300273.3862256562 62701.767105345614,300257.5250407747 62715.760413539596,300308.2754543957 62805.14198211394,300259.78663489706 62835.835907766595))"
;
Path
citygmlPath
=
TEST_REPOSITORY
.
resolve
(
"NewYork.proj/ManhattanSmall.gml"
);
String
archGMLString
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
citygmlPath
,
wktPolygon
,
EPSG_32118
)
String
archGMLString
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
wktPolygon
,
EPSG_32118
,
citygmlPath
)
.
toString
();
assertEquals
(
countRegexMatches
(
archGMLString
,
CITY_OBJECT_MEMBER_REGEX
),
2
);
assertTrue
(
archGMLString
.
contains
(
"WASHINGTON SQUARE"
));
...
...
@@ -76,7 +76,7 @@ public void testExtractBuildingsAndChangeEnvelope() throws Throwable {
String
wktPolygon
=
"POLYGON((299761.8123557725 61122.68126771413,299721.46983062755 61058.11626595352,299780.84627343423 61021.99295737501,299823.9079725632 61083.3979344517,299761.8123557725 61122.68126771413))"
;
Path
citygmlPath
=
TEST_REPOSITORY
.
resolve
(
"NewYork.proj/FamilyCourt_LOD2_with_PLUTO_attributes.gml"
);
String
familyCourtBuilding
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
citygmlPath
,
wktPolygon
,
EPSG_32118
).
toString
();
.
selectRegionDirectlyFromCityGML
(
wktPolygon
,
EPSG_32118
,
citygmlPath
).
toString
();
assertEquals
(
1
,
countRegexMatches
(
familyCourtBuilding
,
CITY_OBJECT_MEMBER_REGEX
));
assertTrue
(
familyCourtBuilding
.
contains
(
"Bldg_12210021066"
));
assertFalse
(
...
...
@@ -100,7 +100,7 @@ public void testExtract0BuildingsWithWrongCoordinates() throws Throwable {
//NOTE: Small region, far away from NYC
String
wktPolygon
=
"POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))"
;
Path
citygmlPath
=
TEST_REPOSITORY
.
resolve
(
"NewYork.proj/ManhattanSmall.gml"
);
String
emptyGMLString
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
citygmlPath
,
wktPolygon
,
EPSG_32118
)
String
emptyGMLString
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
wktPolygon
,
EPSG_32118
,
citygmlPath
)
.
toString
();
assertEquals
(
0
,
countRegexMatches
(
emptyGMLString
,
CITY_OBJECT_MEMBER_REGEX
));
assertTrue
(
emptyGMLString
.
contains
(
CITY_MODEL_HEADER
));
...
...
@@ -112,7 +112,7 @@ public void testExtract0BuildingsFromEmptyGML() throws Throwable {
//NOTE: Small region, with too many spaces between coordinates
String
wktPolygon
=
"POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))"
;
Path
citygmlPath
=
TEST_REPOSITORY
.
resolve
(
"NewYork.proj/empty_model.gml"
);
String
emptyGMLString
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
citygmlPath
,
wktPolygon
,
EPSG_32118
)
String
emptyGMLString
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
wktPolygon
,
EPSG_32118
,
citygmlPath
)
.
toString
();
assertEquals
(
0
,
countRegexMatches
(
emptyGMLString
,
CITY_OBJECT_MEMBER_REGEX
));
assertTrue
(
emptyGMLString
.
contains
(
CORE_CITY_MODEL_HEADER
));
...
...
@@ -124,7 +124,7 @@ public void testExtract0BuildingsFromWeirdGML() throws Throwable {
//NOTE: Small region, with too many spaces between coordinates
String
wktPolygon
=
"POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))"
;
Path
citygmlPath
=
TEST_REPOSITORY
.
resolve
(
"NewYork.proj/broken_nyc_lod2.gml"
);
String
emptyGMLString
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
citygmlPath
,
wktPolygon
,
EPSG_32118
)
String
emptyGMLString
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
wktPolygon
,
EPSG_32118
,
citygmlPath
)
.
toString
();
assertEquals
(
0
,
countRegexMatches
(
emptyGMLString
,
CITY_OBJECT_MEMBER_REGEX
));
assertTrue
(
emptyGMLString
.
contains
(
CORE_CITY_MODEL_HEADER
));
...
...
@@ -135,7 +135,7 @@ public void testExtract0BuildingsFromWeirdGML() throws Throwable {
public
void
testExtractBuildingsFromCitygmlWithoutZinEnvelope
()
throws
Throwable
{
String
wktPolygon
=
"POLYGON((3512683.1280912133 5404783.732132129,3512719.1608604863 5404714.627650777,3512831.40076119 5404768.344155442,3512790.239106708 5404838.614891164,3512683.1280912133 5404783.732132129))"
;
Path
citygmlPath
=
TEST_REPOSITORY
.
resolve
(
"Stuttgart.proj/Stuttgart_LOD0_LOD1_small.gml"
);
String
emptyGMLString
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
citygmlPath
,
wktPolygon
,
"EPSG:31463"
)
String
emptyGMLString
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
wktPolygon
,
"EPSG:31463"
,
citygmlPath
)
.
toString
();
assertEquals
(
2
,
countRegexMatches
(
emptyGMLString
,
"<bldg:Building gml:id"
));
}
...
...
src/test/java/eu/simstadt/regionchooser/RegionExtractorWithDifferentInputTests.java
View file @
3a9b7c9d
...
...
@@ -34,7 +34,7 @@ public void testExtractRegionWithLocalCRS()
Path
citygmlPath
=
project
.
resolve
(
citygml
);
CoordinateReferenceSystem
localCRS
=
RegionChooserUtils
.
crsFromCityGMLHeader
(
citygmlPath
);
StringBuilder
sb
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
citygmlPath
,
wktPolygon
,
localCRS
.
getName
());
StringBuilder
sb
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
wktPolygon
,
localCRS
.
getName
()
,
citygmlPath
);
assertTrue
(
sb
.
toString
().
contains
(
"gml_ZVHMQQ6BZGRT0O3Q6RGXF12BDOV49QIZ58XB"
),
"One weird shaped roof should be inside the region"
);
}
...
...
@@ -53,8 +53,8 @@ public void testExtractRegionWithWGS84()
CoordinateReferenceSystem
localCRS
=
RegionChooserUtils
.
crsFromCityGMLHeader
(
citygmlPath
);
String
localWktPolygon
=
WKT_WRITER
.
write
(
RegionChooserUtils
.
changePolygonCRS
(
wgs84Polygon
,
RegionChooserUtils
.
WGS84
,
localCRS
));
StringBuilder
sb
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
citygmlPath
,
localWktPolygon
,
localCRS
.
getName
()
);
StringBuilder
sb
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
localWktPolygon
,
localCRS
.
getName
(),
citygmlPath
);
assertTrue
(
sb
.
toString
().
contains
(
"gml_ZVHMQQ6BZGRT0O3Q6RGXF12BDOV49QIZ58XB"
),
"One weird shaped roof should be inside the region"
);
}
...
...
@@ -102,8 +102,8 @@ public void testExtractRegionWithOldCoordinates()
CoordinateReferenceSystem
localCRS
=
RegionChooserUtils
.
crsFromCityGMLHeader
(
citygmlPath
);
String
localWktPolygon
=
WKT_WRITER
.
write
(
RegionChooserUtils
.
changePolygonCRS
(
wgs84Polygon
,
RegionChooserUtils
.
WGS84
,
localCRS
));
StringBuilder
sb
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
citygmlPath
,
localWktPolygon
,
localCRS
.
getName
()
);
StringBuilder
sb
=
RegionExtractor
.
selectRegionDirectlyFromCityGML
(
localWktPolygon
,
localCRS
.
getName
(),
citygmlPath
);
assertTrue
(
sb
.
toString
().
contains
(
"gml_ZVHMQQ6BZGRT0O3Q6RGXF12BDOV49QIZ58XB"
),
"One weird shaped roof should be inside the region"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment