{ "project": { "title": "GOM - Geometry Metadata Ontology", "creator": "Mathias Bonduel, Anna Wagner & Pieter Pauwels" }, "tabs": [ { "title": "0: GOM - intro", "query": "PREFIX\trdf: \nPREFIX rdfs: \nPREFIX owl: \nPREFIX xsd: \nPREFIX bot: \nPREFIX beo: \nPREFIX dot: \nPREFIX epsg: \nPREFIX unit: \nPREFIX omg: \nPREFIX fog: \nPREFIX gom: \nPREFIX inst: \n\nCONSTRUCT { ?s ?p ?o }\nWHERE { ?s ?p ?o }", "triples": "@prefix\trdf: .\n@prefix rdfs: .\n@prefix owl: .\n@prefix xsd: .\n@prefix bot: .\n@prefix beo: .\n@prefix dot: .\n@prefix epsg: .\n@prefix unit: .\n@prefix omg: .\n@prefix fog: . \n@prefix gom: .\n@prefix inst: .\n\n### building topology\ninst:site a bot:Site ;\n\tbot:hasBuilding inst:church .\n\t\ninst:church a bot:Building ;\n\tomg:hasGeometry inst:geometry-i1a , inst:geometry-i1b , inst:geometry-i1c , inst:geometry-i2 ;\n\tbot:hasStorey inst:groundfloor .\n\t\ninst:groundfloor a bot:Storey ;\n\tomg:hasGeometry inst:geometry-i3 , inst:geometry-i4 ;\n\tbot:hasSpace inst:nave .\n\t\ninst:nave a bot:Space ;\n\tbot:adjacentElement inst:roof1 , inst:wallA .\n\t\ninst:roof1 a bot:Element , beo:Roof ;\n\tomg:hasGeometry inst:geometry-i5 ;\n\tdot:hasDamageElement inst:roof1-damage1 , inst:roof1-damage2 .\n\ninst:wallA a bot:Element , beo:Wall ;\n\tomg:hasGeometry inst:geometry-i6 .\n\t\ninst:roof1-damage1 a dot:DamageElement ;\n\tomg:hasGeometry inst:geometry-i7 .\n\n### geometry descriptions\n#-- part1\ninst:geometry-i1a a gom:PointCloudGeometry ;\n\tgom:hasCoordinateSystem epsg:6190 ;\n\tgom:hasFileSize 11353506 ;\n\tfog:asLas_v1.4-laz \"fileA.laz\"^^xsd:anyURI .\ninst:geometry-i1b a gom:PointCloudGeometry ;\n\tgom:hasCoordinateSystem epsg:6190 ;\n\tgom:hasFileSize 6303875 ;\n\tfog:asLas_v1.4-laz \"fileB.laz\"^^xsd:anyURI .\ninst:geometry-i1c a gom:PointCloudGeometry ;\n\tgom:hasCoordinateSystem epsg:6190 ;\n\tgom:hasFileSize 870716 ;\n\tfog:asLas_v1.4-laz \"fileC.laz\"^^xsd:anyURI .\ninst:geometry-i2 a gom:PointCloudGeometry ;\n\tgom:hasCoordinateSystem epsg:6190 ;\n\tgom:hasFileSize 3811517 ;\n\tomg:derivedFromGeometry inst:geometry-i1a , inst:geometry-i1b , inst:geometry-i1c ;\n\tfog:asPcd_v0.7-ascii \"fileD.pcd\"^^xsd:anyURI .\n\t\nepsg:6190 a gom:CartesianCoordinateSystem .\n\n#-- part2\ninst:geometry-i3 a gom:PlanGeometry ;\n\tgom:hasCoordinateSystem inst:cs1 ;\n\tgom:hasFileSize 7541091 ;\n \tfog:asDwg_v2018 \"plan.dwg\"^^xsd:anyURI .\ninst:geometry-i4 a gom:PlanGeometry ;\n\tgom:hasCoordinateSystem inst:cs2 ;\n\tgom:hasFileSize 906639 ;\n\tomg:derivedFromGeometry inst:geometry-i3 ;\n \tfog:asSvg_v1.1 \"plan.svg\"^^xsd:anyURI .\n\t\ninst:cs1 a gom:CartesianCoordinateSystem .\ninst:transformation1 a gom:AffineCoordinateSystemTransformation ;\n\tgom:fromCartesianCoordinateSystem epsg:6190 ;\n\tgom:toCartesianCoordinateSystem inst:cs1 ;\n\tgom:hasMatrix \"[0.245985224843,-0.969273567200,0,0,0.969273567200,0.245985224843,0,0,0,0,1,0,-213778.578125000000,53863.355468750000,-8.199999809265,1]\"^^gom:columnMajorArray .\ninst:cs2 a gom:CartesianCoordinateSystem .\ninst:transformation2 a gom:AffineCoordinateSystemTransformation ;\n\tgom:fromCartesianCoordinateSystem inst:cs2 ;\n\tgom:toCartesianCoordinateSystem inst:cs1 ;\n\tgom:hasMatrix \"[100,0,0,0,0,-100,1.2246467991473532e-14,0,0,-1.2246467991473532e-14,-100,0,-84.1,118.9,0,1]\"^^gom:columnMajorArray .\n\n#-- part 3\ninst:geometry-i5 a gom:MeshGeometry ;\n\tgom:hasCoordinateSystem inst:cs1 ;\n\tgom:hasFileSize 982 ;\n\tomg:hasGeometryContext inst:context1 ;\n\tomg:derivedFromGeometry inst:geometry-i3 ;\n\tfog:asPly_v1.0-binaryLE \"embedded PLY 1\"^^xsd:base64Binary .\ninst:geometry-i6 a omg:Geometry ;\n \tgom:hasCoordinateSystem inst:cs1 ;\n\tgom:hasFileSize 597 ;\n\tomg:derivedFromGeometry inst:geometry-i3 ;\n\tfog:asPly_v1.0-binaryLE \"embedded PLY 2\"^^xsd:base64Binary .\ninst:context1 a omg:GeometryContext .\n\t\n#-- part 4\ninst:geometry-i7 a gom:MeshGeometry ;\n\tgom:hasCoordinateSystem inst:cs1 ;\n\tgom:hasFileSize 2040 ;\n\tomg:hasGeometryContext inst:context1 ;\n\tfog:asObj_v3.0-obj \"embedded OBJ 1\"^^xsd:string .\n\n### additional CS with defined units, but no registration\ninst:cs3 a gom:CartesianCoordinateSystem ;\n\tgom:hasLengthUnit unit:KiloM .\n\n### Level of Accuracy (LOA) analysis example\ninst:building1 a bot:Building ;\n\tomg:hasGeometry inst:building1-pc ;\n\tbot:containsElement inst:wall1 .\ninst:wall1 a bot:Element ;\n\tomg:hasGeometry inst:wall1-mesh .\n\ninst:building1-pc a gom:PointCloudGeometry ;\n\tfog:asPcd_v0.7-ascii \"fileE.pcd\"^^xsd:anyURI .\ninst:wall1-mesh a gom:MeshGeometry ;\n\tfog:asPly_v1.0-ascii \"fileF.ply\"^^xsd:anyURI ;\n\tomg:isDerivedFromGeometry inst:building1-pc ;\n\tgom:hasSurfaceArea 24.62 . # in m2\n\ninst:accuracyAnalysis1 a gom:RepresentedAccuracyAnalysis ;\n\tgom:hasSurveyGeometry inst:building1-pc ;\n\tgom:hasSimplifiedGeometry inst:wall1-mesh ;\n\tgom:hasAnalysisFile \"analysis.bin\"^^xsd:anyURI ;\n\tgom:totalRelevant 51.07 ; # in %\n\tgom:maxOcclusionDistance 25 ; # in mm\n\tgom:usedLocalModelMethod true ;\n\tgom:totalOccluded 17.25 ; # in %\n gom:totalLOA50 29.01 ; # in %\n gom:totalLOA40 53.63 ; # in %\n gom:totalLOA30 11.38 ; # in %\n gom:totalLOA20 5.97 ; # in %\n\tgom:totalLOA10 0.0 ; # in %\n\tgom:total95PercentUpperLimit 17 . # in mm\n\t\n\n\n", "description": "This SPARQL-visualiser aims to give an introduction to the Geometry Metadata Ontology (GOM), which is designed to be at least compatible with OMG / FOG. The example dataset contains a building description in RDF made with BOT and BEO, linked to geometry descriptions using the OMG / FOG linking method. Only [OMG level 2](https://w3id.org/omg#description) links (1 intermediate node) are demonstrated, but GOM can also be used for OMG level 3. GOM cannot be used with OMG level 1 as there is no geometry node to link metadata to. \n\nThe sample triples demonstrate how GOM can be used and queried for:\n* Coordinate Systems (CS) and transformations\n* length units of CS\n* relevant metadata to geometry nodes (file size, geometry type, etc.)\n* the results of an accuracy analysis of survey geometry (e.g. point cloud) vs. simplified geometry (e.g. CAD model, mesh, plan, etc.)\n\nThe graph visualisation of the example query shows all the sample triples.\n\nThis introduction tab contains the sample triples used in the other tabs. The example queries do not need reasoning.\n\n**NOTE!** Don't forget to load the sample triples in your local Stardog or Fuseki triplestore, if you plan to go through the following tabs. Click on \"Load dataset\" (main graph) after having setup the correct endpoint, database name, username and password of your Stardog/Fuseki instance." }, { "title": "1: GOM - Coordinate Systems", "query": "PREFIX omg: \nPREFIX owl: \nPREFIX rdfs: \nPREFIX fog: \nPREFIX gom: \nPREFIX inst: \n\nSELECT DISTINCT ?cs ?to ?transTo ?transDType WHERE {\n \t?cs a gom:CartesianCoordinateSystem .\n\tOPTIONAL {\n \t?transformation gom:fromCartesianCoordinateSystem ?cs ;\n \tgom:toCartesianCoordinateSystem ?to ;\n gom:hasMatrix ?transTo .\n \tBIND(DATATYPE(?transTo) AS ?transDType)\n \t}\n}", "triples": " #dummy content", "description": "This sample query demonstrate how the example dataset can be queried for each Coordinate System (`?cs`) and - if available - registration data (the other CS (`?to`) and the transformation matrix (`?transTo`)). As the 4X4 transformation matrix can be expressed as a JSON array in row-major order or column-major order, this is added to the datatype of the RDF literal (`?transDType`).\n\nThis example query does not need reasoning.\n\n**NOTE!** Don't forget to load the sample triples of the introduction tab in your local Stardog or Fuseki triplestore, if you want to test the query." }, { "title": "2: GOM - units", "query": "PREFIX omg: \nPREFIX owl: \nPREFIX rdfs: \nPREFIX fog: \nPREFIX gom: \nPREFIX inst: \n\nSELECT DISTINCT ?cs ?unit WHERE {\n \t?cs a gom:CartesianCoordinateSystem .\n\tOPTIONAL { ?cs gom:hasLengthUnit ?unit }\n}", "triples": " #dummy content", "description": "This sample query demonstrate how the example dataset can be queried for each Coordinate System (`?cs`) and - if available - the length unit (`?unit`). If no length unit is assigned to the CS, it is assumed to be in metre. Also the single unnamed CS of the geometry descriptions without named CS, is assumed to be in metre.\n\nThis example query does not need reasoning.\n\n**NOTE!** Don't forget to load the sample triples of the introduction tab in your local Stardog or Fuseki triplestore, if you want to test the query." }, { "title": "3: GOM - accuracy analysis", "query": "PREFIX omg: \nPREFIX owl: \nPREFIX rdfs: \nPREFIX fog: \nPREFIX gom: \nPREFIX inst: \n\nSELECT * WHERE {\n \t?accuracyAnalysis a gom:RepresentedAccuracyAnalysis ;\n \tgom:hasSurveyGeometry ?surveyGeometry ;\n gom:hasSimplifiedGeometry ?simplifiedGeometry ;\n \t?analysisProperty ?analysisValue .\n \tFILTER (?analysisProperty NOT IN (gom:hasSurveyGeometry , gom:hasSimplifiedGeometry , rdf:type))\n}", "triples": " #dummy content", "description": "This sample query demonstrate how the example dataset can be queried for each analysis of represented accuracy according to the [Level of Accuracy (LOA) specification](https://usibd.org/product/level-of-accuracy-loa-specification-version-2-0/) of the USIBD. An elaborated method to execute an analysis of the represented accuracy (measured geometry vs. simplified geometry), is documented in the following paper:\n\nM. Bonduel, M. Bassier, M. Vergauwen, P. Pauwels, and R. Klein, “Scan-To-BIM Output Validation: Towards a Standardized Geometric Quality Assessment of Building Information Models Based on Point Clouds,” in ISPRS - International Archives of the Photogrammetry, Remote Sensing and Spatial Information Sciences, 2017, no. XLII-2/W8, pp. 45–52.\n\nThis example query does not need reasoning.\n\n**NOTE!** Don't forget to load the sample triples of the introduction tab in your local Stardog or Fuseki triplestore, if you want to test the query." }, { "title": "4: GOM - filtering on metadata", "query": "PREFIX omg: \nPREFIX owl: \nPREFIX rdfs: \nPREFIX fog: \nPREFIX gom: \nPREFIX inst: \n\nSELECT ?geometry ?size ?property ?value ?dType WHERE {\n\t?geometry ?property ?value ;\n \t\tgom:hasFileSize ?size ;\n\t\ta gom:PlanGeometry .\n\tFILTER (?size < 1000000) . #return only geometry smaller than 1 mb\n \tFILTER (?property IN (fog:asDwg_v2018 , fog:asStep , fog:asGeomOntology , fog:asE57_v1.0 , fog:asLas_v1.4-laz , fog:asGltf_v2.0-gltf , fog:asGltf_v2.0-glb , fog:asPly_v1.0-binaryLE , fog:asPly_v1.0-ascii , fog:asCollada_v1.4.1 , fog:asNexus_v4.2-nxs , fog:asNexus_v4.2-nxz , fog:asObj_v3.0-obj , fog:asSvg_v1.1 , fog:asPcd_v0.7-ascii)) .\n \tBIND(DATATYPE(?value) AS ?dType)\n}", "triples": " #dummy content", "description": "This sample query demonstrate how the example dataset can be queried for geometry descriptions. Using the GOM metadata, it is possible to filter for specific geometry descriptions, e.g. based on file size (`?size`) and geometry type (`gom:PlanGeometry`).\n\nThis example query does not need reasoning.\n\n**NOTE!** Don't forget to load the sample triples of the introduction tab in your local Stardog or Fuseki triplestore, if you want to test the query." } ] }