Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Eric Duminil
RegionChooser
Commits
b6fe0254
Commit
b6fe0254
authored
Sep 29, 2022
by
Eric Duminil
Browse files
Added SRS Name patterns.
parent
c611eca9
Changes
2
Show whitespace changes
Inline
Side-by-side
src/main/java/eu/simstadt/regionchooser/RegionChooserUtils.java
View file @
b6fe0254
...
@@ -22,6 +22,7 @@
...
@@ -22,6 +22,7 @@
public
static
final
CoordinateReferenceSystem
WGS84
=
CRS_FACTORY
.
createFromName
(
"EPSG:4326"
);
public
static
final
CoordinateReferenceSystem
WGS84
=
CRS_FACTORY
.
createFromName
(
"EPSG:4326"
);
private
static
final
Pattern
srsNamePattern
=
Pattern
.
compile
(
"(?i)(?<=srsName=[\"'])[^\"']+(?=[\"'])"
);
private
static
final
Pattern
srsNamePattern
=
Pattern
.
compile
(
"(?i)(?<=srsName=[\"'])[^\"']+(?=[\"'])"
);
private
static
final
int
CITYGML_HEADER_LENGTH
=
50
;
private
static
final
int
CITYGML_HEADER_LENGTH
=
50
;
private
static
final
String
EPSG
=
"EPSG:"
;
private
RegionChooserUtils
()
{
private
RegionChooserUtils
()
{
// only static use
// only static use
...
@@ -56,27 +57,27 @@ private static CoordinateReferenceSystem crsFromSrsName(String srsName) {
...
@@ -56,27 +57,27 @@ private static CoordinateReferenceSystem crsFromSrsName(String srsName) {
Pattern
pOGC
=
Pattern
.
compile
(
"urn:ogc:def:crs(?:,crs)?:EPSG:[\\d\\.]*:([\\d]+)\\D*"
);
Pattern
pOGC
=
Pattern
.
compile
(
"urn:ogc:def:crs(?:,crs)?:EPSG:[\\d\\.]*:([\\d]+)\\D*"
);
Matcher
mOGC
=
pOGC
.
matcher
(
srsName
);
Matcher
mOGC
=
pOGC
.
matcher
(
srsName
);
if
(
mOGC
.
find
())
{
if
(
mOGC
.
find
())
{
return
CRS_FACTORY
.
createFromName
(
"
EPSG
:"
+
mOGC
.
group
(
1
));
return
CRS_FACTORY
.
createFromName
(
EPSG
+
mOGC
.
group
(
1
));
}
}
// urn:adv:crs:DE_DHDN_3GK3*DE_DHHN92_NH
// urn:adv:crs:DE_DHDN_3GK3*DE_DHHN92_NH
// urn:adv:crs:ETRS89_UTM32*DE_DHHN92_NH
// urn:adv:crs:ETRS89_UTM32*DE_DHHN92_NH
Pattern
pURN
=
Pattern
.
compile
(
"urn:adv:crs:([^\\*]+)"
);
Pattern
pURN
=
Pattern
.
compile
(
"urn:adv:crs:([^\\*]+)"
);
Matcher
mURN
=
pURN
.
matcher
(
srsName
);
Matcher
mURN
=
pURN
.
matcher
(
srsName
);
//NOTE: Could use a HashMap if the switch/case becomes too long.
if
(
mURN
.
find
())
{
if
(
mURN
.
find
())
{
switch
(
mURN
.
group
(
1
))
{
String
shortSrsName
=
mURN
.
group
(
1
);
case
"DE_DHDN_3GK2"
:
return
CRS_FACTORY
.
createFromName
(
"EPSG:31466"
);
// Gauss Krueger:
case
"DE_DHDN_3GK3"
:
if
(
shortSrsName
.
startsWith
(
"DE_DHDN_3GK"
))
{
return
CRS_FACTORY
.
createFromName
(
"EPSG:31467"
);
int
gaussKruegerBaseEPSG
=
31464
;
case
"DE_DHDN_3GK4"
:
int
gaussKruegerId
=
Integer
.
parseInt
(
shortSrsName
.
substring
(
11
));
return
CRS_FACTORY
.
createFromName
(
"EPSG:31468"
);
return
CRS_FACTORY
.
createFromName
(
EPSG
+
(
gaussKruegerBaseEPSG
+
gaussKruegerId
));
case
"DE_DHDN_3GK5"
:
}
return
CRS_FACTORY
.
createFromName
(
"EPSG:31469"
);
case
"ETRS89_UTM32"
:
// UTM North:
return
CRS_FACTORY
.
createFromName
(
"EPSG:25832"
);
if
(
shortSrsName
.
startsWith
(
"ETRS89_UTM"
))
{
default
:
int
utmBaseEPSG
=
25800
;
// nothing found
int
utmId
=
Integer
.
parseInt
(
shortSrsName
.
substring
(
10
));
return
CRS_FACTORY
.
createFromName
(
EPSG
+
(
utmBaseEPSG
+
utmId
));
}
}
}
}
throw
new
IllegalArgumentException
(
"Unknown srsName format: "
+
srsName
);
throw
new
IllegalArgumentException
(
"Unknown srsName format: "
+
srsName
);
...
...
src/test/java/eu/simstadt/regionchooser/CRSfromCityGMLHeaderTests.java
View file @
b6fe0254
...
@@ -8,7 +8,7 @@
...
@@ -8,7 +8,7 @@
import
org.junit.jupiter.api.Test
;
import
org.junit.jupiter.api.Test
;
public
class
CRSfromCityGMLHeaderTests
class
CRSfromCityGMLHeaderTests
{
{
private
Path
repo
=
Paths
.
get
(
"src/test/resources/testdata"
);
private
Path
repo
=
Paths
.
get
(
"src/test/resources/testdata"
);
...
@@ -17,39 +17,39 @@ private void testExtractCSRNameFromHeader(Path citygmlPath, String crsName) thro
...
@@ -17,39 +17,39 @@ private void testExtractCSRNameFromHeader(Path citygmlPath, String crsName) thro
}
}
@Test
@Test
public
void
testExtractCRSFromStuttgart
()
throws
IOException
{
void
testExtractCRSFromStuttgart
()
throws
IOException
{
testExtractCSRNameFromHeader
(
repo
.
resolve
(
"Stuttgart.proj/Stuttgart_LOD0_LOD1_buildings_and_trees.gml"
),
testExtractCSRNameFromHeader
(
repo
.
resolve
(
"Stuttgart.proj/Stuttgart_LOD0_LOD1_buildings_and_trees.gml"
),
"EPSG:31463"
);
"EPSG:31463"
);
}
}
@Test
@Test
public
void
testExtractCRSFromGruenbuehl
()
throws
IOException
{
void
testExtractCRSFromGruenbuehl
()
throws
IOException
{
testExtractCSRNameFromHeader
(
repo
.
resolve
(
"Gruenbuehl.proj/20140218_Gruenbuehl_LOD2_1building.gml"
),
testExtractCSRNameFromHeader
(
repo
.
resolve
(
"Gruenbuehl.proj/20140218_Gruenbuehl_LOD2_1building.gml"
),
"EPSG:31467"
);
"EPSG:31467"
);
}
}
@Test
@Test
public
void
testExtractCRSFromMunich
()
throws
IOException
{
void
testExtractCRSFromMunich
()
throws
IOException
{
testExtractCSRNameFromHeader
(
repo
.
resolve
(
"Muenchen.proj/Munich_v_1_0_0.gml"
),
"EPSG:32632"
);
testExtractCSRNameFromHeader
(
repo
.
resolve
(
"Muenchen.proj/Munich_v_1_0_0.gml"
),
"EPSG:32632"
);
}
}
@Test
@Test
public
void
testExtractCRSFromNYC
()
throws
IOException
{
void
testExtractCRSFromNYC
()
throws
IOException
{
testExtractCSRNameFromHeader
(
repo
.
resolve
(
"NewYork.proj/ManhattanSmall.gml"
),
"EPSG:32118"
);
testExtractCSRNameFromHeader
(
repo
.
resolve
(
"NewYork.proj/ManhattanSmall.gml"
),
"EPSG:32118"
);
}
}
@Test
@Test
public
void
testExtractCRSFromAachen
()
throws
IOException
{
void
testExtractCRSFromAachen
()
throws
IOException
{
testExtractCSRNameFromHeader
(
repo
.
resolve
(
"Others.proj/Aachen_LoD2_293_5623_1_NW.gml"
),
"EPSG:25832"
);
testExtractCSRNameFromHeader
(
repo
.
resolve
(
"Others.proj/Aachen_LoD2_293_5623_1_NW.gml"
),
"EPSG:25832"
);
}
}
@Test
@Test
public
void
testExtractCRSFromValladolid
()
throws
IOException
{
void
testExtractCRSFromValladolid
()
throws
IOException
{
testExtractCSRNameFromHeader
(
repo
.
resolve
(
"Others.proj/Valladolid_Spain_only_header.gml"
),
"EPSG:25830"
);
testExtractCSRNameFromHeader
(
repo
.
resolve
(
"Others.proj/Valladolid_Spain_only_header.gml"
),
"EPSG:25830"
);
}
}
@Test
@Test
public
void
testDontExtractCRSFromBrokenCityGML
()
throws
IOException
{
void
testDontExtractCRSFromBrokenCityGML
()
throws
IOException
{
Path
citygmlPath
=
repo
.
resolve
(
"Others.proj/SimpleSolid_MSBS.gml"
);
Path
citygmlPath
=
repo
.
resolve
(
"Others.proj/SimpleSolid_MSBS.gml"
);
assertThrows
(
IllegalArgumentException
.
class
,
()
->
{
assertThrows
(
IllegalArgumentException
.
class
,
()
->
{
testExtractCSRNameFromHeader
(
citygmlPath
,
"Nothing found. Should throw an exception"
);
testExtractCSRNameFromHeader
(
citygmlPath
,
"Nothing found. Should throw an exception"
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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