Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
CityDoctor
CityDoctor2
Commits
ddeb7a48
Commit
ddeb7a48
authored
Jul 08, 2022
by
Matthias Betz
Browse files
add TIN support, modeled with MultiSurface requirements
parent
525b3630
Pipeline
#6631
passed with stage
in 1 minute and 49 seconds
Changes
15
Pipelines
3
Hide whitespace changes
Inline
Side-by-side
CityDoctorParent/CityDoctorCheckResult/pom.xml
View file @
ddeb7a48
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
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"
>
xsi:schemaLocation=
"http
s
://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
de.hft.stuttgart
</groupId>
<artifactId>
CityDoctorParent
</artifactId>
<version>
3.1
0.4
</version>
<version>
3.1
1.0
</version>
</parent>
<artifactId>
CityDoctorCheckResult
</artifactId>
...
...
CityDoctorParent/CityDoctorEdge/pom.xml
View file @
ddeb7a48
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
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"
>
xsi:schemaLocation=
"http
s
://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
de.hft.stuttgart
</groupId>
<artifactId>
CityDoctorParent
</artifactId>
<version>
3.1
0.4
</version>
<version>
3.1
1.0
</version>
</parent>
<artifactId>
CityDoctorEdge
</artifactId>
...
...
CityDoctorParent/CityDoctorModel/pom.xml
View file @
ddeb7a48
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
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"
>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"https://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
de.hft.stuttgart
</groupId>
<artifactId>
CityDoctorParent
</artifactId>
<version>
3.1
0.4
</version>
<version>
3.1
1.0
</version>
</parent>
<properties>
...
...
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/check/Check.java
View file @
ddeb7a48
...
...
@@ -38,6 +38,8 @@ import de.hft.stuttgart.citydoctor2.datastructure.LandObject;
import
de.hft.stuttgart.citydoctor2.datastructure.LinearRing
;
import
de.hft.stuttgart.citydoctor2.datastructure.Opening
;
import
de.hft.stuttgart.citydoctor2.datastructure.Polygon
;
import
de.hft.stuttgart.citydoctor2.datastructure.ReliefObject
;
import
de.hft.stuttgart.citydoctor2.datastructure.TinObject
;
import
de.hft.stuttgart.citydoctor2.datastructure.TransportationObject
;
import
de.hft.stuttgart.citydoctor2.datastructure.Vegetation
;
import
de.hft.stuttgart.citydoctor2.datastructure.WaterObject
;
...
...
@@ -301,6 +303,14 @@ public abstract class Check {
*/
public
void
check
(
LinearRing
ring
)
{
}
public
void
check
(
TinObject
tin
)
{
}
public
void
check
(
ReliefObject
relief
)
{
}
/**
...
...
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/CityDoctorModel.java
View file @
ddeb7a48
...
...
@@ -77,7 +77,7 @@ public class CityDoctorModel {
private
List
<
Building
>
buildings
;
private
List
<
Vegetation
>
vegetation
;
private
List
<
BridgeObject
>
bridges
;
private
List
<
Land
Object
>
land
;
private
List
<
City
Object
>
land
;
private
List
<
TransportationObject
>
roads
;
private
List
<
WaterObject
>
water
;
private
CityModel
cModel
;
...
...
@@ -374,7 +374,7 @@ public class CityDoctorModel {
return
water
;
}
public
List
<
Land
Object
>
getLand
()
{
public
List
<
City
Object
>
getLand
()
{
return
land
;
}
...
...
@@ -480,9 +480,21 @@ public class CityDoctorModel {
}
else
if
(
co
instanceof
Vegetation
)
{
vegetation
.
add
((
Vegetation
)
co
);
}
else
if
(
co
instanceof
LandObject
)
{
land
.
add
(
(
LandObject
)
co
);
land
.
add
(
co
);
}
else
if
(
co
instanceof
WaterObject
)
{
water
.
add
((
WaterObject
)
co
);
}
else
if
(
co
instanceof
ReliefObject
)
{
land
.
add
(
co
);
}
else
if
(
co
instanceof
TinObject
)
{
land
.
add
(
co
);
}
}
public
void
addRelief
(
ReliefObject
relief
)
{
addCityObject
(
relief
);
}
public
void
addTin
(
TinObject
tin
)
{
addCityObject
(
tin
);
}
}
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/ReliefObject.java
0 → 100644
View file @
ddeb7a48
/*-
* Copyright 2022 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
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CityDoctor2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with CityDoctor2. If not, see <https://www.gnu.org/licenses/>.
*/
package
de.hft.stuttgart.citydoctor2.datastructure
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.citygml4j.factory.GMLGeometryFactory
;
import
org.citygml4j.model.citygml.core.AbstractCityObject
;
import
org.citygml4j.model.citygml.relief.ReliefFeature
;
import
de.hft.stuttgart.citydoctor2.check.Check
;
import
de.hft.stuttgart.citydoctor2.check.CheckError
;
import
de.hft.stuttgart.citydoctor2.check.CheckId
;
import
de.hft.stuttgart.citydoctor2.parser.ParserConfiguration
;
import
de.hft.stuttgart.citydoctor2.utils.CopyHandler
;
import
de.hft.stuttgart.citydoctor2.utils.Copyable
;
public
class
ReliefObject
extends
CityObject
{
private
static
final
long
serialVersionUID
=
-
9162169874426519903L
;
private
ReliefFeature
feature
;
private
List
<
TinObject
>
components
=
new
ArrayList
<>();
public
ReliefObject
(
ReliefFeature
feature
)
{
this
.
feature
=
feature
;
}
@Override
public
void
accept
(
Check
c
)
{
super
.
accept
(
c
);
if
(
c
.
canExecute
(
this
))
{
c
.
check
(
this
);
}
for
(
TinObject
tin
:
components
)
{
tin
.
accept
(
c
);
}
}
@Override
public
void
collectInstances
(
CopyHandler
handler
)
{
handler
.
addInstance
(
components
);
}
@Override
public
void
fillValues
(
Copyable
original
,
CopyHandler
handler
)
{
super
.
fillValues
(
original
,
handler
);
ReliefObject
originalRelief
=
(
ReliefObject
)
original
;
for
(
TinObject
tin
:
originalRelief
.
components
)
{
components
.
add
(
handler
.
getCopyInstance
(
tin
));
}
}
@Override
public
Copyable
createCopyInstance
()
{
return
new
ReliefObject
(
feature
);
}
@Override
public
void
prepareForChecking
()
{
for
(
TinObject
component
:
components
)
{
component
.
prepareForChecking
();
}
}
@Override
public
void
clearMetaInformation
()
{
for
(
TinObject
component
:
components
)
{
component
.
clearMetaInformation
();
}
}
@Override
public
void
clearAllContainedCheckResults
()
{
for
(
TinObject
component
:
components
)
{
component
.
clearAllContainedCheckResults
();
}
}
@Override
public
void
collectContainedErrors
(
List
<
CheckError
>
errors
)
{
super
.
collectContainedErrors
(
errors
);
for
(
TinObject
tin
:
components
)
{
tin
.
collectContainedErrors
(
errors
);
}
}
@Override
public
boolean
containsAnyError
()
{
boolean
containsError
=
super
.
containsAnyError
();
if
(
containsError
)
{
return
true
;
}
for
(
TinObject
tin
:
components
)
{
if
(
tin
.
containsAnyError
())
{
return
true
;
}
}
return
false
;
}
@Override
public
boolean
containsError
(
CheckId
checkIdentifier
)
{
boolean
hasError
=
super
.
containsError
(
checkIdentifier
);
if
(
hasError
)
{
return
true
;
}
for
(
TinObject
tin
:
components
)
{
if
(
tin
.
containsError
(
checkIdentifier
))
{
return
true
;
}
}
return
false
;
}
@Override
public
void
reCreateGeometries
(
GMLGeometryFactory
factory
,
ParserConfiguration
config
)
{
// no geometries
}
@Override
public
AbstractCityObject
getGmlObject
()
{
return
feature
;
}
@Override
public
void
unsetGmlGeometries
()
{
// no geometries
}
@Override
public
FeatureType
getFeatureType
()
{
return
FeatureType
.
LAND
;
}
public
List
<
TinObject
>
getComponents
()
{
return
components
;
}
}
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/datastructure/TinObject.java
0 → 100644
View file @
ddeb7a48
/*-
* Copyright 2022 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
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CityDoctor2 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with CityDoctor2. If not, see <https://www.gnu.org/licenses/>.
*/
package
de.hft.stuttgart.citydoctor2.datastructure
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.apache.logging.log4j.LogManager
;
import
org.apache.logging.log4j.Logger
;
import
org.citygml4j.factory.DimensionMismatchException
;
import
org.citygml4j.factory.GMLGeometryFactory
;
import
org.citygml4j.model.citygml.core.AbstractCityObject
;
import
org.citygml4j.model.citygml.relief.TINRelief
;
import
org.citygml4j.model.gml.geometry.primitives.Exterior
;
import
org.citygml4j.model.gml.geometry.primitives.Triangle
;
import
org.citygml4j.model.gml.geometry.primitives.TrianglePatchArrayProperty
;
import
org.citygml4j.model.gml.geometry.primitives.TriangulatedSurface
;
import
de.hft.stuttgart.citydoctor2.check.Check
;
import
de.hft.stuttgart.citydoctor2.parser.ParserConfiguration
;
import
de.hft.stuttgart.citydoctor2.utils.CityGmlUtils
;
public
class
TinObject
extends
CityObject
{
private
static
final
Logger
logger
=
LogManager
.
getLogger
(
TinObject
.
class
);
private
static
final
long
serialVersionUID
=
1910744427384724422L
;
private
TINRelief
gmlRelief
;
public
TinObject
(
TINRelief
gmlRelief
)
{
this
.
gmlRelief
=
gmlRelief
;
}
@Override
public
void
accept
(
Check
c
)
{
super
.
accept
(
c
);
if
(
c
.
canExecute
(
this
))
{
c
.
check
(
this
);
}
}
@Override
public
TinObject
createCopyInstance
()
{
return
new
TinObject
(
gmlRelief
);
}
@Override
public
void
reCreateGeometries
(
GMLGeometryFactory
factory
,
ParserConfiguration
config
)
{
if
(
getGeometries
().
isEmpty
())
{
return
;
}
if
(
getGeometries
().
size
()
>
1
)
{
logger
.
warn
(
"A TINRelief can only have one geometry but found {}. Using the first geometry found"
,
getGeometries
().
size
());
}
Geometry
geom
=
getGeometries
().
get
(
0
);
List
<
Triangle
>
triangles
=
new
ArrayList
<>();
TriangulatedSurface
surface
=
new
TriangulatedSurface
();
surface
.
setTrianglePatches
(
new
TrianglePatchArrayProperty
(
triangles
));
try
{
for
(
Polygon
poly
:
geom
.
getPolygons
())
{
LinearRing
ring
=
poly
.
getExteriorRing
();
Triangle
t
=
new
Triangle
();
t
.
setExterior
(
new
Exterior
(
CityGmlUtils
.
createGmlRing
(
factory
,
config
,
ring
)));
triangles
.
add
(
t
);
}
}
catch
(
DimensionMismatchException
e
)
{
logger
.
fatal
(
e
);
}
}
@Override
public
AbstractCityObject
getGmlObject
()
{
return
gmlRelief
;
}
@Override
public
void
unsetGmlGeometries
()
{
gmlRelief
.
setTin
(
null
);
}
@Override
public
FeatureType
getFeatureType
()
{
return
FeatureType
.
LAND
;
}
}
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/FeatureMapper.java
View file @
ddeb7a48
...
...
@@ -34,6 +34,11 @@ import org.citygml4j.model.citygml.building.BuildingPartProperty;
import
org.citygml4j.model.citygml.building.OpeningProperty
;
import
org.citygml4j.model.citygml.core.CityModel
;
import
org.citygml4j.model.citygml.landuse.LandUse
;
import
org.citygml4j.model.citygml.relief.AbstractReliefComponent
;
import
org.citygml4j.model.citygml.relief.ReliefComponentProperty
;
import
org.citygml4j.model.citygml.relief.ReliefFeature
;
import
org.citygml4j.model.citygml.relief.TINRelief
;
import
org.citygml4j.model.citygml.relief.TinProperty
;
import
org.citygml4j.model.citygml.transportation.AuxiliaryTrafficArea
;
import
org.citygml4j.model.citygml.transportation.AuxiliaryTrafficAreaProperty
;
import
org.citygml4j.model.citygml.transportation.Railway
;
...
...
@@ -50,6 +55,7 @@ import org.citygml4j.model.gml.geometry.AbstractGeometry;
import
org.citygml4j.model.gml.geometry.GeometryProperty
;
import
org.citygml4j.model.gml.geometry.complexes.CompositeSurface
;
import
org.citygml4j.model.gml.geometry.primitives.AbstractSolid
;
import
org.citygml4j.model.gml.geometry.primitives.TriangulatedSurface
;
import
org.citygml4j.util.walker.FeatureWalker
;
import
de.hft.stuttgart.citydoctor2.datastructure.AbstractBuilding
;
...
...
@@ -73,7 +79,9 @@ import de.hft.stuttgart.citydoctor2.datastructure.Lod;
import
de.hft.stuttgart.citydoctor2.datastructure.Opening
;
import
de.hft.stuttgart.citydoctor2.datastructure.OpeningType
;
import
de.hft.stuttgart.citydoctor2.datastructure.Polygon
;
import
de.hft.stuttgart.citydoctor2.datastructure.ReliefObject
;
import
de.hft.stuttgart.citydoctor2.datastructure.SurfaceFeatureType
;
import
de.hft.stuttgart.citydoctor2.datastructure.TinObject
;
import
de.hft.stuttgart.citydoctor2.datastructure.TransportationObject
;
import
de.hft.stuttgart.citydoctor2.datastructure.TransportationObject.TransportationType
;
import
de.hft.stuttgart.citydoctor2.datastructure.Vegetation
;
...
...
@@ -877,7 +885,68 @@ public class FeatureMapper extends FeatureWalker {
return
BoundarySurfaceType
.
UNDEFINED
;
}
}
@Override
public
void
visit
(
TINRelief
relief
)
{
model
.
addTin
(
mapTinRelief
(
relief
));
}
private
TinObject
mapTinRelief
(
TINRelief
relief
)
{
TinObject
tin
=
new
TinObject
(
relief
);
if
(
relief
.
isSetId
())
{
tin
.
setGmlId
(
new
GmlId
(
relief
.
getId
()));
}
TinProperty
tinProp
=
relief
.
getTin
();
if
(
tinProp
==
null
)
{
return
tin
;
}
TriangulatedSurface
triangSurface
=
tinProp
.
getObject
();
Lod
lod
=
Lod
.
LOD1
;
switch
(
relief
.
getLod
())
{
case
0
:
lod
=
Lod
.
LOD0
;
break
;
case
1
:
break
;
case
2
:
lod
=
Lod
.
LOD2
;
break
;
case
3
:
lod
=
Lod
.
LOD3
;
break
;
case
4
:
lod
=
Lod
.
LOD4
;
break
;
default
:
logger
.
warn
(
"Lod for relief {} was not specified, assuming lod 1"
,
relief
.
getId
());
}
Geometry
geom
=
new
Geometry
(
GeometryType
.
MULTI_SURFACE
,
lod
);
GeometryMapper
.
mapTriangulatedSurface
(
geom
,
triangSurface
,
config
,
new
HashMap
<>(),
new
ArrayList
<>(),
new
HashMap
<>());
tin
.
addGeometry
(
geom
);
return
tin
;
}
@Override
public
void
visit
(
ReliefFeature
reliefFeature
)
{
ReliefObject
relief
=
new
ReliefObject
(
reliefFeature
);
model
.
addRelief
(
relief
);
if
(
reliefFeature
.
isSetId
())
{
relief
.
setGmlId
(
new
GmlId
(
reliefFeature
.
getId
()));
}
List
<
ReliefComponentProperty
>
reliefprops
=
reliefFeature
.
getReliefComponent
();
for
(
ReliefComponentProperty
prop
:
reliefprops
)
{
AbstractReliefComponent
object
=
prop
.
getObject
();
if
(
object
==
null
)
{
continue
;
}
if
(
object
instanceof
TINRelief
)
{
TINRelief
tinRelief
=
(
TINRelief
)
object
;
TinObject
tinObject
=
mapTinRelief
(
tinRelief
);
relief
.
getComponents
().
add
(
tinObject
);
}
}
}
public
CityDoctorModel
getModel
()
{
return
model
;
}
...
...
@@ -885,5 +954,5 @@ public class FeatureMapper extends FeatureWalker {
public
void
setCityModel
(
CityModel
cModel
)
{
model
.
setCityModel
(
cModel
);
}
}
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/mapper/GeometryMapper.java
View file @
ddeb7a48
...
...
@@ -38,6 +38,9 @@ import org.citygml4j.model.gml.geometry.primitives.DirectPositionList;
import
org.citygml4j.model.gml.geometry.primitives.PosOrPointPropertyOrPointRep
;
import
org.citygml4j.model.gml.geometry.primitives.SolidProperty
;
import
org.citygml4j.model.gml.geometry.primitives.SurfaceProperty
;
import
org.citygml4j.model.gml.geometry.primitives.Triangle
;
import
org.citygml4j.model.gml.geometry.primitives.TrianglePatchArrayProperty
;
import
org.citygml4j.model.gml.geometry.primitives.TriangulatedSurface
;
import
org.citygml4j.util.walker.GeometryWalker
;
import
org.locationtech.proj4j.BasicCoordinateTransform
;
import
org.locationtech.proj4j.ProjCoordinate
;
...
...
@@ -97,7 +100,7 @@ public class GeometryMapper extends GeometryWalker {
public
void
setBuildingInstallation
(
BuildingInstallation
bi
)
{
this
.
bi
=
bi
;
}
@Override
public
void
visit
(
MultiSurface
multiSurface
)
{
super
.
visit
(
multiSurface
);
...
...
@@ -111,7 +114,7 @@ public class GeometryMapper extends GeometryWalker {
}
}
}
@Override
public
void
visit
(
CompositeSurface
compositeSurface
)
{
super
.
visit
(
compositeSurface
);
...
...
@@ -334,6 +337,30 @@ public class GeometryMapper extends GeometryWalker {
geometry
.
accept
(
geomMapper
);
}
public
static
void
mapTriangulatedSurface
(
Geometry
geom
,
TriangulatedSurface
surface
,
ParserConfiguration
config
,
Map
<
String
,
ConcretePolygon
>
polygons
,
List
<
Pair
<
String
,
Geometry
>>
linkedPolygons
,
Map
<
Vertex
,
Vertex
>
vertexMap
)
{
if
(
surface
==
null
)
{
return
;
}
TrianglePatchArrayProperty
trianglePatches
=
surface
.
getTrianglePatches
();
if
(
trianglePatches
==
null
)
{
return
;
}
GeometryMapper
mapper
=
new
GeometryMapper
(
geom
,
config
,
polygons
,
linkedPolygons
,
vertexMap
);
List
<
Triangle
>
triangles
=
trianglePatches
.
getTriangle
();
for
(
Triangle
t
:
triangles
)
{
if
(
t
==
null
)
{
continue
;
}
ConcretePolygon
poly
=
new
ConcretePolygon
();
LinearRing
ext
=
new
LinearRing
(
LinearRingType
.
EXTERIOR
);
poly
.
setExteriorRing
(
ext
);
mapper
.
mapRing
(
t
.
getExterior
(),
ext
);
geom
.
addPolygon
(
poly
);
}
}
public
static
void
mapLod0MultiSurface
(
MultiSurfaceProperty
lod0ms
,
CityObject
co
,
ParserConfiguration
config
,
Map
<
String
,
ConcretePolygon
>
polygons
,
List
<
Pair
<
String
,
Geometry
>>
linkedPolygons
,
Map
<
Vertex
,
Vertex
>
vertexMap
)
{
...
...
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/parser/CityGmlParser.java
View file @
ddeb7a48
...
...
@@ -271,7 +271,7 @@ public class CityGmlParser {
new
QName
(
"CeilingSurface"
),
new
QName
(
"ClosureSurface"
),
new
QName
(
"FloorSurface"
),
new
QName
(
"InteriorWallSurface"
),
new
QName
(
"OuterCeilingSurface"
),
new
QName
(
"OuterFloorSurface"
),
new
QName
(
"BuildingInstallation"
),
new
QName
(
"BuildingPart"
),
new
QName
(
"Door"
),
new
QName
(
"Window"
),
new
QName
(
"Address"
)
});
new
QName
(
"Door"
),
new
QName
(
"Window"
),
new
QName
(
"Address"
)
,
new
QName
(
"TINRelief"
)
});
return
inputFactory
;
}
...
...
CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/utils/CityGmlUtils.java
View file @
ddeb7a48
...
...
@@ -77,7 +77,7 @@ public final class CityGmlUtils {
}
}
p
rivate
static
org
.
citygml4j
.
model
.
gml
.
geometry
.
primitives
.
LinearRing
createGmlRing
(
GMLGeometryFactory
factory
,
p
ublic
static
org
.
citygml4j
.
model
.
gml
.
geometry
.
primitives
.
LinearRing
createGmlRing
(
GMLGeometryFactory
factory
,
ParserConfiguration
config
,
LinearRing
lr
)
throws
DimensionMismatchException
{
ProjCoordinate
p1
=
new
ProjCoordinate
();
ProjCoordinate
p2
=
new
ProjCoordinate
();
...
...
CityDoctorParent/CityDoctorValidation/pom.xml
View file @
ddeb7a48
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"