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

CityGML and its two encodings CityGML and CityJSON

Hugo Ledoux
September 30, 2018

CityGML and its two encodings CityGML and CityJSON

Hugo Ledoux

September 30, 2018
Tweet

More Decks by Hugo Ledoux

Other Decks in Research

Transcript

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

    just visualisation key aspect: semantic modelling
  2. 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
  3. 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)
  4. 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)
  5. 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 >
  6. 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
  7. 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
  8. CityJSON 20 Full disclosure we developed it, but we are

    totally objective about how good it is
  9. 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)
  10. 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": [] } }
  11. 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": [] } }
  12. 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": [] } }
  13. 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": [] } }
  14. 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": [] } }
  15. 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": [] } }
  16. 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] ] } ]
  17. 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”, ... } }
  18. 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
  19. 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