@itwin/core-backend 5.9.0-dev.9 → 5.9.1
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/CHANGELOG.md +45 -1
- package/lib/cjs/BriefcaseManager.d.ts +14 -62
- package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
- package/lib/cjs/BriefcaseManager.js +29 -159
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/Category.d.ts +4 -4
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.d.ts +9 -1
- package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +7 -1
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChangesetReader.d.ts +186 -0
- package/lib/cjs/ChangesetReader.d.ts.map +1 -0
- package/lib/cjs/ChangesetReader.js +372 -0
- package/lib/cjs/ChangesetReader.js.map +1 -0
- package/lib/cjs/ChangesetReaderTypes.d.ts +120 -0
- package/lib/cjs/ChangesetReaderTypes.d.ts.map +1 -0
- package/lib/cjs/ChangesetReaderTypes.js +23 -0
- package/lib/cjs/ChangesetReaderTypes.js.map +1 -0
- package/lib/cjs/CloudSqlite.d.ts +1 -1
- package/lib/cjs/CloudSqlite.d.ts.map +1 -1
- package/lib/cjs/CloudSqlite.js +68 -13
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeSpecs.d.ts +3 -3
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/ConcurrentQuery.js.map +1 -1
- package/lib/cjs/DevTools.js.map +1 -1
- package/lib/cjs/DisplayStyle.d.ts +2 -2
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/EditTxn.d.ts +55 -1
- package/lib/cjs/EditTxn.d.ts.map +1 -1
- package/lib/cjs/EditTxn.js +43 -1
- package/lib/cjs/EditTxn.js.map +1 -1
- package/lib/cjs/Element.d.ts +79 -10
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +38 -2
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.d.ts +1 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementGraphics.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.d.ts +5 -5
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/ExternalSource.d.ts +2 -2
- package/lib/cjs/ExternalSource.d.ts.map +1 -1
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/GeographicCRSServices.d.ts +15 -0
- package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
- package/lib/cjs/GeographicCRSServices.js +13 -4
- package/lib/cjs/GeographicCRSServices.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +31 -23
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +44 -25
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/cjs/IModelJsFs.d.ts +2 -0
- package/lib/cjs/IModelJsFs.d.ts.map +1 -1
- package/lib/cjs/IModelJsFs.js +14 -0
- package/lib/cjs/IModelJsFs.js.map +1 -1
- package/lib/cjs/IpcHost.d.ts.map +1 -1
- package/lib/cjs/IpcHost.js +20 -9
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.d.ts +6 -6
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/Material.d.ts +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.d.ts +40 -6
- package/lib/cjs/Model.d.ts.map +1 -1
- package/lib/cjs/Model.js +24 -0
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/PartialChangeUnifier.d.ts +77 -0
- package/lib/cjs/PartialChangeUnifier.d.ts.map +1 -0
- package/lib/cjs/PartialChangeUnifier.js +234 -0
- package/lib/cjs/PartialChangeUnifier.js.map +1 -0
- package/lib/cjs/Relationship.d.ts +10 -10
- package/lib/cjs/Relationship.js +6 -6
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/SheetIndex.d.ts +4 -4
- package/lib/cjs/SheetIndex.d.ts.map +1 -1
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/SqliteChangesetReader.d.ts.map +1 -1
- package/lib/cjs/SqliteChangesetReader.js +1 -1
- package/lib/cjs/SqliteChangesetReader.js.map +1 -1
- package/lib/cjs/Texture.d.ts +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts +17 -0
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +120 -13
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +25 -13
- package/lib/cjs/ViewDefinition.d.ts.map +1 -1
- package/lib/cjs/ViewDefinition.js +77 -25
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStore.d.ts.map +1 -1
- package/lib/cjs/ViewStore.js +63 -21
- package/lib/cjs/ViewStore.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/core-backend.d.ts +3 -0
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +3 -0
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.d.ts +1 -1
- package/lib/cjs/domains/FunctionalElements.d.ts.map +1 -1
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/GenericElements.d.ts +2 -2
- package/lib/cjs/domains/GenericElements.d.ts.map +1 -1
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.d.ts +2 -2
- package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/IntegrityCheck.d.ts +10 -10
- package/lib/cjs/internal/IntegrityCheck.js +22 -22
- package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/workspace/Settings.d.ts +6 -4
- package/lib/cjs/workspace/Settings.d.ts.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/esm/BriefcaseManager.d.ts +14 -62
- package/lib/esm/BriefcaseManager.d.ts.map +1 -1
- package/lib/esm/BriefcaseManager.js +30 -160
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/Category.d.ts +4 -4
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.d.ts +9 -1
- package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +7 -1
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChangesetReader.d.ts +186 -0
- package/lib/esm/ChangesetReader.d.ts.map +1 -0
- package/lib/esm/ChangesetReader.js +368 -0
- package/lib/esm/ChangesetReader.js.map +1 -0
- package/lib/esm/ChangesetReaderTypes.d.ts +120 -0
- package/lib/esm/ChangesetReaderTypes.d.ts.map +1 -0
- package/lib/esm/ChangesetReaderTypes.js +20 -0
- package/lib/esm/ChangesetReaderTypes.js.map +1 -0
- package/lib/esm/CloudSqlite.d.ts +1 -1
- package/lib/esm/CloudSqlite.d.ts.map +1 -1
- package/lib/esm/CloudSqlite.js +69 -14
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/CodeSpecs.d.ts +3 -3
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/ConcurrentQuery.js.map +1 -1
- package/lib/esm/DevTools.js.map +1 -1
- package/lib/esm/DisplayStyle.d.ts +2 -2
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECSqlStatement.d.ts.map +1 -1
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/EditTxn.d.ts +55 -1
- package/lib/esm/EditTxn.d.ts.map +1 -1
- package/lib/esm/EditTxn.js +43 -1
- package/lib/esm/EditTxn.js.map +1 -1
- package/lib/esm/Element.d.ts +79 -10
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +38 -2
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.d.ts +1 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementGraphics.js.map +1 -1
- package/lib/esm/ElementTreeWalker.d.ts +5 -5
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/ExternalSource.d.ts +2 -2
- package/lib/esm/ExternalSource.d.ts.map +1 -1
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/GeographicCRSServices.d.ts +15 -0
- package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
- package/lib/esm/GeographicCRSServices.js +12 -4
- package/lib/esm/GeographicCRSServices.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +31 -23
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +45 -26
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/esm/IModelJsFs.d.ts +2 -0
- package/lib/esm/IModelJsFs.d.ts.map +1 -1
- package/lib/esm/IModelJsFs.js +14 -0
- package/lib/esm/IModelJsFs.js.map +1 -1
- package/lib/esm/IpcHost.d.ts.map +1 -1
- package/lib/esm/IpcHost.js +20 -9
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.d.ts +6 -6
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/Material.d.ts +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.d.ts +40 -6
- package/lib/esm/Model.d.ts.map +1 -1
- package/lib/esm/Model.js +24 -0
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/PartialChangeUnifier.d.ts +77 -0
- package/lib/esm/PartialChangeUnifier.d.ts.map +1 -0
- package/lib/esm/PartialChangeUnifier.js +230 -0
- package/lib/esm/PartialChangeUnifier.js.map +1 -0
- package/lib/esm/Relationship.d.ts +10 -10
- package/lib/esm/Relationship.js +6 -6
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/SheetIndex.d.ts +4 -4
- package/lib/esm/SheetIndex.d.ts.map +1 -1
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/SqliteChangesetReader.d.ts.map +1 -1
- package/lib/esm/SqliteChangesetReader.js +1 -1
- package/lib/esm/SqliteChangesetReader.js.map +1 -1
- package/lib/esm/Texture.d.ts +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TxnManager.d.ts +17 -0
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +121 -14
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +25 -13
- package/lib/esm/ViewDefinition.d.ts.map +1 -1
- package/lib/esm/ViewDefinition.js +78 -26
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/ViewStore.d.ts.map +1 -1
- package/lib/esm/ViewStore.js +64 -22
- package/lib/esm/ViewStore.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/core-backend.d.ts +3 -0
- package/lib/esm/core-backend.d.ts.map +1 -1
- package/lib/esm/core-backend.js +3 -0
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.d.ts +1 -1
- package/lib/esm/domains/FunctionalElements.d.ts.map +1 -1
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/GenericElements.d.ts +2 -2
- package/lib/esm/domains/GenericElements.d.ts.map +1 -1
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.d.ts +2 -2
- package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/IntegrityCheck.d.ts +10 -10
- package/lib/esm/internal/IntegrityCheck.js +22 -22
- package/lib/esm/internal/IntegrityCheck.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.d.ts +1 -0
- package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
- package/lib/esm/test/IModelTestUtils.js +5 -0
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/IpcHost.test.js +112 -0
- package/lib/esm/test/IpcHost.test.js.map +1 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js +0 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js +819 -26
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +144 -3
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.js +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/hubaccess/SemanticRebase.test.js +2242 -68
- package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +1 -1
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/imodel/SchemaXmlImport.test.js +64 -0
- package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
- package/lib/esm/test/misc/GeoServices.test.js +43 -1
- package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +4184 -1654
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/DeleteElements.test.d.ts +2 -0
- package/lib/esm/test/standalone/DeleteElements.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/DeleteElements.test.js +625 -0
- package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -0
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/IntegrityCheck.test.js +214 -5
- package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts +2 -0
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +1862 -0
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -0
- package/lib/esm/test/standalone/TxnManager.test.js +90 -0
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js +18 -7
- package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/workspace/Settings.d.ts +6 -4
- package/lib/esm/workspace/Settings.d.ts.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/package.json +15 -15
|
@@ -114,4 +114,68 @@ describe("Schema XML Import Tests", () => {
|
|
|
114
114
|
}
|
|
115
115
|
});
|
|
116
116
|
});
|
|
117
|
+
describe("exportSchemaXmlString", () => {
|
|
118
|
+
const schemaXml32 = `<?xml version="1.0" encoding="UTF-8"?>
|
|
119
|
+
<ECSchema schemaName="TestSchema" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
120
|
+
<ECSchemaReference name="BisCore" version="1.0.23" alias="bis"/>
|
|
121
|
+
|
|
122
|
+
<ECEntityClass typeName="TestClass">
|
|
123
|
+
<BaseClass>bis:GraphicalElement2d</BaseClass>
|
|
124
|
+
<ECProperty propertyName="Name" typeName="string"/>
|
|
125
|
+
</ECEntityClass>
|
|
126
|
+
</ECSchema>`;
|
|
127
|
+
let imodel;
|
|
128
|
+
before(async () => {
|
|
129
|
+
const filePath = IModelTestUtils.prepareOutputFile("exportSchemaXmlString", "exportSchemaXmlString.bim");
|
|
130
|
+
imodel = SnapshotDb.createEmpty(filePath, { rootSubject: { name: "exportSchemaXmlStringTest" } });
|
|
131
|
+
await imodel.importSchemaStrings([schemaXml32]);
|
|
132
|
+
});
|
|
133
|
+
after(() => {
|
|
134
|
+
imodel.close();
|
|
135
|
+
});
|
|
136
|
+
it("default ECSpecVersion arg return an 3.2 XML", () => {
|
|
137
|
+
const xml = imodel.exportSchemaXmlString("TestSchema");
|
|
138
|
+
assert.isDefined(xml, "expected a non-undefined result for an existing schema");
|
|
139
|
+
assert.include(xml, "Bentley.ECXML.3.2", "expected EC 3.2 namespace when no version is supplied");
|
|
140
|
+
assert.include(xml, "TestSchema", "schema name should be present in output");
|
|
141
|
+
});
|
|
142
|
+
it("returns undefined for a schema that does not exist", () => {
|
|
143
|
+
const xml = imodel.exportSchemaXmlString("NonExistentSchema");
|
|
144
|
+
assert.isUndefined(xml, "expected undefined for an unknown schema name");
|
|
145
|
+
});
|
|
146
|
+
it("test returned XML contains the entity class", () => {
|
|
147
|
+
const xml = imodel.exportSchemaXmlString("TestSchema");
|
|
148
|
+
assert.isDefined(xml);
|
|
149
|
+
assert.match(xml, /^<\?xml|^<ECSchema/, "output should start with an XML declaration or root element");
|
|
150
|
+
assert.include(xml, "TestClass", "ECEntityClass 'TestClass' should be present in serialised output");
|
|
151
|
+
assert.include(xml, "Name", "property 'Name' should be present in serialised output");
|
|
152
|
+
});
|
|
153
|
+
it("ECSpecVersion 3.2 version returns 3.2 XML", () => {
|
|
154
|
+
const version = { readVersion: 3, writeVersion: 2 };
|
|
155
|
+
const xml = imodel.exportSchemaXmlString("TestSchema", version);
|
|
156
|
+
assert.isDefined(xml);
|
|
157
|
+
assert.include(xml, "Bentley.ECXML.3.2");
|
|
158
|
+
assert.include(xml, "TestSchema");
|
|
159
|
+
});
|
|
160
|
+
it("ECSpecVersion 3.1 version returns 3.1 XML", () => {
|
|
161
|
+
const version = { readVersion: 3, writeVersion: 1 };
|
|
162
|
+
const xml = imodel.exportSchemaXmlString("TestSchema", version);
|
|
163
|
+
assert.isDefined(xml);
|
|
164
|
+
assert.include(xml, "Bentley.ECXML.3.1", "expected EC 3.1 namespace");
|
|
165
|
+
assert.notInclude(xml, "Bentley.ECXML.3.2", "should not contain 3.2 namespace when requesting 3.1");
|
|
166
|
+
});
|
|
167
|
+
it("ECSpecVersion 3.0 version returns 3.0 XML", () => {
|
|
168
|
+
const version = { readVersion: 3, writeVersion: 0 };
|
|
169
|
+
const xml = imodel.exportSchemaXmlString("TestSchema", version);
|
|
170
|
+
assert.isDefined(xml);
|
|
171
|
+
assert.include(xml, "Bentley.ECXML.3.0", "expected EC 3.0 namespace");
|
|
172
|
+
assert.notInclude(xml, "Bentley.ECXML.3.2", "should not contain 3.2 namespace when requesting 3.0");
|
|
173
|
+
});
|
|
174
|
+
it("ECSpecVersion 2.0 version returns 2.0 XML", () => {
|
|
175
|
+
const version = { readVersion: 2, writeVersion: 0 };
|
|
176
|
+
const xml = imodel.exportSchemaXmlString("TestSchema", version);
|
|
177
|
+
assert.isDefined(xml, "expected a result for EC 2.0 export");
|
|
178
|
+
assert.notInclude(xml, "Bentley.ECXML.3.", "EC 2.0 output should not contain an EC 3.x namespace URI");
|
|
179
|
+
});
|
|
180
|
+
});
|
|
117
181
|
//# sourceMappingURL=SchemaXmlImport.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaXmlImport.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/SchemaXmlImport.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { PhysicalElement, SnapshotDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { Logger, LogLevel } from \"@itwin/core-bentley\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { EntityClass, Format } from \"@itwin/ecschema-metadata\";\n\ndescribe(\"Schema XML Import Tests\", () => {\n before(() => {\n // initialize logging\n if (false) {\n Logger.initializeToConsole();\n Logger.setLevelDefault(LogLevel.Error);\n }\n });\n\n it(\"should import schema XML\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"SchemaXMLImport.bim\");\n const imodel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"SchemaXMLImportTest\" } });\n\n try {\n const schemaFilePath = path.join(KnownTestLocations.assetsDir, \"Test3.ecschema.xml\");\n const schemaString = fs.readFileSync(schemaFilePath, \"utf8\");\n\n await imodel.importSchemaStrings([schemaString]); // will throw an exception if import fails\n\n const testDomainClass = await imodel.schemaContext.getSchemaItem(\"Test3.Test3Element\", EntityClass);\n assert.isDefined(testDomainClass);\n\n assert.isDefined(testDomainClass?.baseClass);\n\n assert.equal(testDomainClass?.baseClass?.fullName, PhysicalElement.classFullName.replace(\":\", \".\"));\n } finally {\n imodel.close();\n }\n });\n\n it(\"Schema import for newer ECXml Versions\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"SchemaVersionTest.bim\");\n const imodel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"SchemaVersionTest\" } });\n\n try {\n const helperFunction = async (imodelDb: SnapshotDb, xmlSchema: string[], importSchema: boolean) => {\n try {\n // ECObjects is expected to throw for schemas that fail to import\n if (importSchema)\n await imodelDb.importSchemaStrings(xmlSchema);\n else\n imodelDb.getSchemaProps(xmlSchema[0]);\n } catch {\n return false;\n }\n return true;\n };\n\n // Incrementing major ECXml version is not supported\n for (const testCase of [`4.1`, `5.10`]) {\n assert(!(await helperFunction(imodel, [`<ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.${testCase}\"/>`], true)), `Schema ${testCase} import should not have succeeded.`);\n assert(!(await helperFunction(imodel, [`TestSchema`], false)), `Schema ${testCase} test should not have succeeded.`);\n }\n\n // Importing a set of schemas should all fail if any one of them fails\n {\n const schemaXmls = [`<ECSchema schemaName=\"TestSchema1\" alias=\"ts1\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\"/>`,\n `<ECSchema schemaName=\"TestSchema2\" alias=\"ts2\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.8\"/>`,\n `<ECSchema schemaName=\"TestSchema3\" alias=\"ts3\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.4.5\"/>`];\n\n assert(!(await helperFunction(imodel, schemaXmls, true)), `Schema import should not have succeeded.`);\n assert(!(await helperFunction(imodel, [`TestSchema1`], false)), `Schema TestSchema1 import should not have succeeded.`);\n assert(!(await helperFunction(imodel, [`TestSchema2`], false)), `Schema TestSchema2 import should not have succeeded.`);\n assert(!(await helperFunction(imodel, [`TestSchema3`], false)), `Schema TestSchema3 import should not have succeeded.`);\n }\n\n // Schema should be imported successfully\n for (const testCase of [`3.2`, `3.5`]) {\n assert(await helperFunction(imodel, [`<ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.${testCase}\"/>`], true), `Schema ${testCase} import should have succeeded.`);\n assert(await helperFunction(imodel, [`TestSchema`], false), `Schema ${testCase} test should have succeeded.`);\n }\n } finally {\n imodel.close();\n }\n });\n\n it.skip(\"should roundtrip ratio format properties\", async () => {\n // Create a separate iModel for this test\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"RatioFormatRoundtrip.bim\");\n const testIModel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"RatioFormatTest\" } });\n\n try {\n const schemaXml = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"RatioFormatTest\" alias=\"rft\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"Units\" version=\"01.00.09\" alias=\"u\"/>\n <Format typeName=\"TestRatioFormat\" type=\"Ratio\" ratioType=\"OneToN\" ratioSeparator=\":\" ratioFormatType=\"Decimal\" precision=\"4\" formatTraits=\"trailZeroes|showUnitLabel\">\n <Composite>\n <Unit>u:M</Unit>\n </Composite>\n </Format>\n <Format typeName=\"TestRatioFormat2\" type=\"Ratio\" ratioType=\"NToOne\" ratioSeparator=\"=\" ratioFormatType=\"Fractional\" precision=\"8\" formatTraits=\"keepSingleZero\">\n <Composite>\n <Unit>u:M</Unit>\n </Composite>\n </Format>\n </ECSchema>`;\n\n // Import schema into iModel\n await testIModel.importSchemaStrings([schemaXml]);\n\n // Read back the format from the iModel's schema context\n const format1 = await testIModel.schemaContext.getSchemaItem(\"RatioFormatTest.TestRatioFormat\", Format);\n assert.isDefined(format1);\n assert.strictEqual(format1?.ratioType, \"OneToN\");\n assert.strictEqual(format1?.ratioSeparator, \":\");\n assert.strictEqual(format1?.ratioFormatType, \"Decimal\");\n\n const format2 = await testIModel.schemaContext.getSchemaItem(\"RatioFormatTest.TestRatioFormat2\", Format);\n assert.isDefined(format2);\n assert.strictEqual(format2?.ratioType, \"NToOne\");\n assert.strictEqual(format2?.ratioSeparator, \"=\");\n assert.strictEqual(format2?.ratioFormatType, \"Fractional\");\n } finally {\n testIModel.close();\n }\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"SchemaXmlImport.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/SchemaXmlImport.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { PhysicalElement, SnapshotDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { Logger, LogLevel } from \"@itwin/core-bentley\";\nimport { KnownTestLocations } from \"../KnownTestLocations\";\nimport { ECSpecVersion, EntityClass, Format } from \"@itwin/ecschema-metadata\";\n\ndescribe(\"Schema XML Import Tests\", () => {\n before(() => {\n // initialize logging\n if (false) {\n Logger.initializeToConsole();\n Logger.setLevelDefault(LogLevel.Error);\n }\n });\n\n it(\"should import schema XML\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"SchemaXMLImport.bim\");\n const imodel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"SchemaXMLImportTest\" } });\n\n try {\n const schemaFilePath = path.join(KnownTestLocations.assetsDir, \"Test3.ecschema.xml\");\n const schemaString = fs.readFileSync(schemaFilePath, \"utf8\");\n\n await imodel.importSchemaStrings([schemaString]); // will throw an exception if import fails\n\n const testDomainClass = await imodel.schemaContext.getSchemaItem(\"Test3.Test3Element\", EntityClass);\n assert.isDefined(testDomainClass);\n\n assert.isDefined(testDomainClass?.baseClass);\n\n assert.equal(testDomainClass?.baseClass?.fullName, PhysicalElement.classFullName.replace(\":\", \".\"));\n } finally {\n imodel.close();\n }\n });\n\n it(\"Schema import for newer ECXml Versions\", async () => {\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"SchemaVersionTest.bim\");\n const imodel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"SchemaVersionTest\" } });\n\n try {\n const helperFunction = async (imodelDb: SnapshotDb, xmlSchema: string[], importSchema: boolean) => {\n try {\n // ECObjects is expected to throw for schemas that fail to import\n if (importSchema)\n await imodelDb.importSchemaStrings(xmlSchema);\n else\n imodelDb.getSchemaProps(xmlSchema[0]);\n } catch {\n return false;\n }\n return true;\n };\n\n // Incrementing major ECXml version is not supported\n for (const testCase of [`4.1`, `5.10`]) {\n assert(!(await helperFunction(imodel, [`<ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.${testCase}\"/>`], true)), `Schema ${testCase} import should not have succeeded.`);\n assert(!(await helperFunction(imodel, [`TestSchema`], false)), `Schema ${testCase} test should not have succeeded.`);\n }\n\n // Importing a set of schemas should all fail if any one of them fails\n {\n const schemaXmls = [`<ECSchema schemaName=\"TestSchema1\" alias=\"ts1\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\"/>`,\n `<ECSchema schemaName=\"TestSchema2\" alias=\"ts2\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.8\"/>`,\n `<ECSchema schemaName=\"TestSchema3\" alias=\"ts3\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.4.5\"/>`];\n\n assert(!(await helperFunction(imodel, schemaXmls, true)), `Schema import should not have succeeded.`);\n assert(!(await helperFunction(imodel, [`TestSchema1`], false)), `Schema TestSchema1 import should not have succeeded.`);\n assert(!(await helperFunction(imodel, [`TestSchema2`], false)), `Schema TestSchema2 import should not have succeeded.`);\n assert(!(await helperFunction(imodel, [`TestSchema3`], false)), `Schema TestSchema3 import should not have succeeded.`);\n }\n\n // Schema should be imported successfully\n for (const testCase of [`3.2`, `3.5`]) {\n assert(await helperFunction(imodel, [`<ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"1.0.0\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.${testCase}\"/>`], true), `Schema ${testCase} import should have succeeded.`);\n assert(await helperFunction(imodel, [`TestSchema`], false), `Schema ${testCase} test should have succeeded.`);\n }\n } finally {\n imodel.close();\n }\n });\n\n it.skip(\"should roundtrip ratio format properties\", async () => {\n // Create a separate iModel for this test\n const testFileName = IModelTestUtils.prepareOutputFile(\"SchemaXMLImport\", \"RatioFormatRoundtrip.bim\");\n const testIModel = SnapshotDb.createEmpty(testFileName, { rootSubject: { name: \"RatioFormatTest\" } });\n\n try {\n const schemaXml = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"RatioFormatTest\" alias=\"rft\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"Units\" version=\"01.00.09\" alias=\"u\"/>\n <Format typeName=\"TestRatioFormat\" type=\"Ratio\" ratioType=\"OneToN\" ratioSeparator=\":\" ratioFormatType=\"Decimal\" precision=\"4\" formatTraits=\"trailZeroes|showUnitLabel\">\n <Composite>\n <Unit>u:M</Unit>\n </Composite>\n </Format>\n <Format typeName=\"TestRatioFormat2\" type=\"Ratio\" ratioType=\"NToOne\" ratioSeparator=\"=\" ratioFormatType=\"Fractional\" precision=\"8\" formatTraits=\"keepSingleZero\">\n <Composite>\n <Unit>u:M</Unit>\n </Composite>\n </Format>\n </ECSchema>`;\n\n // Import schema into iModel\n await testIModel.importSchemaStrings([schemaXml]);\n\n // Read back the format from the iModel's schema context\n const format1 = await testIModel.schemaContext.getSchemaItem(\"RatioFormatTest.TestRatioFormat\", Format);\n assert.isDefined(format1);\n assert.strictEqual(format1?.ratioType, \"OneToN\");\n assert.strictEqual(format1?.ratioSeparator, \":\");\n assert.strictEqual(format1?.ratioFormatType, \"Decimal\");\n\n const format2 = await testIModel.schemaContext.getSchemaItem(\"RatioFormatTest.TestRatioFormat2\", Format);\n assert.isDefined(format2);\n assert.strictEqual(format2?.ratioType, \"NToOne\");\n assert.strictEqual(format2?.ratioSeparator, \"=\");\n assert.strictEqual(format2?.ratioFormatType, \"Fractional\");\n } finally {\n testIModel.close();\n }\n });\n});\n\ndescribe(\"exportSchemaXmlString\", () => {\n const schemaXml32 = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <ECSchema schemaName=\"TestSchema\" alias=\"ts\" version=\"01.00.00\" xmlns=\"http://www.bentley.com/schemas/Bentley.ECXML.3.2\">\n <ECSchemaReference name=\"BisCore\" version=\"1.0.23\" alias=\"bis\"/>\n\n <ECEntityClass typeName=\"TestClass\">\n <BaseClass>bis:GraphicalElement2d</BaseClass>\n <ECProperty propertyName=\"Name\" typeName=\"string\"/>\n </ECEntityClass>\n </ECSchema>`;\n\n let imodel: SnapshotDb;\n\n before(async () => {\n const filePath = IModelTestUtils.prepareOutputFile(\"exportSchemaXmlString\", \"exportSchemaXmlString.bim\");\n imodel = SnapshotDb.createEmpty(filePath, { rootSubject: { name: \"exportSchemaXmlStringTest\" } });\n await imodel.importSchemaStrings([schemaXml32]);\n });\n\n after(() => {\n imodel.close();\n });\n\n it(\"default ECSpecVersion arg return an 3.2 XML\", () => {\n const xml = imodel.exportSchemaXmlString(\"TestSchema\");\n assert.isDefined(xml, \"expected a non-undefined result for an existing schema\");\n assert.include(xml, \"Bentley.ECXML.3.2\", \"expected EC 3.2 namespace when no version is supplied\");\n assert.include(xml, \"TestSchema\", \"schema name should be present in output\");\n });\n\n it(\"returns undefined for a schema that does not exist\", () => {\n const xml = imodel.exportSchemaXmlString(\"NonExistentSchema\");\n assert.isUndefined(xml, \"expected undefined for an unknown schema name\");\n });\n\n it(\"test returned XML contains the entity class\", () => {\n const xml = imodel.exportSchemaXmlString(\"TestSchema\");\n assert.isDefined(xml);\n assert.match(xml!, /^<\\?xml|^<ECSchema/, \"output should start with an XML declaration or root element\");\n assert.include(xml, \"TestClass\", \"ECEntityClass 'TestClass' should be present in serialised output\");\n assert.include(xml, \"Name\", \"property 'Name' should be present in serialised output\");\n });\n\n it(\"ECSpecVersion 3.2 version returns 3.2 XML\", () => {\n const version: ECSpecVersion = { readVersion: 3, writeVersion: 2 };\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\n assert.isDefined(xml);\n assert.include(xml, \"Bentley.ECXML.3.2\");\n assert.include(xml, \"TestSchema\");\n });\n\n it(\"ECSpecVersion 3.1 version returns 3.1 XML\", () => {\n const version: ECSpecVersion = { readVersion: 3, writeVersion: 1 };\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\n assert.isDefined(xml);\n assert.include(xml, \"Bentley.ECXML.3.1\", \"expected EC 3.1 namespace\");\n assert.notInclude(xml, \"Bentley.ECXML.3.2\", \"should not contain 3.2 namespace when requesting 3.1\");\n });\n\n it(\"ECSpecVersion 3.0 version returns 3.0 XML\", () => {\n const version: ECSpecVersion = { readVersion: 3, writeVersion: 0 };\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\n assert.isDefined(xml);\n assert.include(xml, \"Bentley.ECXML.3.0\", \"expected EC 3.0 namespace\");\n assert.notInclude(xml, \"Bentley.ECXML.3.2\", \"should not contain 3.2 namespace when requesting 3.0\");\n });\n\n it(\"ECSpecVersion 2.0 version returns 2.0 XML\", () => {\n const version: ECSpecVersion = { readVersion: 2, writeVersion: 0 };\n const xml = imodel.exportSchemaXmlString(\"TestSchema\", version);\n assert.isDefined(xml, \"expected a result for EC 2.0 export\");\n assert.notInclude(xml, \"Bentley.ECXML.3.\", \"EC 2.0 output should not contain an EC 3.x namespace URI\");\n });\n});\n"]}
|
|
@@ -7,7 +7,7 @@ import { Helmert2DWithZOffset, } from "@itwin/core-common";
|
|
|
7
7
|
import { IModelNative } from "../../internal/NativePlatform";
|
|
8
8
|
import { Geometry, Point3d, Range2d } from "@itwin/core-geometry";
|
|
9
9
|
import { GeoCoordConfig } from "../../GeoCoordConfig";
|
|
10
|
-
import { getAvailableCoordinateReferenceSystems } from "../../GeographicCRSServices";
|
|
10
|
+
import { getAvailableCoordinateReferenceSystems, getAvailableCRSUnits } from "../../GeographicCRSServices";
|
|
11
11
|
// spell-checker: disable
|
|
12
12
|
describe("GeoServices", () => {
|
|
13
13
|
before(() => {
|
|
@@ -839,6 +839,48 @@ describe("GeoServices", () => {
|
|
|
839
839
|
}
|
|
840
840
|
assert.equal(nbFound, 5);
|
|
841
841
|
});
|
|
842
|
+
it("check CRS units", () => {
|
|
843
|
+
const expectedUnits = ["Meter", "Degree", "USSurveyFoot", "InternationalFoot"];
|
|
844
|
+
const definitiveListOfUnits = getAvailableCRSUnits();
|
|
845
|
+
assert.isAtLeast(definitiveListOfUnits.length, expectedUnits.length);
|
|
846
|
+
for (const unit of expectedUnits) {
|
|
847
|
+
assert.include(definitiveListOfUnits, unit);
|
|
848
|
+
}
|
|
849
|
+
});
|
|
850
|
+
it("can filter by each CRS unit", async () => {
|
|
851
|
+
const minExpectedCounts = new Map([
|
|
852
|
+
["Meter", 8000],
|
|
853
|
+
["Degree", 1000],
|
|
854
|
+
["USSurveyFoot", 100],
|
|
855
|
+
["InternationalFoot", 50],
|
|
856
|
+
]);
|
|
857
|
+
const units = getAvailableCRSUnits();
|
|
858
|
+
for (const unit of units) {
|
|
859
|
+
const listOfCRS = await getAvailableCoordinateReferenceSystems({
|
|
860
|
+
includeWorld: true,
|
|
861
|
+
unit,
|
|
862
|
+
});
|
|
863
|
+
const minExpected = minExpectedCounts.get(unit) ?? 1;
|
|
864
|
+
assert.isAtLeast(listOfCRS.length, minExpected, `Expected at least ${minExpected} CRS with unit "${unit}", got ${listOfCRS.length}`);
|
|
865
|
+
for (const crs of listOfCRS) {
|
|
866
|
+
assert.equal(crs.unit, unit, `CRS "${crs.name}" has unexpected unit "${crs.unit}" (expected "${unit}")`);
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
});
|
|
870
|
+
it("can filter by unit case-insensitively", async () => {
|
|
871
|
+
const units = getAvailableCRSUnits();
|
|
872
|
+
for (const unit of units) {
|
|
873
|
+
const canonicalList = await getAvailableCoordinateReferenceSystems({
|
|
874
|
+
includeWorld: true,
|
|
875
|
+
unit,
|
|
876
|
+
});
|
|
877
|
+
const lowerCaseFilterList = await getAvailableCoordinateReferenceSystems({
|
|
878
|
+
includeWorld: true,
|
|
879
|
+
unit: unit.toLowerCase(),
|
|
880
|
+
});
|
|
881
|
+
assert.sameMembers(lowerCaseFilterList.map((crs) => crs.name), canonicalList.map((crs) => crs.name), `Expected lowercase unit filter to match canonical filter for "${unit}"`);
|
|
882
|
+
}
|
|
883
|
+
});
|
|
842
884
|
});
|
|
843
885
|
it("should not be able to interpret an invalid GeographicCRS", async () => {
|
|
844
886
|
const interpretInvalidTest = async (formatCRS, testInvalid) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeoServices.test.js","sourceRoot":"","sources":["../../../../src/test/misc/GeoServices.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport {\n GeographicCRSInterpretRequestProps, GeographicCRSProps,\n Helmert2DWithZOffset,\n} from \"@itwin/core-common\";\nimport { IModelNative } from \"../../internal/NativePlatform\";\nimport { Geometry, Point3d, Range2d, Range2dProps } from \"@itwin/core-geometry\";\nimport { GeoCoordConfig } from \"../../GeoCoordConfig\";\nimport { getAvailableCoordinateReferenceSystems } from \"../../GeographicCRSServices\";\n\n// spell-checker: disable\n\ndescribe(\"GeoServices\", () => {\n before(() => {\n GeoCoordConfig.loadDefaultDatabases();\n });\n\n const completionTest = async (incompleteGCS: GeographicCRSProps, completeCRS: GeographicCRSProps) => {\n\n const requestProps: GeographicCRSInterpretRequestProps = { format: \"JSON\", geographicCRSDef: JSON.stringify(incompleteGCS) };\n const response = IModelNative.platform.GeoServices.getGeographicCRSInterpretation(requestProps);\n\n assert.isTrue(response.status === 0);\n\n assert.isTrue(response.geographicCRS !== undefined);\n if (response.geographicCRS !== undefined) {\n assert.isTrue(response.geographicCRS.horizontalCRS !== undefined && completeCRS.horizontalCRS !== undefined);\n assert.isTrue(response.geographicCRS.horizontalCRS!.id === completeCRS.horizontalCRS!.id);\n assert.isTrue(response.geographicCRS.horizontalCRS!.projection !== undefined && completeCRS.horizontalCRS!.projection !== undefined);\n assert.isTrue(response.geographicCRS.horizontalCRS!.projection!.method === completeCRS.horizontalCRS!.projection!.method);\n if (completeCRS.horizontalCRS!.projection!.falseEasting !== undefined) {\n assert.isTrue(response.geographicCRS.horizontalCRS!.projection!.falseEasting !== undefined);\n assert.isTrue(Math.abs(response.geographicCRS.horizontalCRS!.projection!.falseEasting! - completeCRS.horizontalCRS!.projection!.falseEasting) < Geometry.smallMetricDistance);\n }\n if (completeCRS.horizontalCRS!.projection!.falseNorthing !== undefined) {\n assert.isTrue(response.geographicCRS.horizontalCRS!.projection!.falseNorthing !== undefined);\n assert.isTrue(Math.abs(response.geographicCRS.horizontalCRS!.projection!.falseNorthing! - completeCRS.horizontalCRS!.projection!.falseNorthing) < Geometry.smallMetricDistance);\n }\n\n assert.isTrue(response.geographicCRS.horizontalCRS!.datum !== undefined && completeCRS.horizontalCRS!.datum !== undefined);\n assert.isTrue(response.geographicCRS.horizontalCRS!.datum!.id === completeCRS.horizontalCRS!.datum!.id);\n\n assert.isTrue(response.geographicCRS.horizontalCRS!.datum!.ellipsoid !== undefined && completeCRS.horizontalCRS!.datum!.ellipsoid !== undefined);\n assert.isTrue(response.geographicCRS.horizontalCRS!.datum!.ellipsoid!.id === completeCRS.horizontalCRS!.datum!.ellipsoid!.id);\n\n if (response.geographicCRS.additionalTransform !== undefined) {\n assert.isTrue(completeCRS.additionalTransform !== undefined);\n assert.isTrue(response.geographicCRS.additionalTransform.helmert2DWithZOffset !== undefined);\n assert.isTrue(completeCRS.additionalTransform!.helmert2DWithZOffset !== undefined);\n\n assert.isTrue(Math.abs(response.geographicCRS.additionalTransform.helmert2DWithZOffset!.rotDeg - completeCRS.additionalTransform!.helmert2DWithZOffset!.rotDeg) < Geometry.smallAngleDegrees);\n assert.isTrue(Math.abs(response.geographicCRS.additionalTransform.helmert2DWithZOffset!.translationX - completeCRS.additionalTransform!.helmert2DWithZOffset!.translationX) < Geometry.smallMetricDistance);\n assert.isTrue(Math.abs(response.geographicCRS.additionalTransform.helmert2DWithZOffset!.translationY - completeCRS.additionalTransform!.helmert2DWithZOffset!.translationY) < Geometry.smallMetricDistance);\n assert.isTrue(Math.abs(response.geographicCRS.additionalTransform.helmert2DWithZOffset!.translationZ - completeCRS.additionalTransform!.helmert2DWithZOffset!.translationZ) < Geometry.smallMetricDistance);\n assert.isTrue(Math.abs(response.geographicCRS.additionalTransform.helmert2DWithZOffset!.scale - completeCRS.additionalTransform!.helmert2DWithZOffset!.scale) < Geometry.smallFraction);\n }\n\n assert.isTrue(response.geographicCRS.verticalCRS !== undefined && completeCRS.verticalCRS !== undefined);\n assert.isTrue(response.geographicCRS.verticalCRS!.id === completeCRS.verticalCRS!.id);\n }\n };\n\n describe(\"Interpret to completion an incomplete GeographicCRS\", async () => {\n\n it(\"should be able to interpret to completion britishNationalGridOld\", async () => {\n\n const britishNationalGridOld: GeographicCRSProps =\n {\n horizontalCRS: {\n datum: {\n deprecated: true,\n description: \"OSGB36 - Use OSGB-7P-2. Consider OSGB/OSTN15 instead\",\n ellipsoid: {\n description: \"Airy 1830\",\n equatorialRadius: 6377563.396,\n id: \"EPSG:7001\",\n polarRadius: 6356256.909237,\n source: \"EPSG, Version 6 [EPSG]\",\n },\n ellipsoidId: \"EPSG:7001\",\n id: \"EPSG:6277\",\n source: \"EPSG V6.12 operation EPSG:1314 [EPSG]\",\n transforms: [\n {\n method: \"PositionalVector\",\n positionalVector: {\n delta: {\n x: 446.448,\n y: -125.157,\n z: 542.06,\n },\n rotation: {\n x: 0.15,\n y: 0.247,\n z: 0.842,\n },\n scalePPM: -20.489,\n },\n sourceEllipsoid: {\n equatorialRadius: 6377563.396,\n id: \"EPSG:7001\",\n polarRadius: 6356256.909237,\n },\n targetEllipsoid: {\n equatorialRadius: 6378137,\n id: \"WGS84\",\n polarRadius: 6356752.3142,\n },\n }],\n },\n datumId: \"EPSG:6277\",\n deprecated: true,\n description: \"Use other variant - OSGB British National Grid\",\n extent: {\n northEast: {\n latitude: 60.84,\n longitude: 1.78,\n },\n southWest: {\n latitude: 49.96,\n longitude: -7.56,\n },\n },\n id: \"EPSG:27700\",\n projection: {\n centralMeridian: -2,\n falseEasting: 400000,\n falseNorthing: -100000,\n latitudeOfOrigin: 49,\n method: \"TransverseMercator\",\n scaleFactor: 0.999601272737422,\n },\n source: \"EPSG\",\n unit: \"Meter\",\n },\n verticalCRS: {\n id: \"ELLIPSOID\",\n },\n };\n\n await completionTest({ horizontalCRS: { id: \"EPSG:27700\" }, verticalCRS: { id: \"ELLIPSOID\" } }, britishNationalGridOld);\n });\n\n it(\"should be able to interpret to completion EWRGCS\", async () => {\n\n const EWRGCS: GeographicCRSProps = {\n horizontalCRS: {\n id: \"EPSG:27700\",\n description: \"OSGB 1936 / British National Grid\",\n source: \"EPSG V6 [Large and medium scale topographic mapping and engin]\",\n datumId: \"EPSG:6277\",\n datum: {\n id: \"EPSG:6277\",\n description: \"OSGB36 - Use OSGB-7P-2. Consider OSGB/OSTN15 instead\",\n deprecated: true,\n source: \"EPSG V6.12 operation EPSG:1314 [EPSG]\",\n ellipsoidId: \"EPSG:7001\",\n ellipsoid: {\n equatorialRadius: 6377563.396,\n polarRadius: 6356256.909237,\n id: \"EPSG:7001\",\n description: \"Airy 1830\",\n source: \"EPSG, Version 6 [EPSG]\",\n },\n transforms: [\n {\n method: \"PositionalVector\",\n sourceEllipsoid: {\n equatorialRadius: 6377563.396,\n polarRadius: 6356256.909237,\n id: \"EPSG:7001\",\n },\n targetEllipsoid: {\n equatorialRadius: 6378137,\n polarRadius: 6356752.3142,\n id: \"WGS84\",\n },\n positionalVector: {\n delta: {\n x: 446.448,\n y: -125.157,\n z: 542.06,\n },\n rotation: {\n x: 0.15,\n y: 0.247,\n z: 0.842,\n },\n scalePPM: -20.489,\n },\n }],\n },\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n falseEasting: 400000,\n falseNorthing: -100000,\n centralMeridian: -2,\n latitudeOfOrigin: 49,\n scaleFactor: 0.999601272737422,\n },\n extent: {\n southWest: {\n latitude: 49.96,\n longitude: -7.56,\n },\n northEast: {\n latitude: 60.84,\n longitude: 1.78,\n },\n },\n },\n verticalCRS: {\n id: \"ELLIPSOID\",\n },\n additionalTransform: {\n helmert2DWithZOffset: {\n translationX: 284597.3343,\n translationY: 79859.4651,\n translationZ: 0,\n rotDeg: 0.5263624458992088,\n scale: 0.9996703340508721,\n },\n },\n };\n\n await completionTest({ horizontalCRS: { id: \"EPSG:27700\" }, verticalCRS: { id: \"ELLIPSOID\" }, additionalTransform: { helmert2DWithZOffset: { translationX: 284597.3343, translationY: 79859.4651, translationZ: 0, rotDeg: 0.5263624458992088, scale: 0.9996703340508721 } } }, EWRGCS);\n });\n\n it(\"should be able to interpret to completion UTM27Z10\", async () => {\n\n const UTM27Z10: GeographicCRSProps = {\n horizontalCRS: {\n datum: {\n description: \"North American Datum of 1927 (US48, AK, HI, and Canada)\",\n ellipsoid: {\n description: \"Clarke 1866, Benoit Ratio\",\n epsg: 7008,\n equatorialRadius: 6378206.4,\n id: \"CLRK66\",\n polarRadius: 6356583.8,\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n },\n ellipsoidId: \"CLRK66\",\n epsg: 6267,\n id: \"NAD27\",\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n transforms: [\n {\n gridFile: {\n files: [\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/conus.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/alaska.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/prvi.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/hawaii.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/stgeorge.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/stlrnc.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/stpaul.l?s\",\n format: \"NADCON\",\n }],\n },\n method: \"GridFiles\",\n sourceEllipsoid: {\n equatorialRadius: 6378206.4,\n id: \"CLRK66\",\n polarRadius: 6356583.8,\n },\n targetEllipsoid: {\n equatorialRadius: 6378137,\n id: \"GRS1980\",\n polarRadius: 6356752.314140348,\n },\n }],\n },\n datumId: \"NAD27\",\n description: \"UTM with NAD27 datum, Zone 10, Meter; Central Meridian 123d W\",\n epsg: 26710,\n extent: {\n northEast: {\n latitude: 84,\n longitude: -119.5,\n },\n southWest: {\n latitude: -1,\n longitude: -126.5,\n },\n },\n id: \"UTM27-10\",\n projection: {\n hemisphere: \"North\",\n method: \"UniversalTransverseMercator\",\n zoneNumber: 10,\n },\n source: \"Snyder, J.P, 1987, Map Projections - A Working Manual\",\n unit: \"Meter\",\n },\n verticalCRS: {\n id: \"NGVD29\",\n },\n };\n\n await completionTest({ horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"NGVD29\" } }, UTM27Z10);\n });\n\n it(\"should be able to interpret to completion UTM27Z10B\", async () => {\n\n const UTM27Z10B: GeographicCRSProps =\n {\n horizontalCRS: {\n datum: {\n description: \"North American Datum of 1927 (US48, AK, HI, and Canada)\",\n ellipsoid: {\n description: \"Clarke 1866, Benoit Ratio\",\n epsg: 7008,\n equatorialRadius: 6378206.4,\n id: \"CLRK66\",\n polarRadius: 6356583.8,\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n },\n ellipsoidId: \"CLRK66\",\n epsg: 6267,\n id: \"NAD27\",\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n transforms: [\n {\n gridFile: {\n files: [\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/conus.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/alaska.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/prvi.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/hawaii.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/stgeorge.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/stlrnc.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/stpaul.l?s\",\n format: \"NADCON\",\n },\n ],\n },\n method: \"GridFiles\",\n sourceEllipsoid: {\n equatorialRadius: 6378206.4,\n id: \"CLRK66\",\n polarRadius: 6356583.8,\n },\n targetEllipsoid: {\n equatorialRadius: 6378137,\n id: \"GRS1980\",\n polarRadius: 6356752.314140348,\n },\n },\n ],\n },\n datumId: \"NAD27\",\n description: \"NAD27 / UTM zone 10N\",\n epsg: 26710,\n extent: {\n northEast: {\n latitude: 77,\n longitude: -120,\n },\n southWest: {\n latitude: 34.4,\n longitude: -126,\n },\n },\n id: \"EPSG:26710\",\n projection: {\n centralMeridian: -123,\n falseEasting: 500000,\n falseNorthing: 0,\n latitudeOfOrigin: 0,\n method: \"TransverseMercator\",\n scaleFactor: 0.9996,\n },\n source: \"EPSG V6 [Large and medium scale topographic mapping and engin]\",\n unit: \"Meter\",\n },\n verticalCRS: {\n id: \"NGVD29\",\n },\n };\n\n await completionTest({ horizontalCRS: { epsg: 26710 }, verticalCRS: { id: \"NGVD29\" } }, UTM27Z10B);\n });\n });\n\n describe(\"Interpretation of WKT GeographicCRS\", async () => {\n const interpretWKTTest = async (testWKT: string, completeCRS: GeographicCRSProps) => {\n\n const requestProps: GeographicCRSInterpretRequestProps = { format: \"WKT\", geographicCRSDef: testWKT };\n const response = IModelNative.platform.GeoServices.getGeographicCRSInterpretation(requestProps);\n\n assert.isTrue(response.status === 0);\n\n assert.isTrue(response.geographicCRS !== undefined);\n if (response.geographicCRS !== undefined) {\n assert.isTrue(response.geographicCRS.horizontalCRS !== undefined && completeCRS.horizontalCRS !== undefined);\n assert.isTrue(response.geographicCRS.horizontalCRS!.id === completeCRS.horizontalCRS!.id);\n assert.isTrue(response.geographicCRS.horizontalCRS!.projection !== undefined && completeCRS.horizontalCRS!.projection !== undefined);\n assert.isTrue(response.geographicCRS.horizontalCRS!.projection!.method === completeCRS.horizontalCRS!.projection!.method);\n if (completeCRS.horizontalCRS!.projection!.falseEasting !== undefined) {\n assert.isTrue(response.geographicCRS.horizontalCRS!.projection!.falseEasting !== undefined);\n assert.isTrue(Math.abs(response.geographicCRS.horizontalCRS!.projection!.falseEasting! - completeCRS.horizontalCRS!.projection!.falseEasting) < Geometry.smallMetricDistance);\n }\n if (completeCRS.horizontalCRS!.projection!.falseNorthing !== undefined) {\n assert.isTrue(response.geographicCRS.horizontalCRS!.projection!.falseNorthing !== undefined);\n assert.isTrue(Math.abs(response.geographicCRS.horizontalCRS!.projection!.falseNorthing! - completeCRS.horizontalCRS!.projection!.falseNorthing) < Geometry.smallMetricDistance);\n }\n\n assert.isTrue(response.geographicCRS.horizontalCRS!.datum !== undefined && completeCRS.horizontalCRS!.datum !== undefined);\n assert.isTrue(response.geographicCRS.horizontalCRS!.datum!.id === completeCRS.horizontalCRS!.datum!.id);\n\n assert.isTrue(response.geographicCRS.horizontalCRS!.datum!.ellipsoid !== undefined && completeCRS.horizontalCRS!.datum!.ellipsoid !== undefined);\n assert.isTrue(response.geographicCRS.horizontalCRS!.datum!.ellipsoid!.id === completeCRS.horizontalCRS!.datum!.ellipsoid!.id);\n\n assert.isTrue(response.geographicCRS.verticalCRS !== undefined && completeCRS.verticalCRS !== undefined);\n assert.isTrue(response.geographicCRS.verticalCRS!.id === completeCRS.verticalCRS!.id);\n\n // WKTs cannot define an additional transform\n assert.isTrue(response.geographicCRS.additionalTransform === undefined);\n }\n };\n\n it(\"should be able to interpret airportGrid2007 WKT\", async () => {\n const airportGrid2007: GeographicCRSProps =\n {\n horizontalCRS: {\n datum: {\n description: \"Heathrow T5 Datum\",\n ellipsoid: {\n description: \"Airy, 1830\",\n epsg: 7001,\n equatorialRadius: 6377563.396,\n id: \"AIRY30\",\n polarRadius: 6356256.909,\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n },\n ellipsoidId: \"AIRY30\",\n id: \"HeathrowT5\",\n source: \"Bentley Client\",\n transforms: [\n {\n method: \"PositionalVector\",\n positionalVector: {\n delta: {\n x: 358.398212181898,\n y: -213.702844870731,\n z: 495.318319769716,\n },\n rotation: {\n x: 668.806139320047,\n y: -4.72664217602752,\n z: 719.671097181396,\n },\n scalePPM: -6.26386076385543,\n },\n sourceEllipsoid: {\n equatorialRadius: 6377563.396,\n id: \"AIRY30\",\n polarRadius: 6356256.909,\n },\n targetEllipsoid: {\n equatorialRadius: 6378137,\n id: \"WGS84\",\n polarRadius: 6356752.3142,\n },\n },\n ],\n },\n datumId: \"HeathrowT5\",\n description: \"AirportGrid2007\",\n id: \"AirportGrid2007\",\n projection: {\n centralMeridian: -0.41832591666666674,\n falseEasting: 7334.81,\n falseNorthing: 5637.423,\n latitudeOfOrigin: 51.47011065555556,\n method: \"TransverseMercator\",\n scaleFactor: 0.999995,\n },\n source: \"WKT\",\n unit: \"Meter\",\n },\n verticalCRS: {\n id: \"ELLIPSOID\",\n },\n };\n\n await interpretWKTTest('PROJCS[\"AirportGrid2007\", GEOGCS[\"HeathrowT5.LL\",DATUM[\"Heathrow T5\", SPHEROID[\"AIRY30\",6377563.396,299.32496127],358.398,-213.7028,495.3183,-668.80613932004700,4.72664217602752,-719.67109718139600,-6.26386076385543],PRIMEM[\"Greenwich\",0],UNIT[\"Decimal Degree\",0.017453292519943295]],PROJECTION[\"Transverse Mercator\"],PARAMETER[\"latitude_of_origin\",51.470110655555558],PARAMETER[\"central_meridian\",-0.41832591666666669],PARAMETER[\"scale_factor\",0.999995],PARAMETER[\"false_easting\",7334.810],PARAMETER[\"false_northing\",5637.423],UNIT[\"Meter\",1.00000000000000]]', airportGrid2007);\n });\n\n it(\"should be able to interpret denmarkED50 WKT\", async () => {\n\n const denmarkED50: GeographicCRSProps =\n {\n horizontalCRS: {\n datum: {\n description: \"European 1950, Denmark, for System 34\",\n ellipsoid: {\n description: \"Hayford, 1924 (aka 1909); same as International 1924\",\n epsg: 7022,\n equatorialRadius: 6378388,\n id: \"HAYFORD\",\n polarRadius: 6356911.9461279465,\n source: \"Snyder, J.P., 1987, Map Projections - A Working Manual\",\n },\n ellipsoidId: \"HAYFORD\",\n id: \"ED50-DK34\",\n source: \"KMSTrans, by Kort-og Matrikelstyrelsen (Nov 1999)\",\n transforms: [\n {\n method: \"PositionalVector\",\n positionalVector: {\n delta: {\n x: -81.0703,\n y: -89.3603,\n z: -115.7526,\n },\n rotation: {\n x: 0.48488,\n y: 0.02436,\n z: 0.41321,\n },\n scalePPM: -0.540645,\n },\n sourceEllipsoid: {\n equatorialRadius: 6378388,\n id: \"HAYFORD\",\n polarRadius: 6356911.9461279465,\n },\n targetEllipsoid: {\n equatorialRadius: 6378137,\n id: \"WGS84\",\n polarRadius: 6356752.3142,\n },\n },\n ],\n },\n datumId: \"ED50-DK34\",\n description: \"DummyName\",\n extent: {\n northEast: {\n latitude: 90,\n longitude: 180,\n },\n southWest: {\n latitude: -90,\n longitude: -180,\n },\n },\n id: \"DummyName\",\n projection: {\n method: \"None\",\n },\n source: \"Extracted from WKT string; description field carries WKT name.\",\n unit: \"Degree\",\n },\n verticalCRS: {\n id: \"ELLIPSOID\",\n },\n };\n\n await interpretWKTTest('GEOGCS[ \"DummyName\", DATUM [\"European 1950 (Denmark)\", SPHEROID [\"International 1924\", 6378388, 297],-81.0703, -89.3603, -115.7526, .48488, .02436, .41321, -.540645], PRIMEM [ \"Greenwich\", 0.000000 ], UNIT [\"Decimal Degree\", 0.01745329251994330]]', denmarkED50);\n });\n\n it(\"should be able to interpret californiaStateZone2 WKT\", async () => {\n\n const californiaStateZone2: GeographicCRSProps =\n {\n horizontalCRS: {\n datum: {\n description: \"North American Datum of 1983\",\n ellipsoid: {\n description: \"Geodetic Reference System of 1980\",\n epsg: 7019,\n equatorialRadius: 6378137,\n id: \"GRS1980\",\n polarRadius: 6356752.314140348,\n source: \"Stem, L.E., Jan 1989, State Plane Coordinate System of 1983\",\n },\n ellipsoidId: \"GRS1980\",\n epsg: 6269,\n id: \"NAD83\",\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n transforms: [\n {\n method: \"None\",\n },\n ],\n },\n datumId: \"NAD83\",\n description: \"NAD_1983_StatePlane_California_II_FIPS_0402_Feet\",\n id: \"NAD_1983_StatePlane_Cal\",\n projection: {\n falseEasting: 6561666.666666666,\n falseNorthing: 1640416.666666667,\n latitudeOfOrigin: 37.66666666666666,\n longitudeOfOrigin: -122,\n method: \"LambertConformalConicTwoParallels\",\n standardParallel1: 38.33333333333334,\n standardParallel2: 39.83333333333334,\n },\n source: \"WKT\",\n unit: \"USSurveyFoot\",\n },\n verticalCRS: {\n id: \"NAVD88\",\n },\n };\n\n await interpretWKTTest('PROJCS[\"NAD_1983_StatePlane_California_II_FIPS_0402_Feet\",GEOGCS[\"GCS_North_American_1983\",DATUM[\"D_North_American_1983\",SPHEROID[\"GRS_1980\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]],PROJECTION[\"Lambert_Conformal_Conic\"],PARAMETER[\"False_Easting\",6561666.666666666],PARAMETER[\"False_Northing\",1640416.666666667],PARAMETER[\"Central_Meridian\",-122],PARAMETER[\"Standard_Parallel_1\",38.33333333333334],PARAMETER[\"Standard_Parallel_2\",39.83333333333334],PARAMETER[\"Latitude_Of_Origin\",37.66666666666666],UNIT[\"Foot_US\",0.30480060960121924]]', californiaStateZone2);\n });\n\n it(\"should be able to interpret utm84Zone34S WKT\", async () => {\n\n const utm84Zone34S: GeographicCRSProps =\n {\n horizontalCRS: {\n datum: {\n description: \"World Geodetic System of 1984\",\n ellipsoid: {\n description: \"World Geodetic System of 1984, GEM 10C\",\n epsg: 7030,\n equatorialRadius: 6378137,\n id: \"WGS84\",\n polarRadius: 6356752.3142,\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n },\n ellipsoidId: \"WGS84\",\n epsg: 6326,\n id: \"WGS84\",\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n transforms: [\n {\n method: \"None\",\n },\n ],\n },\n datumId: \"WGS84\",\n description: \"WGS 84 / UTM zone 34S\",\n id: \"WGS 84 / UTM zone 34S\",\n projection: {\n centralMeridian: 20.999999999999982,\n falseEasting: 500000,\n falseNorthing: 10000000,\n latitudeOfOrigin: 0,\n method: \"TransverseMercator\",\n scaleFactor: 0.9996,\n },\n source: \"WKT\",\n unit: \"Meter\",\n },\n verticalCRS: {\n id: \"ELLIPSOID\",\n },\n };\n\n await interpretWKTTest('PROJCS[\"WGS 84 / UTM zone 34S\", GEOGCS [ \"WGS 84\", DATUM [\"World Geodetic System 1984 (EPSG ID 6326)\", SPHEROID [\"WGS 84 (EPSG ID 7030)\", 6378137, 298.257223563]], PRIMEM [ \"Greenwich\", 0.000000 ], UNIT [\"Decimal Degree\", 0.01745329251994328]], PROJECTION [\"UTM zone 34S (EPSG OP 16134)\"], PARAMETER [\"Latitude_Of_Origin\", 0], PARAMETER [\"Central_Meridian\", 21], PARAMETER [\"Scale_Factor\", .9996], PARAMETER [\"False_Easting\", 500000], PARAMETER [\"False_Northing\", 10000000], UNIT [\"Meter\", 1]]', utm84Zone34S);\n });\n\n it(\"should be able to interpret utm84Zone32NGeoid WKT\", async () => {\n\n const utm84Zone32NGeoid: GeographicCRSProps =\n {\n horizontalCRS: {\n datum: {\n description: \"World Geodetic System of 1984\",\n ellipsoid: {\n description: \"World Geodetic System of 1984, GEM 10C\",\n epsg: 7030,\n equatorialRadius: 6378137,\n id: \"WGS84\",\n polarRadius: 6356752.3142,\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n },\n ellipsoidId: \"WGS84\",\n epsg: 6326,\n id: \"WGS84\",\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n transforms: [\n {\n method: \"None\",\n },\n ],\n },\n datumId: \"WGS84\",\n description: \"WGS 84 / UTM zone32N\",\n id: \"WGS 84 / UTM zone32N\",\n projection: {\n centralMeridian: 9,\n falseEasting: 500000,\n falseNorthing: 0,\n latitudeOfOrigin: 0,\n method: \"TransverseMercator\",\n scaleFactor: 0.9996,\n },\n source: \"WKT\",\n unit: \"Meter\",\n },\n verticalCRS: {\n id: \"GEOID\",\n },\n };\n\n await interpretWKTTest('COMPD_CS[\"WGS 84 / UTM zone 32N + EGM96 geoid height\",PROJCS[\"WGS 84 / UTM zone32N\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"32632\"]],VERT_CS[\"EGM96 geoid height\",VERT_DATUM[\"EGM96 geoid\",2005,EXTENSION[\"PROJ4_GRIDS\",\"egm96_15.gtx\"],AUTHORITY[\"EPSG\",\"5171\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Up\",UP],AUTHORITY[\"EPSG\",\"5773\"]]]', utm84Zone32NGeoid);\n });\n it(\"should be able to interpret utm84Zone18NGeoid WKT\", async () => {\n\n const utm84Zone18NGeoid: GeographicCRSProps =\n {\n horizontalCRS: {\n datum: {\n description: \"World Geodetic System of 1984\",\n ellipsoid: {\n description: \"World Geodetic System of 1984, GEM 10C\",\n epsg: 7030,\n equatorialRadius: 6378137,\n id: \"WGS84\",\n polarRadius: 6356752.3142,\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n },\n ellipsoidId: \"WGS84\",\n epsg: 6326,\n id: \"WGS84\",\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n transforms: [\n {\n method: \"None\",\n },\n ],\n },\n datumId: \"WGS84\",\n description: \"UTM84-18N\",\n id: \"UTM84-18N\",\n projection: {\n hemisphere: \"North\",\n method: \"UniversalTransverseMercator\",\n zoneNumber: 18,\n },\n source: \"WKT\",\n unit: \"Meter\",\n },\n verticalCRS: {\n id: \"GEOID\",\n },\n };\n\n await interpretWKTTest('COMPD_CS[\"UTM84-18N\",PROJCS[\"UTM84-18N\",GEOGCS[\"LL84\",DATUM[\"WGS84\",SPHEROID[\"WGS84\",6378137.000,298.25722293]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]],PROJECTION[\"Universal Transverse Mercator System\"],PARAMETER[\"UTM Zone Number (1 - 60)\",18.0],PARAMETER[\"Hemisphere, North or South\",1.0],UNIT[\"Meter\",1.00000000000000]],VERT_CS[\"Geoid Height\",VERT_DATUM[\"EGM96 geoid\",2005],UNIT[\"METER\",1.000000]]]', utm84Zone18NGeoid);\n });\n });\n\n describe(\"Verify list of CRS\", async () => {\n const validationRange = 50;\n const validationRangeSmall = 10;\n\n interface CRSValidationOptions {\n expectedCount: number;\n allowedRange: number;\n extent?: Range2dProps;\n includeWorld?: boolean;\n }\n\n const validateCRSList = async (options: CRSValidationOptions): Promise<void> => {\n const { expectedCount, allowedRange, extent, includeWorld } = options;\n const listOfCRS = await getAvailableCoordinateReferenceSystems({ extent, includeWorld });\n\n // Check fields of returned coordinate reference systems\n const extentRange: Range2d = Range2d.fromJSON(extent);\n for (const crs of listOfCRS) {\n // Validate extent\n if (extent !== undefined) {\n const crsExtentRange: Range2d = Range2d.fromJSON(crs.crsExtent);\n const intersects = extentRange.intersectsRange(crsExtentRange);\n assert.isTrue(intersects);\n }\n\n // These fields should always be present\n assert.isTrue(crs.name !== undefined);\n assert.isTrue(crs.description !== undefined);\n assert.isTrue(crs.deprecated === true || crs.deprecated === false);\n }\n\n assert.isTrue(listOfCRS.length > expectedCount - allowedRange && listOfCRS.length < expectedCount + allowedRange);\n };\n\n const validateExtent = (expectedExtent: Range2d, crsExtent: Range2dProps) => {\n const crsExtentRange: Range2d = Range2d.fromJSON(crsExtent);\n assert.equal(crsExtentRange.low.x, expectedExtent.low.x);\n assert.equal(crsExtentRange.low.y, expectedExtent.low.y);\n assert.equal(crsExtentRange.high.x, expectedExtent.high.x);\n assert.equal(crsExtentRange.high.y, expectedExtent.high.y);\n };\n\n it(\"should get all CRS\", async () => {\n await validateCRSList({expectedCount: 12_332, allowedRange: validationRange, includeWorld: true});\n });\n\n it(\"should get all CRS, excluding world crs\", async () => {\n await validateCRSList({expectedCount: 11_975, allowedRange: validationRange});\n })\n\n it(\"should return CRS that are in the specified range (1)\", async () => {\n const extent: Range2dProps = { low: { x: 60.1, y: 61.2 }, high: { x: 62.3, y: 63.4 } };\n await validateCRSList({expectedCount: 82, allowedRange: validationRangeSmall, extent});\n await validateCRSList({expectedCount: 439, allowedRange: validationRangeSmall, extent, includeWorld: true});\n });\n\n it(\"should return CRS that are in the specified range (2)\", async () => {\n const extent: Range2dProps = { low: { x: 0, y: 2 }, high: { x: 1, y: 3 } };\n await validateCRSList({expectedCount: 67, allowedRange: validationRangeSmall, extent});\n await validateCRSList({expectedCount: 424, allowedRange: validationRangeSmall, extent, includeWorld: true});\n });\n\n it(\"should return CRS that are in the specified range (3)\", async () => {\n const extent: Range2dProps = { low: { x: 0.3, y: 2.4 }, high: { x: 1.6, y: 3.77 } };\n await validateCRSList({expectedCount: 62, allowedRange: validationRangeSmall, extent});\n await validateCRSList({expectedCount: 419, allowedRange: validationRangeSmall, extent, includeWorld: true});\n });\n\n it(\"should retrieve the whole list of CRS and validate the properties for a few selected CRS.\", async () => {\n const listOfCRS = await getAvailableCoordinateReferenceSystems({includeWorld: true});\n let nbFound = 0;\n for (const crs of listOfCRS) {\n switch (crs.name) {\n case \"3TM111-83\":\n nbFound++;\n assert.equal(crs.description, \"Use NAD83-AB/3TM-111 instead.\");\n assert.equal(crs.deprecated, true);\n validateExtent(Range2d.fromJSON({ low: { x: -113, y: 48 }, high: { x: -109, y: 84 } }), crs.crsExtent);\n break;\n case \"NAD27-CAN.MTM-1\":\n nbFound++;\n assert.equal(crs.description, \"NAD27 / MTM zone 1\");\n assert.equal(crs.deprecated, false);\n validateExtent(Range2d.fromJSON({ low: { x: -54.5, y: 45 }, high: { x: -50.5, y: 55 } }), crs.crsExtent);\n break;\n case \"AL83-EF\":\n nbFound++;\n assert.equal(crs.description, \"NAD83 Alabama State Plane, East Zone, US Foot\");\n assert.equal(crs.deprecated, false);\n validateExtent(Range2d.fromJSON({ low: { x: -87.5, y: 30 }, high: { x: -84, y: 35.75 } }), crs.crsExtent);\n break;\n case \"ME-E\":\n nbFound++;\n assert.equal(crs.description, \"NAD27 Maine State Plane, East Zone(1801), US Foot\");\n assert.equal(crs.deprecated, false);\n validateExtent(Range2d.fromJSON({ low: { x: -71, y: 43.5 }, high: { x: -66, y: 48 } }), crs.crsExtent);\n break;\n\n // world CRS\n case \"EPSG:4326\":\n nbFound++;\n assert.equal(crs.description, \"WGS 84\");\n assert.equal(crs.deprecated, false);\n validateExtent(Range2d.fromJSON({ low: { x: -180, y: -90 }, high: { x: 180, y: 90 } }), crs.crsExtent);\n break;\n }\n }\n assert.equal(nbFound, 5);\n });\n });\n\n it(\"should not be able to interpret an invalid GeographicCRS\", async () => {\n\n const interpretInvalidTest = async (formatCRS: \"WKT\" | \"JSON\", testInvalid: string) => {\n\n const requestProps: GeographicCRSInterpretRequestProps = { format: formatCRS, geographicCRSDef: testInvalid };\n const response = IModelNative.platform.GeoServices.getGeographicCRSInterpretation(requestProps);\n\n // At the moment return codes are not really error specific (we mostly return 32768) so we do not validate\n // actual error code for now.\n assert.isFalse(response.status === 0);\n };\n\n // WKT Without datum or projection clause\n await interpretInvalidTest(\"WKT\", 'PROJCS[\"AirportGrid2007\", GEOGCS[\"HeathrowT5.LL\",PRIMEM[\"Greenwich\",0],UNIT[\"Decimal Degree\",0.017453292519943295]],UNIT[\"Meter\",1.00000000000000]]');\n\n // Plain garbage\n await interpretInvalidTest(\"WKT\", \"Some invalid content\");\n\n // Format is JSON but content is WKT\n await interpretInvalidTest(\"JSON\", 'GEOGCS[ \"Longitude / Latitude (ED 50 Denmark)\", DATUM [\"European 1950 (Denmark)\", SPHEROID [\"International 1924\", 6378388, 297],-81.0703, -89.3603, -115.7526, .48488, .02436, .41321, -.540645], PRIMEM [ \"Greenwich\", 0.000000 ], UNIT [\"Decimal Degree\", 0.01745329251994330]]');\n\n // Vertical datum invalid for horizontal definition\n await interpretInvalidTest(\"JSON\", '{ horizontalCRS: { id: \"EPSG:27700\" }, verticalCRS: { id: \"NAVD29\" } }');\n\n // No horizontal CRS\n await interpretInvalidTest(\"JSON\", '{ verticalCRS: { id: \"NAVD29\" } }');\n\n // Unknown identifier\n await interpretInvalidTest(\"JSON\", '{ horizontalCRS: { id: \"UNKNOWN\" }, verticalCRS: { id: \"NAVD29\" } }');\n });\n\n it(\"should return expected Transform from Helmert2DWithZOffset object\", async () =>{\n const helmertTransform = new Helmert2DWithZOffset({ translationX: 1, translationY: 1, translationZ: 1, rotDeg: 90, scale: 2 });\n const convertedTransform = helmertTransform.convertHelmertToTransform();\n\n const originExpected = Point3d.fromJSON({x:1, y:1, z:1});\n assert(convertedTransform.origin.isAlmostEqual(originExpected));\n const expectedCoffs = [0, -2, 0, 2, 0, 0, 0, 0, 1];\n const actualCoffs = Array.from(convertedTransform.matrix.coffs);\n for (let i = 0; i < expectedCoffs.length; ++i) {\n assert(Math.abs(actualCoffs[i] - expectedCoffs[i]) < 1e-12, `Matrix coefficient at index ${i} differs: expected ${expectedCoffs[i]}, got ${actualCoffs[i]}`);\n }\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"GeoServices.test.js","sourceRoot":"","sources":["../../../../src/test/misc/GeoServices.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"chai\";\nimport {\n GeographicCRSInterpretRequestProps, GeographicCRSProps,\n Helmert2DWithZOffset,\n} from \"@itwin/core-common\";\nimport { IModelNative } from \"../../internal/NativePlatform\";\nimport { Geometry, Point3d, Range2d, Range2dProps } from \"@itwin/core-geometry\";\nimport { GeoCoordConfig } from \"../../GeoCoordConfig\";\nimport { getAvailableCoordinateReferenceSystems, getAvailableCRSUnits } from \"../../GeographicCRSServices\";\n\n// spell-checker: disable\n\ndescribe(\"GeoServices\", () => {\n before(() => {\n GeoCoordConfig.loadDefaultDatabases();\n });\n\n const completionTest = async (incompleteGCS: GeographicCRSProps, completeCRS: GeographicCRSProps) => {\n\n const requestProps: GeographicCRSInterpretRequestProps = { format: \"JSON\", geographicCRSDef: JSON.stringify(incompleteGCS) };\n const response = IModelNative.platform.GeoServices.getGeographicCRSInterpretation(requestProps);\n\n assert.isTrue(response.status === 0);\n\n assert.isTrue(response.geographicCRS !== undefined);\n if (response.geographicCRS !== undefined) {\n assert.isTrue(response.geographicCRS.horizontalCRS !== undefined && completeCRS.horizontalCRS !== undefined);\n assert.isTrue(response.geographicCRS.horizontalCRS!.id === completeCRS.horizontalCRS!.id);\n assert.isTrue(response.geographicCRS.horizontalCRS!.projection !== undefined && completeCRS.horizontalCRS!.projection !== undefined);\n assert.isTrue(response.geographicCRS.horizontalCRS!.projection!.method === completeCRS.horizontalCRS!.projection!.method);\n if (completeCRS.horizontalCRS!.projection!.falseEasting !== undefined) {\n assert.isTrue(response.geographicCRS.horizontalCRS!.projection!.falseEasting !== undefined);\n assert.isTrue(Math.abs(response.geographicCRS.horizontalCRS!.projection!.falseEasting! - completeCRS.horizontalCRS!.projection!.falseEasting) < Geometry.smallMetricDistance);\n }\n if (completeCRS.horizontalCRS!.projection!.falseNorthing !== undefined) {\n assert.isTrue(response.geographicCRS.horizontalCRS!.projection!.falseNorthing !== undefined);\n assert.isTrue(Math.abs(response.geographicCRS.horizontalCRS!.projection!.falseNorthing! - completeCRS.horizontalCRS!.projection!.falseNorthing) < Geometry.smallMetricDistance);\n }\n\n assert.isTrue(response.geographicCRS.horizontalCRS!.datum !== undefined && completeCRS.horizontalCRS!.datum !== undefined);\n assert.isTrue(response.geographicCRS.horizontalCRS!.datum!.id === completeCRS.horizontalCRS!.datum!.id);\n\n assert.isTrue(response.geographicCRS.horizontalCRS!.datum!.ellipsoid !== undefined && completeCRS.horizontalCRS!.datum!.ellipsoid !== undefined);\n assert.isTrue(response.geographicCRS.horizontalCRS!.datum!.ellipsoid!.id === completeCRS.horizontalCRS!.datum!.ellipsoid!.id);\n\n if (response.geographicCRS.additionalTransform !== undefined) {\n assert.isTrue(completeCRS.additionalTransform !== undefined);\n assert.isTrue(response.geographicCRS.additionalTransform.helmert2DWithZOffset !== undefined);\n assert.isTrue(completeCRS.additionalTransform!.helmert2DWithZOffset !== undefined);\n\n assert.isTrue(Math.abs(response.geographicCRS.additionalTransform.helmert2DWithZOffset!.rotDeg - completeCRS.additionalTransform!.helmert2DWithZOffset!.rotDeg) < Geometry.smallAngleDegrees);\n assert.isTrue(Math.abs(response.geographicCRS.additionalTransform.helmert2DWithZOffset!.translationX - completeCRS.additionalTransform!.helmert2DWithZOffset!.translationX) < Geometry.smallMetricDistance);\n assert.isTrue(Math.abs(response.geographicCRS.additionalTransform.helmert2DWithZOffset!.translationY - completeCRS.additionalTransform!.helmert2DWithZOffset!.translationY) < Geometry.smallMetricDistance);\n assert.isTrue(Math.abs(response.geographicCRS.additionalTransform.helmert2DWithZOffset!.translationZ - completeCRS.additionalTransform!.helmert2DWithZOffset!.translationZ) < Geometry.smallMetricDistance);\n assert.isTrue(Math.abs(response.geographicCRS.additionalTransform.helmert2DWithZOffset!.scale - completeCRS.additionalTransform!.helmert2DWithZOffset!.scale) < Geometry.smallFraction);\n }\n\n assert.isTrue(response.geographicCRS.verticalCRS !== undefined && completeCRS.verticalCRS !== undefined);\n assert.isTrue(response.geographicCRS.verticalCRS!.id === completeCRS.verticalCRS!.id);\n }\n };\n\n describe(\"Interpret to completion an incomplete GeographicCRS\", async () => {\n\n it(\"should be able to interpret to completion britishNationalGridOld\", async () => {\n\n const britishNationalGridOld: GeographicCRSProps =\n {\n horizontalCRS: {\n datum: {\n deprecated: true,\n description: \"OSGB36 - Use OSGB-7P-2. Consider OSGB/OSTN15 instead\",\n ellipsoid: {\n description: \"Airy 1830\",\n equatorialRadius: 6377563.396,\n id: \"EPSG:7001\",\n polarRadius: 6356256.909237,\n source: \"EPSG, Version 6 [EPSG]\",\n },\n ellipsoidId: \"EPSG:7001\",\n id: \"EPSG:6277\",\n source: \"EPSG V6.12 operation EPSG:1314 [EPSG]\",\n transforms: [\n {\n method: \"PositionalVector\",\n positionalVector: {\n delta: {\n x: 446.448,\n y: -125.157,\n z: 542.06,\n },\n rotation: {\n x: 0.15,\n y: 0.247,\n z: 0.842,\n },\n scalePPM: -20.489,\n },\n sourceEllipsoid: {\n equatorialRadius: 6377563.396,\n id: \"EPSG:7001\",\n polarRadius: 6356256.909237,\n },\n targetEllipsoid: {\n equatorialRadius: 6378137,\n id: \"WGS84\",\n polarRadius: 6356752.3142,\n },\n }],\n },\n datumId: \"EPSG:6277\",\n deprecated: true,\n description: \"Use other variant - OSGB British National Grid\",\n extent: {\n northEast: {\n latitude: 60.84,\n longitude: 1.78,\n },\n southWest: {\n latitude: 49.96,\n longitude: -7.56,\n },\n },\n id: \"EPSG:27700\",\n projection: {\n centralMeridian: -2,\n falseEasting: 400000,\n falseNorthing: -100000,\n latitudeOfOrigin: 49,\n method: \"TransverseMercator\",\n scaleFactor: 0.999601272737422,\n },\n source: \"EPSG\",\n unit: \"Meter\",\n },\n verticalCRS: {\n id: \"ELLIPSOID\",\n },\n };\n\n await completionTest({ horizontalCRS: { id: \"EPSG:27700\" }, verticalCRS: { id: \"ELLIPSOID\" } }, britishNationalGridOld);\n });\n\n it(\"should be able to interpret to completion EWRGCS\", async () => {\n\n const EWRGCS: GeographicCRSProps = {\n horizontalCRS: {\n id: \"EPSG:27700\",\n description: \"OSGB 1936 / British National Grid\",\n source: \"EPSG V6 [Large and medium scale topographic mapping and engin]\",\n datumId: \"EPSG:6277\",\n datum: {\n id: \"EPSG:6277\",\n description: \"OSGB36 - Use OSGB-7P-2. Consider OSGB/OSTN15 instead\",\n deprecated: true,\n source: \"EPSG V6.12 operation EPSG:1314 [EPSG]\",\n ellipsoidId: \"EPSG:7001\",\n ellipsoid: {\n equatorialRadius: 6377563.396,\n polarRadius: 6356256.909237,\n id: \"EPSG:7001\",\n description: \"Airy 1830\",\n source: \"EPSG, Version 6 [EPSG]\",\n },\n transforms: [\n {\n method: \"PositionalVector\",\n sourceEllipsoid: {\n equatorialRadius: 6377563.396,\n polarRadius: 6356256.909237,\n id: \"EPSG:7001\",\n },\n targetEllipsoid: {\n equatorialRadius: 6378137,\n polarRadius: 6356752.3142,\n id: \"WGS84\",\n },\n positionalVector: {\n delta: {\n x: 446.448,\n y: -125.157,\n z: 542.06,\n },\n rotation: {\n x: 0.15,\n y: 0.247,\n z: 0.842,\n },\n scalePPM: -20.489,\n },\n }],\n },\n unit: \"Meter\",\n projection: {\n method: \"TransverseMercator\",\n falseEasting: 400000,\n falseNorthing: -100000,\n centralMeridian: -2,\n latitudeOfOrigin: 49,\n scaleFactor: 0.999601272737422,\n },\n extent: {\n southWest: {\n latitude: 49.96,\n longitude: -7.56,\n },\n northEast: {\n latitude: 60.84,\n longitude: 1.78,\n },\n },\n },\n verticalCRS: {\n id: \"ELLIPSOID\",\n },\n additionalTransform: {\n helmert2DWithZOffset: {\n translationX: 284597.3343,\n translationY: 79859.4651,\n translationZ: 0,\n rotDeg: 0.5263624458992088,\n scale: 0.9996703340508721,\n },\n },\n };\n\n await completionTest({ horizontalCRS: { id: \"EPSG:27700\" }, verticalCRS: { id: \"ELLIPSOID\" }, additionalTransform: { helmert2DWithZOffset: { translationX: 284597.3343, translationY: 79859.4651, translationZ: 0, rotDeg: 0.5263624458992088, scale: 0.9996703340508721 } } }, EWRGCS);\n });\n\n it(\"should be able to interpret to completion UTM27Z10\", async () => {\n\n const UTM27Z10: GeographicCRSProps = {\n horizontalCRS: {\n datum: {\n description: \"North American Datum of 1927 (US48, AK, HI, and Canada)\",\n ellipsoid: {\n description: \"Clarke 1866, Benoit Ratio\",\n epsg: 7008,\n equatorialRadius: 6378206.4,\n id: \"CLRK66\",\n polarRadius: 6356583.8,\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n },\n ellipsoidId: \"CLRK66\",\n epsg: 6267,\n id: \"NAD27\",\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n transforms: [\n {\n gridFile: {\n files: [\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/conus.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/alaska.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/prvi.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/hawaii.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/stgeorge.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/stlrnc.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/stpaul.l?s\",\n format: \"NADCON\",\n }],\n },\n method: \"GridFiles\",\n sourceEllipsoid: {\n equatorialRadius: 6378206.4,\n id: \"CLRK66\",\n polarRadius: 6356583.8,\n },\n targetEllipsoid: {\n equatorialRadius: 6378137,\n id: \"GRS1980\",\n polarRadius: 6356752.314140348,\n },\n }],\n },\n datumId: \"NAD27\",\n description: \"UTM with NAD27 datum, Zone 10, Meter; Central Meridian 123d W\",\n epsg: 26710,\n extent: {\n northEast: {\n latitude: 84,\n longitude: -119.5,\n },\n southWest: {\n latitude: -1,\n longitude: -126.5,\n },\n },\n id: \"UTM27-10\",\n projection: {\n hemisphere: \"North\",\n method: \"UniversalTransverseMercator\",\n zoneNumber: 10,\n },\n source: \"Snyder, J.P, 1987, Map Projections - A Working Manual\",\n unit: \"Meter\",\n },\n verticalCRS: {\n id: \"NGVD29\",\n },\n };\n\n await completionTest({ horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"NGVD29\" } }, UTM27Z10);\n });\n\n it(\"should be able to interpret to completion UTM27Z10B\", async () => {\n\n const UTM27Z10B: GeographicCRSProps =\n {\n horizontalCRS: {\n datum: {\n description: \"North American Datum of 1927 (US48, AK, HI, and Canada)\",\n ellipsoid: {\n description: \"Clarke 1866, Benoit Ratio\",\n epsg: 7008,\n equatorialRadius: 6378206.4,\n id: \"CLRK66\",\n polarRadius: 6356583.8,\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n },\n ellipsoidId: \"CLRK66\",\n epsg: 6267,\n id: \"NAD27\",\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n transforms: [\n {\n gridFile: {\n files: [\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/conus.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/alaska.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/prvi.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/hawaii.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/stgeorge.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/stlrnc.l?s\",\n format: \"NADCON\",\n },\n {\n direction: \"Direct\",\n fileName: \"./Usa/Nadcon/stpaul.l?s\",\n format: \"NADCON\",\n },\n ],\n },\n method: \"GridFiles\",\n sourceEllipsoid: {\n equatorialRadius: 6378206.4,\n id: \"CLRK66\",\n polarRadius: 6356583.8,\n },\n targetEllipsoid: {\n equatorialRadius: 6378137,\n id: \"GRS1980\",\n polarRadius: 6356752.314140348,\n },\n },\n ],\n },\n datumId: \"NAD27\",\n description: \"NAD27 / UTM zone 10N\",\n epsg: 26710,\n extent: {\n northEast: {\n latitude: 77,\n longitude: -120,\n },\n southWest: {\n latitude: 34.4,\n longitude: -126,\n },\n },\n id: \"EPSG:26710\",\n projection: {\n centralMeridian: -123,\n falseEasting: 500000,\n falseNorthing: 0,\n latitudeOfOrigin: 0,\n method: \"TransverseMercator\",\n scaleFactor: 0.9996,\n },\n source: \"EPSG V6 [Large and medium scale topographic mapping and engin]\",\n unit: \"Meter\",\n },\n verticalCRS: {\n id: \"NGVD29\",\n },\n };\n\n await completionTest({ horizontalCRS: { epsg: 26710 }, verticalCRS: { id: \"NGVD29\" } }, UTM27Z10B);\n });\n });\n\n describe(\"Interpretation of WKT GeographicCRS\", async () => {\n const interpretWKTTest = async (testWKT: string, completeCRS: GeographicCRSProps) => {\n\n const requestProps: GeographicCRSInterpretRequestProps = { format: \"WKT\", geographicCRSDef: testWKT };\n const response = IModelNative.platform.GeoServices.getGeographicCRSInterpretation(requestProps);\n\n assert.isTrue(response.status === 0);\n\n assert.isTrue(response.geographicCRS !== undefined);\n if (response.geographicCRS !== undefined) {\n assert.isTrue(response.geographicCRS.horizontalCRS !== undefined && completeCRS.horizontalCRS !== undefined);\n assert.isTrue(response.geographicCRS.horizontalCRS!.id === completeCRS.horizontalCRS!.id);\n assert.isTrue(response.geographicCRS.horizontalCRS!.projection !== undefined && completeCRS.horizontalCRS!.projection !== undefined);\n assert.isTrue(response.geographicCRS.horizontalCRS!.projection!.method === completeCRS.horizontalCRS!.projection!.method);\n if (completeCRS.horizontalCRS!.projection!.falseEasting !== undefined) {\n assert.isTrue(response.geographicCRS.horizontalCRS!.projection!.falseEasting !== undefined);\n assert.isTrue(Math.abs(response.geographicCRS.horizontalCRS!.projection!.falseEasting! - completeCRS.horizontalCRS!.projection!.falseEasting) < Geometry.smallMetricDistance);\n }\n if (completeCRS.horizontalCRS!.projection!.falseNorthing !== undefined) {\n assert.isTrue(response.geographicCRS.horizontalCRS!.projection!.falseNorthing !== undefined);\n assert.isTrue(Math.abs(response.geographicCRS.horizontalCRS!.projection!.falseNorthing! - completeCRS.horizontalCRS!.projection!.falseNorthing) < Geometry.smallMetricDistance);\n }\n\n assert.isTrue(response.geographicCRS.horizontalCRS!.datum !== undefined && completeCRS.horizontalCRS!.datum !== undefined);\n assert.isTrue(response.geographicCRS.horizontalCRS!.datum!.id === completeCRS.horizontalCRS!.datum!.id);\n\n assert.isTrue(response.geographicCRS.horizontalCRS!.datum!.ellipsoid !== undefined && completeCRS.horizontalCRS!.datum!.ellipsoid !== undefined);\n assert.isTrue(response.geographicCRS.horizontalCRS!.datum!.ellipsoid!.id === completeCRS.horizontalCRS!.datum!.ellipsoid!.id);\n\n assert.isTrue(response.geographicCRS.verticalCRS !== undefined && completeCRS.verticalCRS !== undefined);\n assert.isTrue(response.geographicCRS.verticalCRS!.id === completeCRS.verticalCRS!.id);\n\n // WKTs cannot define an additional transform\n assert.isTrue(response.geographicCRS.additionalTransform === undefined);\n }\n };\n\n it(\"should be able to interpret airportGrid2007 WKT\", async () => {\n const airportGrid2007: GeographicCRSProps =\n {\n horizontalCRS: {\n datum: {\n description: \"Heathrow T5 Datum\",\n ellipsoid: {\n description: \"Airy, 1830\",\n epsg: 7001,\n equatorialRadius: 6377563.396,\n id: \"AIRY30\",\n polarRadius: 6356256.909,\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n },\n ellipsoidId: \"AIRY30\",\n id: \"HeathrowT5\",\n source: \"Bentley Client\",\n transforms: [\n {\n method: \"PositionalVector\",\n positionalVector: {\n delta: {\n x: 358.398212181898,\n y: -213.702844870731,\n z: 495.318319769716,\n },\n rotation: {\n x: 668.806139320047,\n y: -4.72664217602752,\n z: 719.671097181396,\n },\n scalePPM: -6.26386076385543,\n },\n sourceEllipsoid: {\n equatorialRadius: 6377563.396,\n id: \"AIRY30\",\n polarRadius: 6356256.909,\n },\n targetEllipsoid: {\n equatorialRadius: 6378137,\n id: \"WGS84\",\n polarRadius: 6356752.3142,\n },\n },\n ],\n },\n datumId: \"HeathrowT5\",\n description: \"AirportGrid2007\",\n id: \"AirportGrid2007\",\n projection: {\n centralMeridian: -0.41832591666666674,\n falseEasting: 7334.81,\n falseNorthing: 5637.423,\n latitudeOfOrigin: 51.47011065555556,\n method: \"TransverseMercator\",\n scaleFactor: 0.999995,\n },\n source: \"WKT\",\n unit: \"Meter\",\n },\n verticalCRS: {\n id: \"ELLIPSOID\",\n },\n };\n\n await interpretWKTTest('PROJCS[\"AirportGrid2007\", GEOGCS[\"HeathrowT5.LL\",DATUM[\"Heathrow T5\", SPHEROID[\"AIRY30\",6377563.396,299.32496127],358.398,-213.7028,495.3183,-668.80613932004700,4.72664217602752,-719.67109718139600,-6.26386076385543],PRIMEM[\"Greenwich\",0],UNIT[\"Decimal Degree\",0.017453292519943295]],PROJECTION[\"Transverse Mercator\"],PARAMETER[\"latitude_of_origin\",51.470110655555558],PARAMETER[\"central_meridian\",-0.41832591666666669],PARAMETER[\"scale_factor\",0.999995],PARAMETER[\"false_easting\",7334.810],PARAMETER[\"false_northing\",5637.423],UNIT[\"Meter\",1.00000000000000]]', airportGrid2007);\n });\n\n it(\"should be able to interpret denmarkED50 WKT\", async () => {\n\n const denmarkED50: GeographicCRSProps =\n {\n horizontalCRS: {\n datum: {\n description: \"European 1950, Denmark, for System 34\",\n ellipsoid: {\n description: \"Hayford, 1924 (aka 1909); same as International 1924\",\n epsg: 7022,\n equatorialRadius: 6378388,\n id: \"HAYFORD\",\n polarRadius: 6356911.9461279465,\n source: \"Snyder, J.P., 1987, Map Projections - A Working Manual\",\n },\n ellipsoidId: \"HAYFORD\",\n id: \"ED50-DK34\",\n source: \"KMSTrans, by Kort-og Matrikelstyrelsen (Nov 1999)\",\n transforms: [\n {\n method: \"PositionalVector\",\n positionalVector: {\n delta: {\n x: -81.0703,\n y: -89.3603,\n z: -115.7526,\n },\n rotation: {\n x: 0.48488,\n y: 0.02436,\n z: 0.41321,\n },\n scalePPM: -0.540645,\n },\n sourceEllipsoid: {\n equatorialRadius: 6378388,\n id: \"HAYFORD\",\n polarRadius: 6356911.9461279465,\n },\n targetEllipsoid: {\n equatorialRadius: 6378137,\n id: \"WGS84\",\n polarRadius: 6356752.3142,\n },\n },\n ],\n },\n datumId: \"ED50-DK34\",\n description: \"DummyName\",\n extent: {\n northEast: {\n latitude: 90,\n longitude: 180,\n },\n southWest: {\n latitude: -90,\n longitude: -180,\n },\n },\n id: \"DummyName\",\n projection: {\n method: \"None\",\n },\n source: \"Extracted from WKT string; description field carries WKT name.\",\n unit: \"Degree\",\n },\n verticalCRS: {\n id: \"ELLIPSOID\",\n },\n };\n\n await interpretWKTTest('GEOGCS[ \"DummyName\", DATUM [\"European 1950 (Denmark)\", SPHEROID [\"International 1924\", 6378388, 297],-81.0703, -89.3603, -115.7526, .48488, .02436, .41321, -.540645], PRIMEM [ \"Greenwich\", 0.000000 ], UNIT [\"Decimal Degree\", 0.01745329251994330]]', denmarkED50);\n });\n\n it(\"should be able to interpret californiaStateZone2 WKT\", async () => {\n\n const californiaStateZone2: GeographicCRSProps =\n {\n horizontalCRS: {\n datum: {\n description: \"North American Datum of 1983\",\n ellipsoid: {\n description: \"Geodetic Reference System of 1980\",\n epsg: 7019,\n equatorialRadius: 6378137,\n id: \"GRS1980\",\n polarRadius: 6356752.314140348,\n source: \"Stem, L.E., Jan 1989, State Plane Coordinate System of 1983\",\n },\n ellipsoidId: \"GRS1980\",\n epsg: 6269,\n id: \"NAD83\",\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n transforms: [\n {\n method: \"None\",\n },\n ],\n },\n datumId: \"NAD83\",\n description: \"NAD_1983_StatePlane_California_II_FIPS_0402_Feet\",\n id: \"NAD_1983_StatePlane_Cal\",\n projection: {\n falseEasting: 6561666.666666666,\n falseNorthing: 1640416.666666667,\n latitudeOfOrigin: 37.66666666666666,\n longitudeOfOrigin: -122,\n method: \"LambertConformalConicTwoParallels\",\n standardParallel1: 38.33333333333334,\n standardParallel2: 39.83333333333334,\n },\n source: \"WKT\",\n unit: \"USSurveyFoot\",\n },\n verticalCRS: {\n id: \"NAVD88\",\n },\n };\n\n await interpretWKTTest('PROJCS[\"NAD_1983_StatePlane_California_II_FIPS_0402_Feet\",GEOGCS[\"GCS_North_American_1983\",DATUM[\"D_North_American_1983\",SPHEROID[\"GRS_1980\",6378137,298.257222101]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]],PROJECTION[\"Lambert_Conformal_Conic\"],PARAMETER[\"False_Easting\",6561666.666666666],PARAMETER[\"False_Northing\",1640416.666666667],PARAMETER[\"Central_Meridian\",-122],PARAMETER[\"Standard_Parallel_1\",38.33333333333334],PARAMETER[\"Standard_Parallel_2\",39.83333333333334],PARAMETER[\"Latitude_Of_Origin\",37.66666666666666],UNIT[\"Foot_US\",0.30480060960121924]]', californiaStateZone2);\n });\n\n it(\"should be able to interpret utm84Zone34S WKT\", async () => {\n\n const utm84Zone34S: GeographicCRSProps =\n {\n horizontalCRS: {\n datum: {\n description: \"World Geodetic System of 1984\",\n ellipsoid: {\n description: \"World Geodetic System of 1984, GEM 10C\",\n epsg: 7030,\n equatorialRadius: 6378137,\n id: \"WGS84\",\n polarRadius: 6356752.3142,\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n },\n ellipsoidId: \"WGS84\",\n epsg: 6326,\n id: \"WGS84\",\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n transforms: [\n {\n method: \"None\",\n },\n ],\n },\n datumId: \"WGS84\",\n description: \"WGS 84 / UTM zone 34S\",\n id: \"WGS 84 / UTM zone 34S\",\n projection: {\n centralMeridian: 20.999999999999982,\n falseEasting: 500000,\n falseNorthing: 10000000,\n latitudeOfOrigin: 0,\n method: \"TransverseMercator\",\n scaleFactor: 0.9996,\n },\n source: \"WKT\",\n unit: \"Meter\",\n },\n verticalCRS: {\n id: \"ELLIPSOID\",\n },\n };\n\n await interpretWKTTest('PROJCS[\"WGS 84 / UTM zone 34S\", GEOGCS [ \"WGS 84\", DATUM [\"World Geodetic System 1984 (EPSG ID 6326)\", SPHEROID [\"WGS 84 (EPSG ID 7030)\", 6378137, 298.257223563]], PRIMEM [ \"Greenwich\", 0.000000 ], UNIT [\"Decimal Degree\", 0.01745329251994328]], PROJECTION [\"UTM zone 34S (EPSG OP 16134)\"], PARAMETER [\"Latitude_Of_Origin\", 0], PARAMETER [\"Central_Meridian\", 21], PARAMETER [\"Scale_Factor\", .9996], PARAMETER [\"False_Easting\", 500000], PARAMETER [\"False_Northing\", 10000000], UNIT [\"Meter\", 1]]', utm84Zone34S);\n });\n\n it(\"should be able to interpret utm84Zone32NGeoid WKT\", async () => {\n\n const utm84Zone32NGeoid: GeographicCRSProps =\n {\n horizontalCRS: {\n datum: {\n description: \"World Geodetic System of 1984\",\n ellipsoid: {\n description: \"World Geodetic System of 1984, GEM 10C\",\n epsg: 7030,\n equatorialRadius: 6378137,\n id: \"WGS84\",\n polarRadius: 6356752.3142,\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n },\n ellipsoidId: \"WGS84\",\n epsg: 6326,\n id: \"WGS84\",\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n transforms: [\n {\n method: \"None\",\n },\n ],\n },\n datumId: \"WGS84\",\n description: \"WGS 84 / UTM zone32N\",\n id: \"WGS 84 / UTM zone32N\",\n projection: {\n centralMeridian: 9,\n falseEasting: 500000,\n falseNorthing: 0,\n latitudeOfOrigin: 0,\n method: \"TransverseMercator\",\n scaleFactor: 0.9996,\n },\n source: \"WKT\",\n unit: \"Meter\",\n },\n verticalCRS: {\n id: \"GEOID\",\n },\n };\n\n await interpretWKTTest('COMPD_CS[\"WGS 84 / UTM zone 32N + EGM96 geoid height\",PROJCS[\"WGS 84 / UTM zone32N\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"32632\"]],VERT_CS[\"EGM96 geoid height\",VERT_DATUM[\"EGM96 geoid\",2005,EXTENSION[\"PROJ4_GRIDS\",\"egm96_15.gtx\"],AUTHORITY[\"EPSG\",\"5171\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Up\",UP],AUTHORITY[\"EPSG\",\"5773\"]]]', utm84Zone32NGeoid);\n });\n it(\"should be able to interpret utm84Zone18NGeoid WKT\", async () => {\n\n const utm84Zone18NGeoid: GeographicCRSProps =\n {\n horizontalCRS: {\n datum: {\n description: \"World Geodetic System of 1984\",\n ellipsoid: {\n description: \"World Geodetic System of 1984, GEM 10C\",\n epsg: 7030,\n equatorialRadius: 6378137,\n id: \"WGS84\",\n polarRadius: 6356752.3142,\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n },\n ellipsoidId: \"WGS84\",\n epsg: 6326,\n id: \"WGS84\",\n source: \"US Defense Mapping Agency, TR-8350.2-B, December 1987\",\n transforms: [\n {\n method: \"None\",\n },\n ],\n },\n datumId: \"WGS84\",\n description: \"UTM84-18N\",\n id: \"UTM84-18N\",\n projection: {\n hemisphere: \"North\",\n method: \"UniversalTransverseMercator\",\n zoneNumber: 18,\n },\n source: \"WKT\",\n unit: \"Meter\",\n },\n verticalCRS: {\n id: \"GEOID\",\n },\n };\n\n await interpretWKTTest('COMPD_CS[\"UTM84-18N\",PROJCS[\"UTM84-18N\",GEOGCS[\"LL84\",DATUM[\"WGS84\",SPHEROID[\"WGS84\",6378137.000,298.25722293]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]],PROJECTION[\"Universal Transverse Mercator System\"],PARAMETER[\"UTM Zone Number (1 - 60)\",18.0],PARAMETER[\"Hemisphere, North or South\",1.0],UNIT[\"Meter\",1.00000000000000]],VERT_CS[\"Geoid Height\",VERT_DATUM[\"EGM96 geoid\",2005],UNIT[\"METER\",1.000000]]]', utm84Zone18NGeoid);\n });\n });\n\n describe(\"Verify list of CRS\", async () => {\n const validationRange = 50;\n const validationRangeSmall = 10;\n\n interface CRSValidationOptions {\n expectedCount: number;\n allowedRange: number;\n extent?: Range2dProps;\n includeWorld?: boolean;\n }\n\n const validateCRSList = async (options: CRSValidationOptions): Promise<void> => {\n const { expectedCount, allowedRange, extent, includeWorld } = options;\n const listOfCRS = await getAvailableCoordinateReferenceSystems({ extent, includeWorld });\n\n // Check fields of returned coordinate reference systems\n const extentRange: Range2d = Range2d.fromJSON(extent);\n for (const crs of listOfCRS) {\n // Validate extent\n if (extent !== undefined) {\n const crsExtentRange: Range2d = Range2d.fromJSON(crs.crsExtent);\n const intersects = extentRange.intersectsRange(crsExtentRange);\n assert.isTrue(intersects);\n }\n\n // These fields should always be present\n assert.isTrue(crs.name !== undefined);\n assert.isTrue(crs.description !== undefined);\n assert.isTrue(crs.deprecated === true || crs.deprecated === false);\n }\n\n assert.isTrue(listOfCRS.length > expectedCount - allowedRange && listOfCRS.length < expectedCount + allowedRange);\n };\n\n const validateExtent = (expectedExtent: Range2d, crsExtent: Range2dProps) => {\n const crsExtentRange: Range2d = Range2d.fromJSON(crsExtent);\n assert.equal(crsExtentRange.low.x, expectedExtent.low.x);\n assert.equal(crsExtentRange.low.y, expectedExtent.low.y);\n assert.equal(crsExtentRange.high.x, expectedExtent.high.x);\n assert.equal(crsExtentRange.high.y, expectedExtent.high.y);\n };\n\n it(\"should get all CRS\", async () => {\n await validateCRSList({expectedCount: 12_332, allowedRange: validationRange, includeWorld: true});\n });\n\n it(\"should get all CRS, excluding world crs\", async () => {\n await validateCRSList({expectedCount: 11_975, allowedRange: validationRange});\n })\n\n it(\"should return CRS that are in the specified range (1)\", async () => {\n const extent: Range2dProps = { low: { x: 60.1, y: 61.2 }, high: { x: 62.3, y: 63.4 } };\n await validateCRSList({expectedCount: 82, allowedRange: validationRangeSmall, extent});\n await validateCRSList({expectedCount: 439, allowedRange: validationRangeSmall, extent, includeWorld: true});\n });\n\n it(\"should return CRS that are in the specified range (2)\", async () => {\n const extent: Range2dProps = { low: { x: 0, y: 2 }, high: { x: 1, y: 3 } };\n await validateCRSList({expectedCount: 67, allowedRange: validationRangeSmall, extent});\n await validateCRSList({expectedCount: 424, allowedRange: validationRangeSmall, extent, includeWorld: true});\n });\n\n it(\"should return CRS that are in the specified range (3)\", async () => {\n const extent: Range2dProps = { low: { x: 0.3, y: 2.4 }, high: { x: 1.6, y: 3.77 } };\n await validateCRSList({expectedCount: 62, allowedRange: validationRangeSmall, extent});\n await validateCRSList({expectedCount: 419, allowedRange: validationRangeSmall, extent, includeWorld: true});\n });\n\n it(\"should retrieve the whole list of CRS and validate the properties for a few selected CRS.\", async () => {\n const listOfCRS = await getAvailableCoordinateReferenceSystems({includeWorld: true});\n let nbFound = 0;\n for (const crs of listOfCRS) {\n switch (crs.name) {\n case \"3TM111-83\":\n nbFound++;\n assert.equal(crs.description, \"Use NAD83-AB/3TM-111 instead.\");\n assert.equal(crs.deprecated, true);\n validateExtent(Range2d.fromJSON({ low: { x: -113, y: 48 }, high: { x: -109, y: 84 } }), crs.crsExtent);\n break;\n case \"NAD27-CAN.MTM-1\":\n nbFound++;\n assert.equal(crs.description, \"NAD27 / MTM zone 1\");\n assert.equal(crs.deprecated, false);\n validateExtent(Range2d.fromJSON({ low: { x: -54.5, y: 45 }, high: { x: -50.5, y: 55 } }), crs.crsExtent);\n break;\n case \"AL83-EF\":\n nbFound++;\n assert.equal(crs.description, \"NAD83 Alabama State Plane, East Zone, US Foot\");\n assert.equal(crs.deprecated, false);\n validateExtent(Range2d.fromJSON({ low: { x: -87.5, y: 30 }, high: { x: -84, y: 35.75 } }), crs.crsExtent);\n break;\n case \"ME-E\":\n nbFound++;\n assert.equal(crs.description, \"NAD27 Maine State Plane, East Zone(1801), US Foot\");\n assert.equal(crs.deprecated, false);\n validateExtent(Range2d.fromJSON({ low: { x: -71, y: 43.5 }, high: { x: -66, y: 48 } }), crs.crsExtent);\n break;\n\n // world CRS\n case \"EPSG:4326\":\n nbFound++;\n assert.equal(crs.description, \"WGS 84\");\n assert.equal(crs.deprecated, false);\n validateExtent(Range2d.fromJSON({ low: { x: -180, y: -90 }, high: { x: 180, y: 90 } }), crs.crsExtent);\n break;\n }\n }\n assert.equal(nbFound, 5);\n });\n\n it(\"check CRS units\", () => {\n const expectedUnits = [\"Meter\", \"Degree\", \"USSurveyFoot\", \"InternationalFoot\"];\n\n const definitiveListOfUnits = getAvailableCRSUnits();\n assert.isAtLeast(definitiveListOfUnits.length, expectedUnits.length);\n\n for (const unit of expectedUnits) {\n assert.include(definitiveListOfUnits, unit);\n }\n });\n\n it(\"can filter by each CRS unit\", async () => {\n const minExpectedCounts = new Map<string, number>([\n [\"Meter\", 8000],\n [\"Degree\", 1000],\n [\"USSurveyFoot\", 100],\n [\"InternationalFoot\", 50],\n ]);\n\n const units = getAvailableCRSUnits();\n for (const unit of units) {\n const listOfCRS = await getAvailableCoordinateReferenceSystems({\n includeWorld: true,\n unit,\n });\n\n const minExpected = minExpectedCounts.get(unit) ?? 1;\n assert.isAtLeast(listOfCRS.length, minExpected, `Expected at least ${minExpected} CRS with unit \"${unit}\", got ${listOfCRS.length}`);\n for (const crs of listOfCRS) {\n assert.equal(\n crs.unit, unit,\n `CRS \"${crs.name}\" has unexpected unit \"${crs.unit}\" (expected \"${unit}\")`\n );\n }\n }\n });\n\n it(\"can filter by unit case-insensitively\", async () => {\n const units = getAvailableCRSUnits();\n for (const unit of units) {\n const canonicalList = await getAvailableCoordinateReferenceSystems({\n includeWorld: true,\n unit,\n });\n const lowerCaseFilterList = await getAvailableCoordinateReferenceSystems({\n includeWorld: true,\n unit: unit.toLowerCase(),\n });\n\n assert.sameMembers(\n lowerCaseFilterList.map((crs) => crs.name),\n canonicalList.map((crs) => crs.name),\n `Expected lowercase unit filter to match canonical filter for \"${unit}\"`,\n );\n }\n });\n });\n\n it(\"should not be able to interpret an invalid GeographicCRS\", async () => {\n\n const interpretInvalidTest = async (formatCRS: \"WKT\" | \"JSON\", testInvalid: string) => {\n\n const requestProps: GeographicCRSInterpretRequestProps = { format: formatCRS, geographicCRSDef: testInvalid };\n const response = IModelNative.platform.GeoServices.getGeographicCRSInterpretation(requestProps);\n\n // At the moment return codes are not really error specific (we mostly return 32768) so we do not validate\n // actual error code for now.\n assert.isFalse(response.status === 0);\n };\n\n // WKT Without datum or projection clause\n await interpretInvalidTest(\"WKT\", 'PROJCS[\"AirportGrid2007\", GEOGCS[\"HeathrowT5.LL\",PRIMEM[\"Greenwich\",0],UNIT[\"Decimal Degree\",0.017453292519943295]],UNIT[\"Meter\",1.00000000000000]]');\n\n // Plain garbage\n await interpretInvalidTest(\"WKT\", \"Some invalid content\");\n\n // Format is JSON but content is WKT\n await interpretInvalidTest(\"JSON\", 'GEOGCS[ \"Longitude / Latitude (ED 50 Denmark)\", DATUM [\"European 1950 (Denmark)\", SPHEROID [\"International 1924\", 6378388, 297],-81.0703, -89.3603, -115.7526, .48488, .02436, .41321, -.540645], PRIMEM [ \"Greenwich\", 0.000000 ], UNIT [\"Decimal Degree\", 0.01745329251994330]]');\n\n // Vertical datum invalid for horizontal definition\n await interpretInvalidTest(\"JSON\", '{ horizontalCRS: { id: \"EPSG:27700\" }, verticalCRS: { id: \"NAVD29\" } }');\n\n // No horizontal CRS\n await interpretInvalidTest(\"JSON\", '{ verticalCRS: { id: \"NAVD29\" } }');\n\n // Unknown identifier\n await interpretInvalidTest(\"JSON\", '{ horizontalCRS: { id: \"UNKNOWN\" }, verticalCRS: { id: \"NAVD29\" } }');\n });\n\n it(\"should return expected Transform from Helmert2DWithZOffset object\", async () =>{\n const helmertTransform = new Helmert2DWithZOffset({ translationX: 1, translationY: 1, translationZ: 1, rotDeg: 90, scale: 2 });\n const convertedTransform = helmertTransform.convertHelmertToTransform();\n\n const originExpected = Point3d.fromJSON({x:1, y:1, z:1});\n assert(convertedTransform.origin.isAlmostEqual(originExpected));\n const expectedCoffs = [0, -2, 0, 2, 0, 0, 0, 0, 1];\n const actualCoffs = Array.from(convertedTransform.matrix.coffs);\n for (let i = 0; i < expectedCoffs.length; ++i) {\n assert(Math.abs(actualCoffs[i] - expectedCoffs[i]) < 1e-12, `Matrix coefficient at index ${i} differs: expected ${expectedCoffs[i]}, got ${actualCoffs[i]}`);\n }\n });\n});\n"]}
|