Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CityGML and its two encodings CityGML and CityJSON

9c7f843b850f4e4beeb53c93893c4ff0?s=47 Hugo Ledoux
September 30, 2018

CityGML and its two encodings CityGML and CityJSON

9c7f843b850f4e4beeb53c93893c4ff0?s=128

Hugo Ledoux

September 30, 2018
Tweet

Transcript

  1. CityGML and its two encodings CityGML and CityJSON Hugo Ledoux

    2018-09-30 Delft, the Netherlands
  2. 2 int’l standard (from OGC) for representing and storing 3D

    city models
  3. CityGML: 5 Levels-of-detail 3

  4. CityGML: more than just buildings 4

  5. 3D city modelling and CityGML == semantics 5 more than

    just visualisation key aspect: semantic modelling
  6. Spatio-semantic coherence 6 Semantics Geometry Building BuildingPart BuildingPart Roof Surface

    … Wall Surface Building Installation Wall Surface Roof Surface Wall Surface … Door Door Window Window MultiSolid Solid Solid Polygon MultiPolygon Polygon … … … Semanti Building Installation Building BuildingPart BuildingPart Buildin BuildingPart Roof Surface Roof Surface Wall Surface … Door D
  7. A whole area can be semantically decomposed 7

  8. 3D formats 8

  9. Why is semantics important?

  10. Because applications!

  11. 11 solar potential shadow analysis noise modelling energy estimation bomb

    detonation wind turbulence pollutant tracking
  12. CityGML = standardisation of the data model 12 Appearance Module

    Generics Module CityGML Core Module Bridge Module Building Module CityFurniture Module LandUse Module Vegetation Module Waterbody Module Relief Module CityObjectGroup Module Transportation Module Tunnel Module NoiseADE EnergieADE Many moreADEs….. Thematic Modules ADEs Kolbe (2012)
  13. CityGML = standardisation of the data model 13 ExternalReference -

    informationSystem: anyURI - externalReference: ExternalObjectReferenceType <<FeatureCollection>> CityModel * * … loD0-4GeometryProperty <<Geometry>> gml::_Geometry loD0-4GeometryProperty <<Feature>> _Transportation Object <<Feature>> _Abstract Building <<Feature>> ReliefFeature <<Feature>> _WaterBody <<Feature>> _Vegetation <<Feature>> _CityObject <<Feature>> gml::_Feature <<Feature>> _Site Gröger et al. (2012)
  14. 14 Data model a GML encoding both are called CityGML

    !
  15. A CityGML (the encoding) file 15 <?xml version="1.0" encoding="UTF-8"?> <CityModel

    xmlns="http://www.citygml.org/citygml/1/0/0“ ...further namespaces omitted> <gml:name>Cologne</gml:name> <gml:boundedBy> <gml:Envelope srsName="urn:ogc:def:crs,crs:EPSG:6.12:31466,crs:EPSG:6.12:5783"> <gml:pos> 5659800.0 2561800.0 15.9 </gml:pos> <gml:pos> 5662200.0 2564200.0 95.7</gml:pos> </gml:Envelope> </gml:boundedBy> <!-- now come the CityObjects like Buildings, DTM, Roads etc. --> <cityObjectMember> <Building gml:id=“Building0815"> <!-- shown on following slides --> </Building> </cityObjectMember> <!-- more CityObjects here --> </CityModel >
  16. A CityGML (the encoding) file 16 <?xml version="1.0" encoding="UTF-8"?> <CityModel

    xmlns="http://www.citygml.org/citygml/1/0/0“ ...further namespaces omitted> <gml:name>Cologne</gml:name> <gml:boundedBy> <gml:Envelope srsName="urn:ogc:def:crs,crs:EPSG:6.12:31466,crs:EPSG:6.12:5783"> <gml:pos> 5659800.0 2561800.0 15.9 </gml:pos> <gml:pos> 5662200.0 2564200.0 95.7</gml:pos> </gml:Envelope> </gml:boundedBy> <!-- now come the CityObjects like Buildings, DTM, Roads etc. --> <cityObjectMember> <Building gml:id=“Building0815"> <!-- shown on following slides --> </Building> </cityObjectMember> <!-- more CityObjects here --> </CityModel > Several samples files at https://www.citygml.org/samplefiles
  17. CityGML files are very complex 17 • CityGML files are

    complex and large • No parsers in JavaScript • Few software packages use CityGML • Many diff ways to do one thing • I personally get each time I get a new file
  18. 18 Data model a GML encoding 2 encodings

  19. CityJSON 19

  20. CityJSON 20 Full disclosure we developed it, but we are

    totally objective about how good it is
  21. v0.8 released 21 1. "Building" 2. "BuildingPart" 3. "BuildingInstallation" 4.

    "Road" 5. "Railway" 6. "TransportSquare" 7. "TINRelief" 8. "WaterBody" 9. "PlantCover" 10. "SolitaryVegetationObject" 11. "LandUse" 12. "CityFurniture" 13. "GenericCityObject" 14. "Bridge" 15. "BridgePart" 16. "BridgeInstallation" 17. "BridgeConstructionElement" 18. "Tunnel" 19. "TunnelPart" 20. “TunnelInstallation” 21. “CityObjectGroup” • all modules mapped $ • software for full conversion CityGML <-> CityJSON • Extensions (ADEs in CityGML world) are possible • software to visualise (azul) and to manipulate (cjio)
  22. Same information, but in JSON 22 { "type": “CityJSON", "version":

    “0.8”, "metadata": { "referenceSystem": "urn:ogc:def:crs:EPSG::7415", }, "CityObjects": { "id-1": { "type": "Building", "attributes": { "measuredHeight": 22.3, "roofType": "gable", "owner": “Elvis Presley" }, "geometry": [ { "type": "MultiSurface", "boundaries": [ [[0, 3, 2, 1]], [[4, 5, 6, 7]], [[0, 1, 5, 4]] ] } ] } }, "vertices": [ [23.1, 2321.2, 11.0], [111.1, 321.1, 12.0], ... ], "appearance": { "materials": [], "textures":[], "vertices-texture": [] } }
  23. A CityJSON file 23 version CityJSON { "type": “CityJSON", "version":

    “0.8”, "metadata": { "referenceSystem": "urn:ogc:def:crs:EPSG::7415", }, "CityObjects": { "id-1": { "type": "Building", "attributes": { "measuredHeight": 22.3, "roofType": "gable", "owner": “Elvis Presley" }, "geometry": [ { "type": "MultiSurface", "boundaries": [ [[0, 3, 2, 1]], [[4, 5, 6, 7]], [[0, 1, 5, 4]] ] } ] } }, "vertices": [ [23.1, 2321.2, 11.0], [111.1, 321.1, 12.0], ... ], "appearance": { "materials": [], "textures":[], "vertices-texture": [] } }
  24. A CityJSON file 24 metadata, ISO19115 “compliant” CityGML has no

    mechanism in v2.0 but we thought it’s important ALL geometries have the same CRS, unlike CityGML { "type": “CityJSON", "version": “0.8”, "metadata": { "referenceSystem": "urn:ogc:def:crs:EPSG::7415", }, "CityObjects": { "id-1": { "type": "Building", "attributes": { "measuredHeight": 22.3, "roofType": "gable", "owner": “Elvis Presley" }, "geometry": [ { "type": "MultiSurface", "boundaries": [ [[0, 3, 2, 1]], [[4, 5, 6, 7]], [[0, 1, 5, 4]] ] } ] } }, "vertices": [ [23.1, 2321.2, 11.0], [111.1, 321.1, 12.0], ... ], "appearance": { "materials": [], "textures":[], "vertices-texture": [] } }
  25. A CityJSON file 25 All City Objects listed here, indexed

    by their ID Each have geometries + attributes { "type": “CityJSON", "version": “0.8”, "metadata": { "referenceSystem": "urn:ogc:def:crs:EPSG::7415", }, "CityObjects": { "id-1": { "type": "Building", "attributes": { "measuredHeight": 22.3, "roofType": "gable", "owner": “Elvis Presley" }, "geometry": [ { "type": "MultiSurface", "boundaries": [ [[0, 3, 2, 1]], [[4, 5, 6, 7]], [[0, 1, 5, 4]] ] } ] } }, "vertices": [ [23.1, 2321.2, 11.0], [111.1, 321.1, 12.0], ... ], "appearance": { "materials": [], "textures":[], "vertices-texture": [] } }
  26. A CityJSON file 26 Geometry is ID of the vertex,

    global list compression + more “topology” { "type": “CityJSON", "version": “0.8”, "metadata": { "referenceSystem": "urn:ogc:def:crs:EPSG::7415", }, "CityObjects": { "id-1": { "type": "Building", "attributes": { "measuredHeight": 22.3, "roofType": "gable", "owner": “Elvis Presley" }, "geometry": [ { "type": "MultiSurface", "boundaries": [ [[0, 3, 2, 1]], [[4, 5, 6, 7]], [[0, 1, 5, 4]] ] } ] } }, "vertices": [ [23.1, 2321.2, 11.0], [111.1, 321.1, 12.0], ... ], "appearance": { "materials": [], "textures":[], "vertices-texture": [] } }
  27. A CityJSON file 27 material + texture possible { "type":

    “CityJSON", "version": “0.8”, "metadata": { "referenceSystem": "urn:ogc:def:crs:EPSG::7415", }, "CityObjects": { "id-1": { "type": "Building", "attributes": { "measuredHeight": 22.3, "roofType": "gable", "owner": “Elvis Presley" }, "geometry": [ { "type": "MultiSurface", "boundaries": [ [[0, 3, 2, 1]], [[4, 5, 6, 7]], [[0, 1, 5, 4]] ] } ] } }, "vertices": [ [23.1, 2321.2, 11.0], [111.1, 321.1, 12.0], ... ], "appearance": { "materials": [], "textures":[], "vertices-texture": [] } }
  28. Semantics surfaces, with attributes 28 “geometry": [ { "type": "Solid",

    “lod": 2.2, "boundaries": [ [ [[0, 3, 2, 1]], [[4, 5, 6, 7]], [[0, 1, 5, 4]], [[1, 2, 6, 5]], [[2, 3, 7, 6]], [[3, 0, 4, 7]] ] ], "semantics": { "surfaces" : [ { "type": "RoofSurface", "slope": 33.4 }, { "type": "RoofSurface", "slope": 66.6 }, { "type": "WallSurface", "paint": "blue" } ], "values": [ [0, 1, null, 2, 2, 2] ] } ]
  29. BuildingParts: links between City Objects 29 "CityObjects": { "id-1": {

    "type": "Building", "attributes": { "roofType": "gable" }, "children": ["id-56", “id-832”, “mybalcony”] }, "id-56": { "type": “BuildingPart", "parent": “id-1", ... }, "mybalcony": { "type": "BuildingInstallation", "parent": “id-1”, ... } }
  30. BuildingParts: links between City Objects 30 "CityObjects": { "id-1": {

    "type": "Building", "attributes": { "roofType": "gable" }, "children": ["id-56", “id-832”, “mybalcony”] }, "id-56": { "type": “BuildingPart", "parent": “id-1", ... }, "mybalcony": { "type": "BuildingInstallation", "parent": “id-1”, ... } } goal == a flat schema
  31. citygml4j 31 full conversion CityGML <-> CityJSON

  32. Compression factor == ~7X 32 Compression (v0.6) file CityGML size

    (original) CityGML size (w/o spaces) textures? CityJSON CityJSON compressed compression factor CityGML demo "GeoRes" 4.3MB 4.1MB yes 582KB 524KB 8.0 CityGML v2 demo "Railway" 45MB 34MB yes 4.5MB 4.3MB 8.1 Den Haag "tile 01" 23MB 18MB no, material 3.1MB 2.9MB 6.2 Montréal VM05 56MB 42MB yes 5.7MB 5.4MB 7.8 New York LoD2 (DA13) 590MB 574MB no 110MB 105MB 5.5 Rotterdam Delfshaven 16MB 15MB yes 2.8MB 2.6MB 5.4 Vienna 37MB 36MB no 5.6MB 5.3MB 6.8 5
  33. (all dev/discussions are open on GitHub) www.cityjson.org