@ifc-lite/parser 4.3.2 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/attribute-helpers.d.ts +38 -4
- package/dist/attribute-helpers.d.ts.map +1 -1
- package/dist/attribute-helpers.js +71 -4
- package/dist/attribute-helpers.js.map +1 -1
- package/dist/classification-resolver.d.ts +28 -2
- package/dist/classification-resolver.d.ts.map +1 -1
- package/dist/classification-resolver.js +24 -6
- package/dist/classification-resolver.js.map +1 -1
- package/dist/columnar-parser-attributes.d.ts.map +1 -1
- package/dist/columnar-parser-attributes.js +35 -5
- package/dist/columnar-parser-attributes.js.map +1 -1
- package/dist/columnar-parser-indexes.d.ts.map +1 -1
- package/dist/columnar-parser-indexes.js +14 -2
- package/dist/columnar-parser-indexes.js.map +1 -1
- package/dist/columnar-parser-relationships.d.ts.map +1 -1
- package/dist/columnar-parser-relationships.js +6 -1
- package/dist/columnar-parser-relationships.js.map +1 -1
- package/dist/columnar-parser.d.ts +4 -2
- package/dist/columnar-parser.d.ts.map +1 -1
- package/dist/columnar-parser.js +18 -56
- package/dist/columnar-parser.js.map +1 -1
- package/dist/compact-entity-index-transport.d.ts +23 -0
- package/dist/compact-entity-index-transport.d.ts.map +1 -0
- package/dist/compact-entity-index-transport.js +28 -0
- package/dist/compact-entity-index-transport.js.map +1 -0
- package/dist/compact-entity-index.d.ts +1 -10
- package/dist/compact-entity-index.d.ts.map +1 -1
- package/dist/compact-entity-index.js +29 -26
- package/dist/compact-entity-index.js.map +1 -1
- package/dist/data-store-transport.d.ts +9 -26
- package/dist/data-store-transport.d.ts.map +1 -1
- package/dist/data-store-transport.js +16 -35
- package/dist/data-store-transport.js.map +1 -1
- package/dist/entity-extractor.d.ts.map +1 -1
- package/dist/entity-extractor.js +101 -6
- package/dist/entity-extractor.js.map +1 -1
- package/dist/entity-refs-from-index.d.ts.map +1 -1
- package/dist/entity-refs-from-index.js +24 -15
- package/dist/entity-refs-from-index.js.map +1 -1
- package/dist/entity-scanner.d.ts +63 -0
- package/dist/entity-scanner.d.ts.map +1 -1
- package/dist/entity-scanner.js +79 -2
- package/dist/entity-scanner.js.map +1 -1
- package/dist/express-id.d.ts +47 -0
- package/dist/express-id.d.ts.map +1 -0
- package/dist/express-id.js +57 -0
- package/dist/express-id.js.map +1 -0
- package/dist/generated/entities.d.ts +1 -1
- package/dist/generated/entities.d.ts.map +1 -1
- package/dist/generated/schema-registry.js +146 -146
- package/dist/generated/schema-registry.js.map +1 -1
- package/dist/georef-epset.d.ts +25 -0
- package/dist/georef-epset.d.ts.map +1 -0
- package/dist/georef-epset.js +214 -0
- package/dist/georef-epset.js.map +1 -0
- package/dist/georef-extractor.d.ts.map +1 -1
- package/dist/georef-extractor.js +38 -175
- package/dist/georef-extractor.js.map +1 -1
- package/dist/georef-map-conversion.d.ts +29 -0
- package/dist/georef-map-conversion.d.ts.map +1 -0
- package/dist/georef-map-conversion.js +75 -0
- package/dist/georef-map-conversion.js.map +1 -0
- package/dist/ifc-schema.d.ts +4 -2
- package/dist/ifc-schema.d.ts.map +1 -1
- package/dist/ifc-schema.js +15 -5
- package/dist/ifc-schema.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/material-extractor.d.ts +2 -17
- package/dist/material-extractor.d.ts.map +1 -1
- package/dist/material-extractor.js +12 -37
- package/dist/material-extractor.js.map +1 -1
- package/dist/material-layer-reader.d.ts +45 -0
- package/dist/material-layer-reader.d.ts.map +1 -0
- package/dist/material-layer-reader.js +63 -0
- package/dist/material-layer-reader.js.map +1 -0
- package/dist/material-resolver.d.ts.map +1 -1
- package/dist/material-resolver.js +14 -14
- package/dist/material-resolver.js.map +1 -1
- package/dist/measure-unit-scale.d.ts +41 -0
- package/dist/measure-unit-scale.d.ts.map +1 -0
- package/dist/measure-unit-scale.js +53 -0
- package/dist/measure-unit-scale.js.map +1 -0
- package/dist/on-demand-extractors.d.ts +4 -20
- package/dist/on-demand-extractors.d.ts.map +1 -1
- package/dist/on-demand-extractors.js +54 -264
- package/dist/on-demand-extractors.js.map +1 -1
- package/dist/on-demand-georeferencing.d.ts +3 -3
- package/dist/on-demand-georeferencing.js +27 -4
- package/dist/on-demand-georeferencing.js.map +1 -1
- package/dist/owning-project.d.ts +54 -0
- package/dist/owning-project.d.ts.map +1 -0
- package/dist/owning-project.js +76 -0
- package/dist/owning-project.js.map +1 -0
- package/dist/parser.worker.d.ts +14 -0
- package/dist/parser.worker.d.ts.map +1 -1
- package/dist/parser.worker.js +16 -3
- package/dist/parser.worker.js.map +1 -1
- package/dist/project-units-symbols.d.ts +33 -0
- package/dist/project-units-symbols.d.ts.map +1 -0
- package/dist/project-units-symbols.js +265 -0
- package/dist/project-units-symbols.js.map +1 -0
- package/dist/project-units.d.ts +11 -19
- package/dist/project-units.d.ts.map +1 -1
- package/dist/project-units.js +9 -267
- package/dist/project-units.js.map +1 -1
- package/dist/property-set-merge.d.ts +65 -8
- package/dist/property-set-merge.d.ts.map +1 -1
- package/dist/property-set-merge.js +130 -29
- package/dist/property-set-merge.js.map +1 -1
- package/dist/property-value-parser.d.ts +55 -0
- package/dist/property-value-parser.d.ts.map +1 -0
- package/dist/property-value-parser.js +277 -0
- package/dist/property-value-parser.js.map +1 -0
- package/dist/quantity-collect.d.ts +42 -3
- package/dist/quantity-collect.d.ts.map +1 -1
- package/dist/quantity-collect.js +114 -7
- package/dist/quantity-collect.js.map +1 -1
- package/dist/query-backend-maps.d.ts +5 -8
- package/dist/query-backend-maps.d.ts.map +1 -1
- package/dist/query-backend-maps.js +155 -15
- package/dist/query-backend-maps.js.map +1 -1
- package/dist/relationship-extractor.d.ts.map +1 -1
- package/dist/relationship-extractor.js +18 -0
- package/dist/relationship-extractor.js.map +1 -1
- package/dist/scan-entities-balanced.d.ts +38 -0
- package/dist/scan-entities-balanced.d.ts.map +1 -0
- package/dist/scan-entities-balanced.js +258 -0
- package/dist/scan-entities-balanced.js.map +1 -0
- package/dist/scan-worker-inline.d.ts +17 -11
- package/dist/scan-worker-inline.d.ts.map +1 -1
- package/dist/scan-worker-inline.js +9 -235
- package/dist/scan-worker-inline.js.map +1 -1
- package/dist/scan-worker-source.d.ts +9 -0
- package/dist/scan-worker-source.d.ts.map +1 -0
- package/dist/scan-worker-source.js +383 -0
- package/dist/scan-worker-source.js.map +1 -0
- package/dist/spatial-hierarchy-builder.js +3 -3
- package/dist/spatial-hierarchy-builder.js.map +1 -1
- package/dist/step-lexing.d.ts +2 -0
- package/dist/step-lexing.d.ts.map +1 -1
- package/dist/step-lexing.js +116 -18
- package/dist/step-lexing.js.map +1 -1
- package/dist/step-trivia.d.ts +60 -0
- package/dist/step-trivia.d.ts.map +1 -0
- package/dist/step-trivia.js +63 -0
- package/dist/step-trivia.js.map +1 -0
- package/dist/tokenizer.d.ts +20 -21
- package/dist/tokenizer.d.ts.map +1 -1
- package/dist/tokenizer.js +164 -203
- package/dist/tokenizer.js.map +1 -1
- package/dist/unit-extractor.d.ts +43 -1
- package/dist/unit-extractor.d.ts.map +1 -1
- package/dist/unit-extractor.js +63 -4
- package/dist/unit-extractor.js.map +1 -1
- package/dist/worker-parser.d.ts +11 -1
- package/dist/worker-parser.d.ts.map +1 -1
- package/dist/worker-parser.js +25 -5
- package/dist/worker-parser.js.map +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The IFC2x3 property-set georeferencing path.
|
|
3
|
+
*
|
|
4
|
+
* IFC2x3 has no `IfcMapConversion`, so buildingSMART's geo-referencing guide
|
|
5
|
+
* puts the same six numbers in a property set named `ePSet_MapConversion`,
|
|
6
|
+
* paired with an `ePSet_ProjectedCRS` for the CRS metadata. This file reads
|
|
7
|
+
* that pair; `georef-map-conversion.ts` reads the IFC4 entity. The two are
|
|
8
|
+
* twins and must stay in step — most of all in what they REFUSE, which is why
|
|
9
|
+
* the property list below is written against that file's slot list.
|
|
10
|
+
*
|
|
11
|
+
* Split out of `georef-extractor.ts` for the same reason the entity reader
|
|
12
|
+
* was: that file is at its module-size budget, and this is the half of it a
|
|
13
|
+
* schema revision keeps touching.
|
|
14
|
+
*/
|
|
15
|
+
import type { IfcEntity } from './entity-extractor.js';
|
|
16
|
+
import type { GeoreferenceInfo } from './georef-extractor.js';
|
|
17
|
+
/**
|
|
18
|
+
* IFC2x3 fallback: a property set named `ePSet_MapConversion` (any casing)
|
|
19
|
+
* carrying Eastings/Northings/OrthogonalHeight (+ optional
|
|
20
|
+
* XAxisAbscissa/XAxisOrdinate/Scale/TargetCRS), optionally paired with an
|
|
21
|
+
* `ePSet_ProjectedCRS` set carrying the EPSG `Name`. Mirrors
|
|
22
|
+
* `GeoRefExtractor::extract_from_pset` in rust/core/src/georef.rs.
|
|
23
|
+
*/
|
|
24
|
+
export declare function extractEPSetMapConversion(entities: Map<number, IfcEntity>, entitiesByType: Map<string, number[]>): GeoreferenceInfo | null;
|
|
25
|
+
//# sourceMappingURL=georef-epset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"georef-epset.d.ts","sourceRoot":"","sources":["../src/georef-epset.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAA+B,MAAM,uBAAuB,CAAC;AAyH3F;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAChC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACpC,gBAAgB,GAAG,IAAI,CA2GzB"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
import { computeTransformMatrix } from './georef-transform.js';
|
|
5
|
+
import { getString, getNumber, getReference, isUnrepresentableNumericValue, } from './attribute-helpers.js';
|
|
6
|
+
import { inferMapUnitScaleFromLabel } from './map-unit-label.js';
|
|
7
|
+
/**
|
|
8
|
+
* Unwrap an IfcValue `NominalValue`. The columnar/on-demand extractor delivers
|
|
9
|
+
* typed values as a `[TYPENAME, value]` tuple (e.g.
|
|
10
|
+
* `["IFCLENGTHMEASURE", 160073528]`, `["IFCLABEL", "EPSG:7415"]`), which
|
|
11
|
+
* `getNumber`/`getString` don't see through; raw scalars (used by the
|
|
12
|
+
* entity-map callers) pass through untouched.
|
|
13
|
+
*/
|
|
14
|
+
function unwrapNominalValue(value) {
|
|
15
|
+
if (Array.isArray(value) && value.length >= 2 && typeof value[0] === 'string') {
|
|
16
|
+
return value[1];
|
|
17
|
+
}
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Read an `IfcPropertySet`'s `IfcPropertySingleValue` children into a
|
|
22
|
+
* name → raw-value map, keeping the value as-is (string or number) so both
|
|
23
|
+
* numeric (Eastings) and string (TargetCRS, EPSG Name) properties survive.
|
|
24
|
+
*/
|
|
25
|
+
function readPsetSingleValues(entities, pset) {
|
|
26
|
+
const values = {};
|
|
27
|
+
// IfcPropertySet: GlobalId (0), OwnerHistory (1), Name (2), Description (3), HasProperties (4)
|
|
28
|
+
const props = pset.attributes[4];
|
|
29
|
+
if (Array.isArray(props)) {
|
|
30
|
+
for (const propRef of props) {
|
|
31
|
+
const propId = getReference(propRef);
|
|
32
|
+
if (!propId)
|
|
33
|
+
continue;
|
|
34
|
+
const prop = entities.get(propId);
|
|
35
|
+
if (!prop)
|
|
36
|
+
continue;
|
|
37
|
+
// IfcPropertySingleValue: Name (0), Description (1), NominalValue (2)
|
|
38
|
+
const propName = getString(prop.attributes[0]);
|
|
39
|
+
if (!propName)
|
|
40
|
+
continue;
|
|
41
|
+
const raw = unwrapNominalValue(prop.attributes[2]);
|
|
42
|
+
if (typeof raw === 'number') {
|
|
43
|
+
values[propName] = raw;
|
|
44
|
+
}
|
|
45
|
+
else if (typeof raw === 'string') {
|
|
46
|
+
// Keep the raw string verbatim. Coordinate fields are coerced on read
|
|
47
|
+
// via `asNumber` (some writers store Eastings/Scale as strings), while
|
|
48
|
+
// CRS metadata that merely looks numeric — `Name: "7415"`, `MapZone:
|
|
49
|
+
// "31N"` — must stay a string so `asString` doesn't discard it.
|
|
50
|
+
values[propName] = raw;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return values;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Find the first `IfcPropertySet` whose Name matches `targetName`
|
|
58
|
+
* case-insensitively. buildingSMART's geo-referencing guide spells the
|
|
59
|
+
* IFC2x3 property sets `ePSet_…` (capital S), but real authoring tools (e.g.
|
|
60
|
+
* the `ifc-georeferencer` post-processor) write `ePset_…` (lowercase) — an
|
|
61
|
+
* exact match silently dropped those models to the legacy IfcSite/EPSG:4326
|
|
62
|
+
* fallback, so they displayed the wrong CRS.
|
|
63
|
+
*/
|
|
64
|
+
function findPsetByName(entities, entitiesByType, targetName) {
|
|
65
|
+
const target = targetName.toLowerCase();
|
|
66
|
+
const psetIds = entitiesByType.get('IfcPropertySet') || [];
|
|
67
|
+
for (const psetId of psetIds) {
|
|
68
|
+
const pset = entities.get(psetId);
|
|
69
|
+
if (!pset)
|
|
70
|
+
continue;
|
|
71
|
+
const name = getString(pset.attributes[2]);
|
|
72
|
+
if (name && name.toLowerCase() === target)
|
|
73
|
+
return pset;
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
function asString(value) {
|
|
78
|
+
if (typeof value === 'string')
|
|
79
|
+
return value.length > 0 ? value : undefined;
|
|
80
|
+
if (typeof value === 'number')
|
|
81
|
+
return String(value);
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Delegates outright rather than short-circuiting an already-`number` value.
|
|
86
|
+
*
|
|
87
|
+
* It used to read `typeof value === 'number' ? value : getNumber(value)`,
|
|
88
|
+
* which is the same hole `getNumber` itself was just closed for: `Infinity`
|
|
89
|
+
* and `NaN` are `typeof 'number'`, so the short circuit handed them straight
|
|
90
|
+
* back and this helper's contract read "finite, unless the pset already held
|
|
91
|
+
* a number". `getNumber`'s number branch now returns the value when finite and
|
|
92
|
+
* `undefined` otherwise, which is what the short circuit was approximating —
|
|
93
|
+
* so there is nothing left for it to save, and one guard is easier to keep
|
|
94
|
+
* true than two.
|
|
95
|
+
*/
|
|
96
|
+
function asNumber(value) {
|
|
97
|
+
return getNumber(value);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The ePSet placement components, mirroring `TRANSFORM_NUMERIC_SLOTS` in
|
|
101
|
+
* `georef-map-conversion.ts` — the IFC2x3 property-set spelling of the same
|
|
102
|
+
* six `IfcMapConversion` attributes, read by name instead of by slot.
|
|
103
|
+
*/
|
|
104
|
+
const EPSET_TRANSFORM_PROPERTIES = [
|
|
105
|
+
'Eastings',
|
|
106
|
+
'Northings',
|
|
107
|
+
'OrthogonalHeight',
|
|
108
|
+
'XAxisAbscissa',
|
|
109
|
+
'XAxisOrdinate',
|
|
110
|
+
'Scale',
|
|
111
|
+
];
|
|
112
|
+
/**
|
|
113
|
+
* IFC2x3 fallback: a property set named `ePSet_MapConversion` (any casing)
|
|
114
|
+
* carrying Eastings/Northings/OrthogonalHeight (+ optional
|
|
115
|
+
* XAxisAbscissa/XAxisOrdinate/Scale/TargetCRS), optionally paired with an
|
|
116
|
+
* `ePSet_ProjectedCRS` set carrying the EPSG `Name`. Mirrors
|
|
117
|
+
* `GeoRefExtractor::extract_from_pset` in rust/core/src/georef.rs.
|
|
118
|
+
*/
|
|
119
|
+
export function extractEPSetMapConversion(entities, entitiesByType) {
|
|
120
|
+
const pset = findPsetByName(entities, entitiesByType, 'ePSet_MapConversion');
|
|
121
|
+
if (!pset)
|
|
122
|
+
return null;
|
|
123
|
+
const values = readPsetSingleValues(entities, pset);
|
|
124
|
+
// The IFC2x3 twin of the refusal in `georef-map-conversion.ts`, and it has
|
|
125
|
+
// to be here rather than there because this path never builds an
|
|
126
|
+
// `IfcMapConversion` entity to hand over. The two are the same fix: a
|
|
127
|
+
// placement component the double range cannot hold refuses the placement
|
|
128
|
+
// instead of substituting a plausible number for it.
|
|
129
|
+
//
|
|
130
|
+
// Without this the `?? 0` below put a `0` easting into a `MapConversion`
|
|
131
|
+
// that still claimed `hasGeoreference: true`, with no diagnostic — the
|
|
132
|
+
// model silently placed at the projection origin. That is the exact failure
|
|
133
|
+
// the native path was changed to stop, and it was reachable here the moment
|
|
134
|
+
// `getNumber` began answering `undefined` for an overflowing literal
|
|
135
|
+
// (before that it answered `Infinity`, which is not nullish, so `?? 0` never
|
|
136
|
+
// fired and the poison at least stayed visible).
|
|
137
|
+
const refusedProperty = EPSET_TRANSFORM_PROPERTIES.find((name) => isUnrepresentableNumericValue(values[name]));
|
|
138
|
+
// Resolve the CRS name from ePSet_ProjectedCRS.Name, falling back to the
|
|
139
|
+
// MapConversion's TargetCRS (the ifc-georeferencer tool writes both as the
|
|
140
|
+
// same EPSG label). Without this the EPSG code in the file was never
|
|
141
|
+
// surfaced on the IFC2x3 path.
|
|
142
|
+
const crsPset = findPsetByName(entities, entitiesByType, 'ePSet_ProjectedCRS');
|
|
143
|
+
const crsValues = crsPset ? readPsetSingleValues(entities, crsPset) : {};
|
|
144
|
+
const crsName = asString(crsValues['Name']) ?? asString(values['TargetCRS']);
|
|
145
|
+
if (refusedProperty !== undefined) {
|
|
146
|
+
console.warn(`[georef-extractor] ePSet_MapConversion #${pset.expressId} ${refusedProperty} is ` +
|
|
147
|
+
`outside the IEEE-754 double range (${String(values[refusedProperty])}); refusing the ` +
|
|
148
|
+
`map conversion rather than placing the model at a substituted origin.`);
|
|
149
|
+
}
|
|
150
|
+
// Some writers store the offsets as strings, so coerce on read.
|
|
151
|
+
const eastings = asNumber(values['Eastings']) ?? 0;
|
|
152
|
+
const northings = asNumber(values['Northings']) ?? 0;
|
|
153
|
+
const orthogonalHeight = asNumber(values['OrthogonalHeight']) ?? 0;
|
|
154
|
+
// Reject only when there is nothing to georeference by: no CRS name AND the
|
|
155
|
+
// placement sits at the local origin. Mirrors `has_georef()` in rust/core
|
|
156
|
+
// (a CRS name OR any non-zero offset is sufficient) so a valid zero-origin
|
|
157
|
+
// placement at a real projected CRS is kept rather than dropping to the
|
|
158
|
+
// legacy IfcSite/EPSG:4326 fallback.
|
|
159
|
+
//
|
|
160
|
+
// A refused placement takes this branch too when the file names no CRS —
|
|
161
|
+
// there is genuinely nothing left to report — and the caller then falls
|
|
162
|
+
// through to the legacy IfcSite/EPSG:4326 path. That fallback is no longer
|
|
163
|
+
// silent: the refusal above has already said why the ePSet was discarded.
|
|
164
|
+
if (!crsName && (refusedProperty !== undefined
|
|
165
|
+
|| (eastings === 0 && northings === 0 && orthogonalHeight === 0))) {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
let projectedCRS;
|
|
169
|
+
if (crsName || crsPset) {
|
|
170
|
+
const mapUnit = asString(crsValues['MapUnit']);
|
|
171
|
+
projectedCRS = {
|
|
172
|
+
id: crsPset?.expressId ?? pset.expressId,
|
|
173
|
+
name: crsName ?? '',
|
|
174
|
+
description: asString(crsValues['Description']),
|
|
175
|
+
geodeticDatum: asString(crsValues['GeodeticDatum']),
|
|
176
|
+
verticalDatum: asString(crsValues['VerticalDatum']),
|
|
177
|
+
mapProjection: asString(crsValues['MapProjection']),
|
|
178
|
+
mapZone: asString(crsValues['MapZone']),
|
|
179
|
+
mapUnit,
|
|
180
|
+
// An explicit ePSet MapUnit carries its own scale (parity with the native
|
|
181
|
+
// IfcProjectedCRS path). When absent, leave it undefined so consumers fall
|
|
182
|
+
// back to the project length unit per the buildingSMART convention.
|
|
183
|
+
mapUnitScale: inferMapUnitScaleFromLabel(mapUnit),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
if (refusedProperty !== undefined) {
|
|
187
|
+
// Parity with the native path, where a refused conversion leaves
|
|
188
|
+
// `mapConversion` and `transformMatrix` absent while an `IfcProjectedCRS`
|
|
189
|
+
// still claims `hasGeoreference` — the file does declare a CRS, it just
|
|
190
|
+
// carries no usable placement. `source` stays absent for the same reason
|
|
191
|
+
// it does there: it names where the *placement* came from, and there is
|
|
192
|
+
// none.
|
|
193
|
+
return { hasGeoreference: true, projectedCRS };
|
|
194
|
+
}
|
|
195
|
+
const mapConversion = {
|
|
196
|
+
id: pset.expressId,
|
|
197
|
+
sourceCRS: 0,
|
|
198
|
+
targetCRS: 0,
|
|
199
|
+
eastings,
|
|
200
|
+
northings,
|
|
201
|
+
orthogonalHeight,
|
|
202
|
+
xAxisAbscissa: asNumber(values['XAxisAbscissa']),
|
|
203
|
+
xAxisOrdinate: asNumber(values['XAxisOrdinate']),
|
|
204
|
+
scale: asNumber(values['Scale']),
|
|
205
|
+
};
|
|
206
|
+
return {
|
|
207
|
+
hasGeoreference: true,
|
|
208
|
+
source: 'ePSetMapConversion',
|
|
209
|
+
mapConversion,
|
|
210
|
+
projectedCRS,
|
|
211
|
+
transformMatrix: computeTransformMatrix(mapConversion),
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=georef-epset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"georef-epset.js","sourceRoot":"","sources":["../src/georef-epset.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"georef-extractor.d.ts","sourceRoot":"","sources":["../src/georef-extractor.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,8BAA8B,GAC/B,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"georef-extractor.d.ts","sourceRoot":"","sources":["../src/georef-extractor.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,8BAA8B,GAC/B,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAYvD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,CAAC,EAAE,MAAM,EACtB,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,GAAG,IAAI,CAIf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,eAAe,GAAG,oBAAoB,GAAG,cAAc,CAAC;IAEjE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAGtD,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAChC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACpC,gBAAgB,CAgElB"}
|
package/dist/georef-extractor.js
CHANGED
|
@@ -5,9 +5,10 @@ import { computeTransformMatrix } from './georef-transform.js';
|
|
|
5
5
|
// The transform side lives in ./georef-transform.ts; re-exported here so
|
|
6
6
|
// every existing `from './georef-extractor.js'` import keeps resolving.
|
|
7
7
|
export { transformToWorld, transformToLocal, getCoordinateSystemDescription, } from './georef-transform.js';
|
|
8
|
-
import { getString, getNumber, getReference } from './attribute-helpers.js';
|
|
8
|
+
import { getString, getNumber, getReference, isUnrepresentableNumericValue, } from './attribute-helpers.js';
|
|
9
|
+
import { extractMapConversion } from './georef-map-conversion.js';
|
|
10
|
+
import { extractEPSetMapConversion } from './georef-epset.js';
|
|
9
11
|
import { CONVERSION_BASED_UNIT_FACTORS, SI_PREFIX_MULTIPLIERS } from './unit-extractor.js';
|
|
10
|
-
import { inferMapUnitScaleFromLabel } from './map-unit-label.js';
|
|
11
12
|
import { getAttributeNames } from './ifc-schema.js';
|
|
12
13
|
/**
|
|
13
14
|
* Compute angle to grid north from XAxisAbscissa and XAxisOrdinate (in degrees).
|
|
@@ -53,8 +54,15 @@ export function extractGeoreferencing(entities, entitiesByType) {
|
|
|
53
54
|
if (mapConversionIds.length > 0) {
|
|
54
55
|
const entity = entities.get(mapConversionIds[0]);
|
|
55
56
|
if (entity) {
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
// A refused conversion leaves the field absent and does not claim
|
|
58
|
+
// `hasGeoreference`. An IfcProjectedCRS further down may still claim it —
|
|
59
|
+
// correct: the file does declare a CRS, it just carries no usable
|
|
60
|
+
// placement.
|
|
61
|
+
const mapConversion = extractMapConversion(entity);
|
|
62
|
+
if (mapConversion) {
|
|
63
|
+
info.mapConversion = mapConversion;
|
|
64
|
+
info.hasGeoreference = true;
|
|
65
|
+
}
|
|
58
66
|
}
|
|
59
67
|
}
|
|
60
68
|
// Extract IfcProjectedCRS
|
|
@@ -87,153 +95,6 @@ export function extractGeoreferencing(entities, entitiesByType) {
|
|
|
87
95
|
}
|
|
88
96
|
return info;
|
|
89
97
|
}
|
|
90
|
-
/**
|
|
91
|
-
* Unwrap an IfcValue `NominalValue`. The columnar/on-demand extractor delivers
|
|
92
|
-
* typed values as a `[TYPENAME, value]` tuple (e.g.
|
|
93
|
-
* `["IFCLENGTHMEASURE", 160073528]`, `["IFCLABEL", "EPSG:7415"]`), which
|
|
94
|
-
* `getNumber`/`getString` don't see through; raw scalars (used by the
|
|
95
|
-
* entity-map callers) pass through untouched.
|
|
96
|
-
*/
|
|
97
|
-
function unwrapNominalValue(value) {
|
|
98
|
-
if (Array.isArray(value) && value.length >= 2 && typeof value[0] === 'string') {
|
|
99
|
-
return value[1];
|
|
100
|
-
}
|
|
101
|
-
return value;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Read an `IfcPropertySet`'s `IfcPropertySingleValue` children into a
|
|
105
|
-
* name → raw-value map, keeping the value as-is (string or number) so both
|
|
106
|
-
* numeric (Eastings) and string (TargetCRS, EPSG Name) properties survive.
|
|
107
|
-
*/
|
|
108
|
-
function readPsetSingleValues(entities, pset) {
|
|
109
|
-
const values = {};
|
|
110
|
-
// IfcPropertySet: GlobalId (0), OwnerHistory (1), Name (2), Description (3), HasProperties (4)
|
|
111
|
-
const props = pset.attributes[4];
|
|
112
|
-
if (Array.isArray(props)) {
|
|
113
|
-
for (const propRef of props) {
|
|
114
|
-
const propId = getReference(propRef);
|
|
115
|
-
if (!propId)
|
|
116
|
-
continue;
|
|
117
|
-
const prop = entities.get(propId);
|
|
118
|
-
if (!prop)
|
|
119
|
-
continue;
|
|
120
|
-
// IfcPropertySingleValue: Name (0), Description (1), NominalValue (2)
|
|
121
|
-
const propName = getString(prop.attributes[0]);
|
|
122
|
-
if (!propName)
|
|
123
|
-
continue;
|
|
124
|
-
const raw = unwrapNominalValue(prop.attributes[2]);
|
|
125
|
-
if (typeof raw === 'number') {
|
|
126
|
-
values[propName] = raw;
|
|
127
|
-
}
|
|
128
|
-
else if (typeof raw === 'string') {
|
|
129
|
-
// Keep the raw string verbatim. Coordinate fields are coerced on read
|
|
130
|
-
// via `asNumber` (some writers store Eastings/Scale as strings), while
|
|
131
|
-
// CRS metadata that merely looks numeric — `Name: "7415"`, `MapZone:
|
|
132
|
-
// "31N"` — must stay a string so `asString` doesn't discard it.
|
|
133
|
-
values[propName] = raw;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
return values;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Find the first `IfcPropertySet` whose Name matches `targetName`
|
|
141
|
-
* case-insensitively. buildingSMART's geo-referencing guide spells the
|
|
142
|
-
* IFC2x3 property sets `ePSet_…` (capital S), but real authoring tools (e.g.
|
|
143
|
-
* the `ifc-georeferencer` post-processor) write `ePset_…` (lowercase) — an
|
|
144
|
-
* exact match silently dropped those models to the legacy IfcSite/EPSG:4326
|
|
145
|
-
* fallback, so they displayed the wrong CRS.
|
|
146
|
-
*/
|
|
147
|
-
function findPsetByName(entities, entitiesByType, targetName) {
|
|
148
|
-
const target = targetName.toLowerCase();
|
|
149
|
-
const psetIds = entitiesByType.get('IfcPropertySet') || [];
|
|
150
|
-
for (const psetId of psetIds) {
|
|
151
|
-
const pset = entities.get(psetId);
|
|
152
|
-
if (!pset)
|
|
153
|
-
continue;
|
|
154
|
-
const name = getString(pset.attributes[2]);
|
|
155
|
-
if (name && name.toLowerCase() === target)
|
|
156
|
-
return pset;
|
|
157
|
-
}
|
|
158
|
-
return null;
|
|
159
|
-
}
|
|
160
|
-
function asString(value) {
|
|
161
|
-
if (typeof value === 'string')
|
|
162
|
-
return value.length > 0 ? value : undefined;
|
|
163
|
-
if (typeof value === 'number')
|
|
164
|
-
return String(value);
|
|
165
|
-
return undefined;
|
|
166
|
-
}
|
|
167
|
-
function asNumber(value) {
|
|
168
|
-
return typeof value === 'number' ? value : getNumber(value);
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* IFC2x3 fallback: a property set named `ePSet_MapConversion` (any casing)
|
|
172
|
-
* carrying Eastings/Northings/OrthogonalHeight (+ optional
|
|
173
|
-
* XAxisAbscissa/XAxisOrdinate/Scale/TargetCRS), optionally paired with an
|
|
174
|
-
* `ePSet_ProjectedCRS` set carrying the EPSG `Name`. Mirrors
|
|
175
|
-
* `GeoRefExtractor::extract_from_pset` in rust/core/src/georef.rs.
|
|
176
|
-
*/
|
|
177
|
-
function extractEPSetMapConversion(entities, entitiesByType) {
|
|
178
|
-
const pset = findPsetByName(entities, entitiesByType, 'ePSet_MapConversion');
|
|
179
|
-
if (!pset)
|
|
180
|
-
return null;
|
|
181
|
-
const values = readPsetSingleValues(entities, pset);
|
|
182
|
-
// Some writers store the offsets as strings, so coerce on read.
|
|
183
|
-
const eastings = asNumber(values['Eastings']) ?? 0;
|
|
184
|
-
const northings = asNumber(values['Northings']) ?? 0;
|
|
185
|
-
const orthogonalHeight = asNumber(values['OrthogonalHeight']) ?? 0;
|
|
186
|
-
const mapConversion = {
|
|
187
|
-
id: pset.expressId,
|
|
188
|
-
sourceCRS: 0,
|
|
189
|
-
targetCRS: 0,
|
|
190
|
-
eastings,
|
|
191
|
-
northings,
|
|
192
|
-
orthogonalHeight,
|
|
193
|
-
xAxisAbscissa: asNumber(values['XAxisAbscissa']),
|
|
194
|
-
xAxisOrdinate: asNumber(values['XAxisOrdinate']),
|
|
195
|
-
scale: asNumber(values['Scale']),
|
|
196
|
-
};
|
|
197
|
-
// Resolve the CRS name from ePSet_ProjectedCRS.Name, falling back to the
|
|
198
|
-
// MapConversion's TargetCRS (the ifc-georeferencer tool writes both as the
|
|
199
|
-
// same EPSG label). Without this the EPSG code in the file was never
|
|
200
|
-
// surfaced on the IFC2x3 path.
|
|
201
|
-
const crsPset = findPsetByName(entities, entitiesByType, 'ePSet_ProjectedCRS');
|
|
202
|
-
const crsValues = crsPset ? readPsetSingleValues(entities, crsPset) : {};
|
|
203
|
-
const crsName = asString(crsValues['Name']) ?? asString(values['TargetCRS']);
|
|
204
|
-
// Reject only when there is nothing to georeference by: no CRS name AND the
|
|
205
|
-
// placement sits at the local origin. Mirrors `has_georef()` in rust/core
|
|
206
|
-
// (a CRS name OR any non-zero offset is sufficient) so a valid zero-origin
|
|
207
|
-
// placement at a real projected CRS is kept rather than dropping to the
|
|
208
|
-
// legacy IfcSite/EPSG:4326 fallback.
|
|
209
|
-
if (!crsName && eastings === 0 && northings === 0 && orthogonalHeight === 0)
|
|
210
|
-
return null;
|
|
211
|
-
let projectedCRS;
|
|
212
|
-
if (crsName || crsPset) {
|
|
213
|
-
const mapUnit = asString(crsValues['MapUnit']);
|
|
214
|
-
projectedCRS = {
|
|
215
|
-
id: crsPset?.expressId ?? pset.expressId,
|
|
216
|
-
name: crsName ?? '',
|
|
217
|
-
description: asString(crsValues['Description']),
|
|
218
|
-
geodeticDatum: asString(crsValues['GeodeticDatum']),
|
|
219
|
-
verticalDatum: asString(crsValues['VerticalDatum']),
|
|
220
|
-
mapProjection: asString(crsValues['MapProjection']),
|
|
221
|
-
mapZone: asString(crsValues['MapZone']),
|
|
222
|
-
mapUnit,
|
|
223
|
-
// An explicit ePSet MapUnit carries its own scale (parity with the native
|
|
224
|
-
// IfcProjectedCRS path). When absent, leave it undefined so consumers fall
|
|
225
|
-
// back to the project length unit per the buildingSMART convention.
|
|
226
|
-
mapUnitScale: inferMapUnitScaleFromLabel(mapUnit),
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
return {
|
|
230
|
-
hasGeoreference: true,
|
|
231
|
-
source: 'ePSetMapConversion',
|
|
232
|
-
mapConversion,
|
|
233
|
-
projectedCRS,
|
|
234
|
-
transformMatrix: computeTransformMatrix(mapConversion),
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
98
|
function getAttributeValueByName(entity, attributeName) {
|
|
238
99
|
const attributeNames = getAttributeNames(entity.type);
|
|
239
100
|
const index = attributeNames.indexOf(attributeName);
|
|
@@ -241,6 +102,12 @@ function getAttributeValueByName(entity, attributeName) {
|
|
|
241
102
|
return undefined;
|
|
242
103
|
return entity.attributes[index];
|
|
243
104
|
}
|
|
105
|
+
// Canonical sign lives on the first non-zero component (`minutesRaw < 0`
|
|
106
|
+
// below already handles it); this also defensively honours `-0` on a
|
|
107
|
+
// zero-magnitude degree token, which `x < 0` alone misses (IEEE-754 -0).
|
|
108
|
+
function isNegativeComponent(n) {
|
|
109
|
+
return n < 0 || Object.is(n, -0);
|
|
110
|
+
}
|
|
244
111
|
function compoundPlaneAngleToDecimalDegrees(value) {
|
|
245
112
|
if (!Array.isArray(value) || value.length < 3)
|
|
246
113
|
return undefined;
|
|
@@ -250,7 +117,12 @@ function compoundPlaneAngleToDecimalDegrees(value) {
|
|
|
250
117
|
if (numbers.length < 3)
|
|
251
118
|
return undefined;
|
|
252
119
|
const [degreesRaw, minutesRaw, secondsRaw, millionthsRaw = 0] = numbers;
|
|
253
|
-
const sign = degreesRaw
|
|
120
|
+
const sign = isNegativeComponent(degreesRaw) ||
|
|
121
|
+
isNegativeComponent(minutesRaw) ||
|
|
122
|
+
isNegativeComponent(secondsRaw) ||
|
|
123
|
+
isNegativeComponent(millionthsRaw)
|
|
124
|
+
? -1
|
|
125
|
+
: 1;
|
|
254
126
|
const degrees = Math.abs(degreesRaw);
|
|
255
127
|
const minutes = Math.abs(minutesRaw);
|
|
256
128
|
const seconds = Math.abs(secondsRaw);
|
|
@@ -265,7 +137,20 @@ function extractLegacySiteGeoreference(entities, entitiesByType) {
|
|
|
265
137
|
continue;
|
|
266
138
|
const latitude = compoundPlaneAngleToDecimalDegrees(getAttributeValueByName(site, 'RefLatitude'));
|
|
267
139
|
const longitude = compoundPlaneAngleToDecimalDegrees(getAttributeValueByName(site, 'RefLongitude'));
|
|
268
|
-
|
|
140
|
+
// The same rule again, on the legacy site path. An absent `RefElevation`
|
|
141
|
+
// legitimately means "at the datum" and keeps its `0`; an elevation the
|
|
142
|
+
// double range cannot hold does not, and this site is skipped so a later
|
|
143
|
+
// one — or no georeference at all — is reported instead of a model pinned
|
|
144
|
+
// to the datum. `?? 0` alone stopped being safe when `getNumber` began
|
|
145
|
+
// answering `undefined` for such a literal.
|
|
146
|
+
const rawElevation = getAttributeValueByName(site, 'RefElevation');
|
|
147
|
+
if (isUnrepresentableNumericValue(rawElevation)) {
|
|
148
|
+
console.warn(`[georef-extractor] IfcSite #${site.expressId} RefElevation is outside the ` +
|
|
149
|
+
`IEEE-754 double range (${String(rawElevation)}); skipping this site rather than ` +
|
|
150
|
+
`reporting it at a substituted elevation.`);
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
const elevation = getNumber(rawElevation) ?? 0;
|
|
269
154
|
if (latitude === undefined || longitude === undefined)
|
|
270
155
|
continue;
|
|
271
156
|
return {
|
|
@@ -292,28 +177,6 @@ function extractLegacySiteGeoreference(entities, entitiesByType) {
|
|
|
292
177
|
}
|
|
293
178
|
return null;
|
|
294
179
|
}
|
|
295
|
-
function extractMapConversion(entity) {
|
|
296
|
-
// IfcMapConversion attributes (IFC4):
|
|
297
|
-
// [0] SourceCRS (IfcCoordinateReferenceSystem)
|
|
298
|
-
// [1] TargetCRS (IfcCoordinateReferenceSystem)
|
|
299
|
-
// [2] Eastings (IfcLengthMeasure)
|
|
300
|
-
// [3] Northings (IfcLengthMeasure)
|
|
301
|
-
// [4] OrthogonalHeight (IfcLengthMeasure)
|
|
302
|
-
// [5] XAxisAbscissa (OPTIONAL IfcReal)
|
|
303
|
-
// [6] XAxisOrdinate (OPTIONAL IfcReal)
|
|
304
|
-
// [7] Scale (OPTIONAL IfcReal)
|
|
305
|
-
return {
|
|
306
|
-
id: entity.expressId,
|
|
307
|
-
sourceCRS: getReference(entity.attributes[0]) || 0,
|
|
308
|
-
targetCRS: getReference(entity.attributes[1]) || 0,
|
|
309
|
-
eastings: getNumber(entity.attributes[2]) || 0,
|
|
310
|
-
northings: getNumber(entity.attributes[3]) || 0,
|
|
311
|
-
orthogonalHeight: getNumber(entity.attributes[4]) || 0,
|
|
312
|
-
xAxisAbscissa: getNumber(entity.attributes[5]),
|
|
313
|
-
xAxisOrdinate: getNumber(entity.attributes[6]),
|
|
314
|
-
scale: getNumber(entity.attributes[7]),
|
|
315
|
-
};
|
|
316
|
-
}
|
|
317
180
|
/**
|
|
318
181
|
* Resolve an `IfcMeasureWithUnit` reference to metres.
|
|
319
182
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"georef-extractor.js","sourceRoot":"","sources":["../src/georef-extractor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"georef-extractor.js","sourceRoot":"","sources":["../src/georef-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads one `IfcMapConversion` (or `IfcMapConversionScaled`) into a
|
|
3
|
+
* `MapConversion`, or refuses it.
|
|
4
|
+
*
|
|
5
|
+
* Split out of `georef-extractor.ts` the same way the transform side lives in
|
|
6
|
+
* `georef-transform.ts`: the refusal rule below is the part most likely to
|
|
7
|
+
* grow — every mandatory component added to a future schema revision is
|
|
8
|
+
* another slot to check — and it does not belong in a file that is already at
|
|
9
|
+
* its module-size budget.
|
|
10
|
+
*/
|
|
11
|
+
import type { IfcEntity } from './entity-extractor.js';
|
|
12
|
+
import type { MapConversion } from './georef-extractor.js';
|
|
13
|
+
/**
|
|
14
|
+
* Refuse the whole map conversion when a component the transform reads names a
|
|
15
|
+
* number the double range cannot hold, rather than letting `|| 0` put a zero
|
|
16
|
+
* there.
|
|
17
|
+
*
|
|
18
|
+
* `eastings`/`northings`/`orthogonalHeight` are typed `number` and feed
|
|
19
|
+
* `transformMatrix`, the STEP georeferencing writer and the viewer's placement
|
|
20
|
+
* editor, so absence cannot be expressed in the field itself.
|
|
21
|
+
* `GeoreferenceInfo.mapConversion` IS optional, and every consumer already
|
|
22
|
+
* reaches it as `georef.mapConversion?.eastings` — so refusing here reports
|
|
23
|
+
* "this file has no usable georeference", which is true and which a caller can
|
|
24
|
+
* see. A zero easting is a plausible coordinate: it silently places the model
|
|
25
|
+
* at the projection origin, and nothing downstream can tell that apart from a
|
|
26
|
+
* model that really sits there.
|
|
27
|
+
*/
|
|
28
|
+
export declare function extractMapConversion(entity: IfcEntity): MapConversion | null;
|
|
29
|
+
//# sourceMappingURL=georef-map-conversion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"georef-map-conversion.d.ts","sourceRoot":"","sources":["../src/georef-map-conversion.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AA4B3D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,IAAI,CAiC5E"}
|