@itwin/core-backend 5.15.0-dev.5 → 5.15.0-dev.6
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/lib/cjs/GeographicCRSServices.d.ts +50 -2
- package/lib/cjs/GeographicCRSServices.d.ts.map +1 -1
- package/lib/cjs/GeographicCRSServices.js +11 -1
- package/lib/cjs/GeographicCRSServices.js.map +1 -1
- package/lib/esm/GeographicCRSServices.d.ts +50 -2
- package/lib/esm/GeographicCRSServices.d.ts.map +1 -1
- package/lib/esm/GeographicCRSServices.js +10 -1
- package/lib/esm/GeographicCRSServices.js.map +1 -1
- package/lib/esm/test/imodel/IModelGeolocation.test.js +3 -3
- package/lib/esm/test/imodel/IModelGeolocation.test.js.map +1 -1
- package/package.json +15 -15
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** @packageDocumentation
|
|
2
2
|
* @module iModels
|
|
3
3
|
*/
|
|
4
|
-
import { Range2dProps } from "@itwin/core-geometry";
|
|
4
|
+
import { Range2dProps, XAndY } from "@itwin/core-geometry";
|
|
5
5
|
/** Describes a coordinate reference system produced by [[getAvailableCoordinateReferenceSystems]].
|
|
6
6
|
* @beta
|
|
7
7
|
*/
|
|
@@ -45,13 +45,61 @@ export interface GetAvailableCoordinateReferenceSystemsArgs {
|
|
|
45
45
|
*/
|
|
46
46
|
unit?: string;
|
|
47
47
|
}
|
|
48
|
+
/** Describes a vertical coordinate reference system produced by [[getAvailableVerticalCoordinateReferenceSystems]].
|
|
49
|
+
* @beta
|
|
50
|
+
*/
|
|
51
|
+
export interface AvailableVerticalCoordinateReferenceSystemProps {
|
|
52
|
+
/** Name in the Bentley Vertical Datum dictionary. */
|
|
53
|
+
crsName: string;
|
|
54
|
+
/** Backward-compatible approximation used by older readers. */
|
|
55
|
+
id: "GEOID" | "ELLIPSOID" | "NGVD29" | "NAVD88" | "LOCAL_ELLIPSOID";
|
|
56
|
+
/** EPSG code identifying the vertical coordinate reference system, when one is defined. */
|
|
57
|
+
epsg?: number;
|
|
58
|
+
/** Description of the vertical coordinate reference system. */
|
|
59
|
+
description: string;
|
|
60
|
+
/** Whether the vertical coordinate reference system is deprecated. */
|
|
61
|
+
deprecated: boolean;
|
|
62
|
+
/** The vertical coordinate reference system type. */
|
|
63
|
+
type: string;
|
|
64
|
+
/** The name of the linear unit used by the vertical coordinate reference system.
|
|
65
|
+
* The value uses the canonical casing returned by [[getAvailableCRSUnits]].
|
|
66
|
+
*/
|
|
67
|
+
unit: string;
|
|
68
|
+
/** The geographic extent where the vertical coordinate reference system applies. */
|
|
69
|
+
extent: Range2dProps;
|
|
70
|
+
}
|
|
71
|
+
/** Arguments supplied to [[getAvailableVerticalCoordinateReferenceSystems]].
|
|
72
|
+
* @beta
|
|
73
|
+
*/
|
|
74
|
+
export interface GetAvailableVerticalCoordinateReferenceSystemsArgs {
|
|
75
|
+
/** If provided, only return vertical coordinate reference systems applicable at this geographic point in degrees.
|
|
76
|
+
* The x coordinate is longitude and the y coordinate is latitude.
|
|
77
|
+
*/
|
|
78
|
+
point?: XAndY;
|
|
79
|
+
/** If provided, only return vertical coordinate reference systems whose extent contains this extent. */
|
|
80
|
+
extent?: Range2dProps;
|
|
81
|
+
/** If true, include vertical coordinate reference systems whose extent intersects, but does not contain, [[extent]].
|
|
82
|
+
* @default false
|
|
83
|
+
*/
|
|
84
|
+
includeIntersecting?: boolean;
|
|
85
|
+
/** If provided, filter vertical coordinate reference systems by unit name.
|
|
86
|
+
* Matching is case-insensitive. Use [[getAvailableCRSUnits]] to get a list of canonical unit names.
|
|
87
|
+
*/
|
|
88
|
+
unit?: string;
|
|
89
|
+
}
|
|
48
90
|
/** Get a list of Geographic Coordinate Reference Systems.
|
|
49
91
|
* @param options Specifies the parameters to filter the returned list.
|
|
50
92
|
* @returns The list of Geographic Coordinate Reference Systems, according to the supplied parameters.
|
|
51
93
|
* @beta
|
|
52
94
|
*/
|
|
53
95
|
export declare function getAvailableCoordinateReferenceSystems(args: GetAvailableCoordinateReferenceSystemsArgs): Promise<AvailableCoordinateReferenceSystemProps[]>;
|
|
54
|
-
/** Get a list of
|
|
96
|
+
/** Get a list of Vertical Coordinate Reference Systems.
|
|
97
|
+
* @param args Specifies the parameters used to filter the returned list. Point and extent filters are mutually exclusive.
|
|
98
|
+
* @returns The list of Vertical Coordinate Reference Systems according to the supplied parameters.
|
|
99
|
+
* @beta
|
|
100
|
+
*/
|
|
101
|
+
export declare function getAvailableVerticalCoordinateReferenceSystems(args?: GetAvailableVerticalCoordinateReferenceSystemsArgs): AvailableVerticalCoordinateReferenceSystemProps[];
|
|
102
|
+
/** Get a list of units used by horizontal and vertical coordinate reference systems in iTwin.js.
|
|
55
103
|
* @returns An array of canonical unit names.
|
|
56
104
|
* @beta
|
|
57
105
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeographicCRSServices.d.ts","sourceRoot":"","sources":["../../src/GeographicCRSServices.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"GeographicCRSServices.d.ts","sourceRoot":"","sources":["../../src/GeographicCRSServices.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAI3D;;GAEG;AACH,MAAM,WAAW,uCAAuC;IACtD,mJAAmJ;IACnJ,IAAI,EAAE,MAAM,CAAC;IACb,8JAA8J;IAC9J,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,SAAS,EAAE,YAAY,CAAC;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,0CAA0C;IACzD;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,+CAA+C;IAC9D,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,EAAE,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,iBAAiB,CAAC;IACpE,2FAA2F;IAC3F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,UAAU,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,kDAAkD;IACjE;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,wGAAwG;IACxG,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAsB,sCAAsC,CAC1D,IAAI,EAAE,0CAA0C,GAC/C,OAAO,CAAC,uCAAuC,EAAE,CAAC,CAOpD;AAED;;;;GAIG;AACH,wBAAgB,8CAA8C,CAC5D,IAAI,GAAE,kDAAuD,GAC5D,+CAA+C,EAAE,CAGnD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAG/C"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.getAvailableCoordinateReferenceSystems = getAvailableCoordinateReferenceSystems;
|
|
11
|
+
exports.getAvailableVerticalCoordinateReferenceSystems = getAvailableVerticalCoordinateReferenceSystems;
|
|
11
12
|
exports.getAvailableCRSUnits = getAvailableCRSUnits;
|
|
12
13
|
const NativePlatform_1 = require("./internal/NativePlatform");
|
|
13
14
|
const GeoCoordConfig_1 = require("./GeoCoordConfig");
|
|
@@ -20,7 +21,16 @@ async function getAvailableCoordinateReferenceSystems(args) {
|
|
|
20
21
|
GeoCoordConfig_1.GeoCoordConfig.loadDefaultDatabases();
|
|
21
22
|
return NativePlatform_1.IModelNative.platform.GeoServices.getListOfCRS(args.extent, args.includeWorld, args.unit);
|
|
22
23
|
}
|
|
23
|
-
/** Get a list of
|
|
24
|
+
/** Get a list of Vertical Coordinate Reference Systems.
|
|
25
|
+
* @param args Specifies the parameters used to filter the returned list. Point and extent filters are mutually exclusive.
|
|
26
|
+
* @returns The list of Vertical Coordinate Reference Systems according to the supplied parameters.
|
|
27
|
+
* @beta
|
|
28
|
+
*/
|
|
29
|
+
function getAvailableVerticalCoordinateReferenceSystems(args = {}) {
|
|
30
|
+
GeoCoordConfig_1.GeoCoordConfig.loadDefaultDatabases();
|
|
31
|
+
return NativePlatform_1.IModelNative.platform.GeoServices.getListOfVerticalCRS(args);
|
|
32
|
+
}
|
|
33
|
+
/** Get a list of units used by horizontal and vertical coordinate reference systems in iTwin.js.
|
|
24
34
|
* @returns An array of canonical unit names.
|
|
25
35
|
* @beta
|
|
26
36
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeographicCRSServices.js","sourceRoot":"","sources":["../../src/GeographicCRSServices.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;
|
|
1
|
+
{"version":3,"file":"GeographicCRSServices.js","sourceRoot":"","sources":["../../src/GeographicCRSServices.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;AAoGH,wFASC;AAOD,wGAKC;AAMD,oDAGC;AA/HD,8DAAyD;AACzD,qDAAkD;AA2FlD;;;;GAIG;AACI,KAAK,UAAU,sCAAsC,CAC1D,IAAgD;IAEhD,+BAAc,CAAC,oBAAoB,EAAE,CAAC;IACtC,OAAO,6BAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CACnD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,IAAI,CACV,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,8CAA8C,CAC5D,OAA2D,EAAE;IAE7D,+BAAc,CAAC,oBAAoB,EAAE,CAAC;IACtC,OAAO,6BAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB;IAClC,+BAAc,CAAC,oBAAoB,EAAE,CAAC;IACtC,OAAO,6BAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC;AACnE,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module iModels\r\n */\r\n\r\nimport { Range2dProps, XAndY } from \"@itwin/core-geometry\";\r\nimport { IModelNative } from \"./internal/NativePlatform\";\r\nimport { GeoCoordConfig } from \"./GeoCoordConfig\";\r\n\r\n/** Describes a coordinate reference system produced by [[getAvailableCoordinateReferenceSystems]].\r\n * @beta\r\n */\r\nexport interface AvailableCoordinateReferenceSystemProps {\r\n /** The name of the coordinate reference system. It can be presented to the user in the UI as an identifier for the coordinate reference system. */\r\n name: string;\r\n /** The description of the coordinate reference system. It can be presented to the user in the UI as extra information for the coordinate reference system. */\r\n description: string;\r\n /** Indicate if the coordinate reference system is deprecated. A coordinate reference system is deprecated if it is no longer recommended for use.\r\n * A deprecated coordinate reference system can usually be substituted by a more accurate one. It is possible that an existing project uses a deprecated coordinate reference system.\r\n * However, for new projects, it is recommended to use a non-deprecated coordinate reference system.\r\n */\r\n deprecated: boolean;\r\n /** Extent of the coordinate reference system. This is the area where the coordinate reference system can be used.\r\n * Outside of this area, the coordinate reference system may not be accurate. The extent is defined by a range of longitude and latitude values.\r\n * Minimum longitude and latitude correspond to crsExtent.low.x and crsExtent.low.y, respectively.\r\n * Maximum longitude and latitude correspond to crsExtent.high.x and crsExtent.high.y, respectively.\r\n */\r\n crsExtent: Range2dProps;\r\n /** The name of the linear unit used by the coordinate reference system.\r\n * When returned by [[getAvailableCoordinateReferenceSystems]], the value uses the canonical casing returned by [[getAvailableCRSUnits]].\r\n */\r\n unit?: string;\r\n}\r\n\r\n/** Arguments supplied to [[getAvailableCoordinateReferenceSystems]].\r\n * @beta\r\n */\r\nexport interface GetAvailableCoordinateReferenceSystemsArgs {\r\n /** If provided, only return coordinate reference systems that contain the given extent. Minimum longitude and latitude correspond to extent.low.x and extent.low.y, respectively.\r\n * Maximum longitude and latitude correspond to extent.high.x and extent.high.y, respectively.\r\n */\r\n extent?: Range2dProps;\r\n /** If true, returns additional coordinate reference systems with extents spanning the entire Earth's surface.\r\n * @default false\r\n */\r\n includeWorld?: boolean;\r\n /**\r\n * If provided, filter coordinate reference systems by unit name.\r\n * Matching is case-insensitive.\r\n * Use [[getAvailableCRSUnits]] to get a list of canonical unit names.\r\n */\r\n unit?: string;\r\n}\r\n\r\n/** Describes a vertical coordinate reference system produced by [[getAvailableVerticalCoordinateReferenceSystems]].\r\n * @beta\r\n */\r\nexport interface AvailableVerticalCoordinateReferenceSystemProps {\r\n /** Name in the Bentley Vertical Datum dictionary. */\r\n crsName: string;\r\n /** Backward-compatible approximation used by older readers. */\r\n id: \"GEOID\" | \"ELLIPSOID\" | \"NGVD29\" | \"NAVD88\" | \"LOCAL_ELLIPSOID\";\r\n /** EPSG code identifying the vertical coordinate reference system, when one is defined. */\r\n epsg?: number;\r\n /** Description of the vertical coordinate reference system. */\r\n description: string;\r\n /** Whether the vertical coordinate reference system is deprecated. */\r\n deprecated: boolean;\r\n /** The vertical coordinate reference system type. */\r\n type: string;\r\n /** The name of the linear unit used by the vertical coordinate reference system.\r\n * The value uses the canonical casing returned by [[getAvailableCRSUnits]].\r\n */\r\n unit: string;\r\n /** The geographic extent where the vertical coordinate reference system applies. */\r\n extent: Range2dProps;\r\n}\r\n\r\n/** Arguments supplied to [[getAvailableVerticalCoordinateReferenceSystems]].\r\n * @beta\r\n */\r\nexport interface GetAvailableVerticalCoordinateReferenceSystemsArgs {\r\n /** If provided, only return vertical coordinate reference systems applicable at this geographic point in degrees.\r\n * The x coordinate is longitude and the y coordinate is latitude.\r\n */\r\n point?: XAndY;\r\n /** If provided, only return vertical coordinate reference systems whose extent contains this extent. */\r\n extent?: Range2dProps;\r\n /** If true, include vertical coordinate reference systems whose extent intersects, but does not contain, [[extent]].\r\n * @default false\r\n */\r\n includeIntersecting?: boolean;\r\n /** If provided, filter vertical coordinate reference systems by unit name.\r\n * Matching is case-insensitive. Use [[getAvailableCRSUnits]] to get a list of canonical unit names.\r\n */\r\n unit?: string;\r\n}\r\n\r\n/** Get a list of Geographic Coordinate Reference Systems.\r\n * @param options Specifies the parameters to filter the returned list.\r\n * @returns The list of Geographic Coordinate Reference Systems, according to the supplied parameters.\r\n * @beta\r\n */\r\nexport async function getAvailableCoordinateReferenceSystems(\r\n args: GetAvailableCoordinateReferenceSystemsArgs\r\n): Promise<AvailableCoordinateReferenceSystemProps[]> {\r\n GeoCoordConfig.loadDefaultDatabases();\r\n return IModelNative.platform.GeoServices.getListOfCRS(\r\n args.extent,\r\n args.includeWorld,\r\n args.unit\r\n );\r\n}\r\n\r\n/** Get a list of Vertical Coordinate Reference Systems.\r\n * @param args Specifies the parameters used to filter the returned list. Point and extent filters are mutually exclusive.\r\n * @returns The list of Vertical Coordinate Reference Systems according to the supplied parameters.\r\n * @beta\r\n */\r\nexport function getAvailableVerticalCoordinateReferenceSystems(\r\n args: GetAvailableVerticalCoordinateReferenceSystemsArgs = {}\r\n): AvailableVerticalCoordinateReferenceSystemProps[] {\r\n GeoCoordConfig.loadDefaultDatabases();\r\n return IModelNative.platform.GeoServices.getListOfVerticalCRS(args);\r\n}\r\n\r\n/** Get a list of units used by horizontal and vertical coordinate reference systems in iTwin.js.\r\n * @returns An array of canonical unit names.\r\n * @beta\r\n */\r\nexport function getAvailableCRSUnits(): string[] {\r\n GeoCoordConfig.loadDefaultDatabases();\r\n return IModelNative.platform.GeoServices.getAvailableUnitNames();\r\n}\r\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** @packageDocumentation
|
|
2
2
|
* @module iModels
|
|
3
3
|
*/
|
|
4
|
-
import { Range2dProps } from "@itwin/core-geometry";
|
|
4
|
+
import { Range2dProps, XAndY } from "@itwin/core-geometry";
|
|
5
5
|
/** Describes a coordinate reference system produced by [[getAvailableCoordinateReferenceSystems]].
|
|
6
6
|
* @beta
|
|
7
7
|
*/
|
|
@@ -45,13 +45,61 @@ export interface GetAvailableCoordinateReferenceSystemsArgs {
|
|
|
45
45
|
*/
|
|
46
46
|
unit?: string;
|
|
47
47
|
}
|
|
48
|
+
/** Describes a vertical coordinate reference system produced by [[getAvailableVerticalCoordinateReferenceSystems]].
|
|
49
|
+
* @beta
|
|
50
|
+
*/
|
|
51
|
+
export interface AvailableVerticalCoordinateReferenceSystemProps {
|
|
52
|
+
/** Name in the Bentley Vertical Datum dictionary. */
|
|
53
|
+
crsName: string;
|
|
54
|
+
/** Backward-compatible approximation used by older readers. */
|
|
55
|
+
id: "GEOID" | "ELLIPSOID" | "NGVD29" | "NAVD88" | "LOCAL_ELLIPSOID";
|
|
56
|
+
/** EPSG code identifying the vertical coordinate reference system, when one is defined. */
|
|
57
|
+
epsg?: number;
|
|
58
|
+
/** Description of the vertical coordinate reference system. */
|
|
59
|
+
description: string;
|
|
60
|
+
/** Whether the vertical coordinate reference system is deprecated. */
|
|
61
|
+
deprecated: boolean;
|
|
62
|
+
/** The vertical coordinate reference system type. */
|
|
63
|
+
type: string;
|
|
64
|
+
/** The name of the linear unit used by the vertical coordinate reference system.
|
|
65
|
+
* The value uses the canonical casing returned by [[getAvailableCRSUnits]].
|
|
66
|
+
*/
|
|
67
|
+
unit: string;
|
|
68
|
+
/** The geographic extent where the vertical coordinate reference system applies. */
|
|
69
|
+
extent: Range2dProps;
|
|
70
|
+
}
|
|
71
|
+
/** Arguments supplied to [[getAvailableVerticalCoordinateReferenceSystems]].
|
|
72
|
+
* @beta
|
|
73
|
+
*/
|
|
74
|
+
export interface GetAvailableVerticalCoordinateReferenceSystemsArgs {
|
|
75
|
+
/** If provided, only return vertical coordinate reference systems applicable at this geographic point in degrees.
|
|
76
|
+
* The x coordinate is longitude and the y coordinate is latitude.
|
|
77
|
+
*/
|
|
78
|
+
point?: XAndY;
|
|
79
|
+
/** If provided, only return vertical coordinate reference systems whose extent contains this extent. */
|
|
80
|
+
extent?: Range2dProps;
|
|
81
|
+
/** If true, include vertical coordinate reference systems whose extent intersects, but does not contain, [[extent]].
|
|
82
|
+
* @default false
|
|
83
|
+
*/
|
|
84
|
+
includeIntersecting?: boolean;
|
|
85
|
+
/** If provided, filter vertical coordinate reference systems by unit name.
|
|
86
|
+
* Matching is case-insensitive. Use [[getAvailableCRSUnits]] to get a list of canonical unit names.
|
|
87
|
+
*/
|
|
88
|
+
unit?: string;
|
|
89
|
+
}
|
|
48
90
|
/** Get a list of Geographic Coordinate Reference Systems.
|
|
49
91
|
* @param options Specifies the parameters to filter the returned list.
|
|
50
92
|
* @returns The list of Geographic Coordinate Reference Systems, according to the supplied parameters.
|
|
51
93
|
* @beta
|
|
52
94
|
*/
|
|
53
95
|
export declare function getAvailableCoordinateReferenceSystems(args: GetAvailableCoordinateReferenceSystemsArgs): Promise<AvailableCoordinateReferenceSystemProps[]>;
|
|
54
|
-
/** Get a list of
|
|
96
|
+
/** Get a list of Vertical Coordinate Reference Systems.
|
|
97
|
+
* @param args Specifies the parameters used to filter the returned list. Point and extent filters are mutually exclusive.
|
|
98
|
+
* @returns The list of Vertical Coordinate Reference Systems according to the supplied parameters.
|
|
99
|
+
* @beta
|
|
100
|
+
*/
|
|
101
|
+
export declare function getAvailableVerticalCoordinateReferenceSystems(args?: GetAvailableVerticalCoordinateReferenceSystemsArgs): AvailableVerticalCoordinateReferenceSystemProps[];
|
|
102
|
+
/** Get a list of units used by horizontal and vertical coordinate reference systems in iTwin.js.
|
|
55
103
|
* @returns An array of canonical unit names.
|
|
56
104
|
* @beta
|
|
57
105
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeographicCRSServices.d.ts","sourceRoot":"","sources":["../../src/GeographicCRSServices.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"GeographicCRSServices.d.ts","sourceRoot":"","sources":["../../src/GeographicCRSServices.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAI3D;;GAEG;AACH,MAAM,WAAW,uCAAuC;IACtD,mJAAmJ;IACnJ,IAAI,EAAE,MAAM,CAAC;IACb,8JAA8J;IAC9J,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,SAAS,EAAE,YAAY,CAAC;IACxB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,0CAA0C;IACzD;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,+CAA+C;IAC9D,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,EAAE,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,iBAAiB,CAAC;IACpE,2FAA2F;IAC3F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,UAAU,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,kDAAkD;IACjE;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,wGAAwG;IACxG,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAsB,sCAAsC,CAC1D,IAAI,EAAE,0CAA0C,GAC/C,OAAO,CAAC,uCAAuC,EAAE,CAAC,CAOpD;AAED;;;;GAIG;AACH,wBAAgB,8CAA8C,CAC5D,IAAI,GAAE,kDAAuD,GAC5D,+CAA+C,EAAE,CAGnD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAG/C"}
|
|
@@ -16,7 +16,16 @@ export async function getAvailableCoordinateReferenceSystems(args) {
|
|
|
16
16
|
GeoCoordConfig.loadDefaultDatabases();
|
|
17
17
|
return IModelNative.platform.GeoServices.getListOfCRS(args.extent, args.includeWorld, args.unit);
|
|
18
18
|
}
|
|
19
|
-
/** Get a list of
|
|
19
|
+
/** Get a list of Vertical Coordinate Reference Systems.
|
|
20
|
+
* @param args Specifies the parameters used to filter the returned list. Point and extent filters are mutually exclusive.
|
|
21
|
+
* @returns The list of Vertical Coordinate Reference Systems according to the supplied parameters.
|
|
22
|
+
* @beta
|
|
23
|
+
*/
|
|
24
|
+
export function getAvailableVerticalCoordinateReferenceSystems(args = {}) {
|
|
25
|
+
GeoCoordConfig.loadDefaultDatabases();
|
|
26
|
+
return IModelNative.platform.GeoServices.getListOfVerticalCRS(args);
|
|
27
|
+
}
|
|
28
|
+
/** Get a list of units used by horizontal and vertical coordinate reference systems in iTwin.js.
|
|
20
29
|
* @returns An array of canonical unit names.
|
|
21
30
|
* @beta
|
|
22
31
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeographicCRSServices.js","sourceRoot":"","sources":["../../src/GeographicCRSServices.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"GeographicCRSServices.js","sourceRoot":"","sources":["../../src/GeographicCRSServices.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA2FlD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sCAAsC,CAC1D,IAAgD;IAEhD,cAAc,CAAC,oBAAoB,EAAE,CAAC;IACtC,OAAO,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CACnD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,IAAI,CACV,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8CAA8C,CAC5D,OAA2D,EAAE;IAE7D,cAAc,CAAC,oBAAoB,EAAE,CAAC;IACtC,OAAO,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,cAAc,CAAC,oBAAoB,EAAE,CAAC;IACtC,OAAO,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC;AACnE,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module iModels\r\n */\r\n\r\nimport { Range2dProps, XAndY } from \"@itwin/core-geometry\";\r\nimport { IModelNative } from \"./internal/NativePlatform\";\r\nimport { GeoCoordConfig } from \"./GeoCoordConfig\";\r\n\r\n/** Describes a coordinate reference system produced by [[getAvailableCoordinateReferenceSystems]].\r\n * @beta\r\n */\r\nexport interface AvailableCoordinateReferenceSystemProps {\r\n /** The name of the coordinate reference system. It can be presented to the user in the UI as an identifier for the coordinate reference system. */\r\n name: string;\r\n /** The description of the coordinate reference system. It can be presented to the user in the UI as extra information for the coordinate reference system. */\r\n description: string;\r\n /** Indicate if the coordinate reference system is deprecated. A coordinate reference system is deprecated if it is no longer recommended for use.\r\n * A deprecated coordinate reference system can usually be substituted by a more accurate one. It is possible that an existing project uses a deprecated coordinate reference system.\r\n * However, for new projects, it is recommended to use a non-deprecated coordinate reference system.\r\n */\r\n deprecated: boolean;\r\n /** Extent of the coordinate reference system. This is the area where the coordinate reference system can be used.\r\n * Outside of this area, the coordinate reference system may not be accurate. The extent is defined by a range of longitude and latitude values.\r\n * Minimum longitude and latitude correspond to crsExtent.low.x and crsExtent.low.y, respectively.\r\n * Maximum longitude and latitude correspond to crsExtent.high.x and crsExtent.high.y, respectively.\r\n */\r\n crsExtent: Range2dProps;\r\n /** The name of the linear unit used by the coordinate reference system.\r\n * When returned by [[getAvailableCoordinateReferenceSystems]], the value uses the canonical casing returned by [[getAvailableCRSUnits]].\r\n */\r\n unit?: string;\r\n}\r\n\r\n/** Arguments supplied to [[getAvailableCoordinateReferenceSystems]].\r\n * @beta\r\n */\r\nexport interface GetAvailableCoordinateReferenceSystemsArgs {\r\n /** If provided, only return coordinate reference systems that contain the given extent. Minimum longitude and latitude correspond to extent.low.x and extent.low.y, respectively.\r\n * Maximum longitude and latitude correspond to extent.high.x and extent.high.y, respectively.\r\n */\r\n extent?: Range2dProps;\r\n /** If true, returns additional coordinate reference systems with extents spanning the entire Earth's surface.\r\n * @default false\r\n */\r\n includeWorld?: boolean;\r\n /**\r\n * If provided, filter coordinate reference systems by unit name.\r\n * Matching is case-insensitive.\r\n * Use [[getAvailableCRSUnits]] to get a list of canonical unit names.\r\n */\r\n unit?: string;\r\n}\r\n\r\n/** Describes a vertical coordinate reference system produced by [[getAvailableVerticalCoordinateReferenceSystems]].\r\n * @beta\r\n */\r\nexport interface AvailableVerticalCoordinateReferenceSystemProps {\r\n /** Name in the Bentley Vertical Datum dictionary. */\r\n crsName: string;\r\n /** Backward-compatible approximation used by older readers. */\r\n id: \"GEOID\" | \"ELLIPSOID\" | \"NGVD29\" | \"NAVD88\" | \"LOCAL_ELLIPSOID\";\r\n /** EPSG code identifying the vertical coordinate reference system, when one is defined. */\r\n epsg?: number;\r\n /** Description of the vertical coordinate reference system. */\r\n description: string;\r\n /** Whether the vertical coordinate reference system is deprecated. */\r\n deprecated: boolean;\r\n /** The vertical coordinate reference system type. */\r\n type: string;\r\n /** The name of the linear unit used by the vertical coordinate reference system.\r\n * The value uses the canonical casing returned by [[getAvailableCRSUnits]].\r\n */\r\n unit: string;\r\n /** The geographic extent where the vertical coordinate reference system applies. */\r\n extent: Range2dProps;\r\n}\r\n\r\n/** Arguments supplied to [[getAvailableVerticalCoordinateReferenceSystems]].\r\n * @beta\r\n */\r\nexport interface GetAvailableVerticalCoordinateReferenceSystemsArgs {\r\n /** If provided, only return vertical coordinate reference systems applicable at this geographic point in degrees.\r\n * The x coordinate is longitude and the y coordinate is latitude.\r\n */\r\n point?: XAndY;\r\n /** If provided, only return vertical coordinate reference systems whose extent contains this extent. */\r\n extent?: Range2dProps;\r\n /** If true, include vertical coordinate reference systems whose extent intersects, but does not contain, [[extent]].\r\n * @default false\r\n */\r\n includeIntersecting?: boolean;\r\n /** If provided, filter vertical coordinate reference systems by unit name.\r\n * Matching is case-insensitive. Use [[getAvailableCRSUnits]] to get a list of canonical unit names.\r\n */\r\n unit?: string;\r\n}\r\n\r\n/** Get a list of Geographic Coordinate Reference Systems.\r\n * @param options Specifies the parameters to filter the returned list.\r\n * @returns The list of Geographic Coordinate Reference Systems, according to the supplied parameters.\r\n * @beta\r\n */\r\nexport async function getAvailableCoordinateReferenceSystems(\r\n args: GetAvailableCoordinateReferenceSystemsArgs\r\n): Promise<AvailableCoordinateReferenceSystemProps[]> {\r\n GeoCoordConfig.loadDefaultDatabases();\r\n return IModelNative.platform.GeoServices.getListOfCRS(\r\n args.extent,\r\n args.includeWorld,\r\n args.unit\r\n );\r\n}\r\n\r\n/** Get a list of Vertical Coordinate Reference Systems.\r\n * @param args Specifies the parameters used to filter the returned list. Point and extent filters are mutually exclusive.\r\n * @returns The list of Vertical Coordinate Reference Systems according to the supplied parameters.\r\n * @beta\r\n */\r\nexport function getAvailableVerticalCoordinateReferenceSystems(\r\n args: GetAvailableVerticalCoordinateReferenceSystemsArgs = {}\r\n): AvailableVerticalCoordinateReferenceSystemProps[] {\r\n GeoCoordConfig.loadDefaultDatabases();\r\n return IModelNative.platform.GeoServices.getListOfVerticalCRS(args);\r\n}\r\n\r\n/** Get a list of units used by horizontal and vertical coordinate reference systems in iTwin.js.\r\n * @returns An array of canonical unit names.\r\n * @beta\r\n */\r\nexport function getAvailableCRSUnits(): string[] {\r\n GeoCoordConfig.loadDefaultDatabases();\r\n return IModelNative.platform.GeoServices.getAvailableUnitNames();\r\n}\r\n"]}
|
|
@@ -188,7 +188,7 @@ describe("iModel geolocation", () => {
|
|
|
188
188
|
const expectedPt1 = Point3d.fromJSON(outputCoord.p);
|
|
189
189
|
const outPt1 = Point3d.fromJSON(response1.geoCoords[0].p);
|
|
190
190
|
expect(Geometry.isSamePoint3dXY(expectedPt1, outPt1, 0.001)).to.be.true;
|
|
191
|
-
expect(Math.abs(expectedPt1.z - outPt1.z), fileName).to.be.lessThan(0.
|
|
191
|
+
expect(Math.abs(expectedPt1.z - outPt1.z), fileName).to.be.lessThan(0.001);
|
|
192
192
|
// No point testing reversal when Out of useful range since reversibility is doubtful
|
|
193
193
|
if (outputCoord.s !== GeoCoordStatus.OutOfUsefulRange) {
|
|
194
194
|
const testPoint2 = [];
|
|
@@ -197,8 +197,8 @@ describe("iModel geolocation", () => {
|
|
|
197
197
|
const response2 = await iModel.getIModelCoordinatesFromGeoCoordinates(requestProps2);
|
|
198
198
|
const expectedPt2 = Point3d.fromJSON(inputCoord);
|
|
199
199
|
const outPt2 = Point3d.fromJSON(response2.iModelCoords[0].p);
|
|
200
|
-
expect(expectedPt2.distanceXY(outPt2)
|
|
201
|
-
expect(Math.abs(expectedPt2.z - outPt2.z)
|
|
200
|
+
expect(expectedPt2.distanceXY(outPt2), fileName).to.be.lessThan(0.001);
|
|
201
|
+
expect(Math.abs(expectedPt2.z - outPt2.z), fileName).to.be.lessThan(0.001);
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
204
|
iModel.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelGeolocation.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModelGeolocation.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { assert, expect } from \"chai\";\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport {\r\n EcefLocation, GeoCoordinatesRequestProps, GeoCoordStatus, GeographicCRS, GeographicCRSProps, IModelCoordinatesRequestProps, PointWithStatus,\r\n} from \"@itwin/core-common\";\r\nimport { Geometry, Point3d, XYZProps } from \"@itwin/core-geometry\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\nimport { SnapshotDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { TestUtils } from \"../TestUtils\";\r\nimport { closeIfOpen, openReadonlySeedCopy } from \"./IModelTestFixtures\";\r\n\r\n\r\ndescribe(\"iModel geolocation\", () => {\r\n let mirukuruReadonly: SnapshotDb;\r\n let originalEnv: any;\r\n\r\n before(async () => {\r\n originalEnv = { ...process.env };\r\n\r\n await TestUtils.shutdownBackend();\r\n await TestUtils.startBackend({ loadGcsWorkspaces: true });\r\n\r\n IModelTestUtils.registerTestBimSchema();\r\n\r\n mirukuruReadonly = await openReadonlySeedCopy(\"geolocation-mirukuru.ibim\", \"mirukuru.ibim\");\r\n });\r\n\r\n after(async () => {\r\n process.env = originalEnv;\r\n\r\n closeIfOpen(mirukuruReadonly);\r\n\r\n await TestUtils.shutdownBackend();\r\n await TestUtils.startBackend();\r\n });\r\n\r\n it(\"ecefLocation for iModels\", () => {\r\n assert.isTrue(mirukuruReadonly.isGeoLocated);\r\n const center = { x: 289095, y: 3803860, z: 10 }; // near center of project extents, 10 meters above ground.\r\n const ecefPt = mirukuruReadonly.spatialToEcef(center);\r\n const pt = { x: -3575156.3661052254, y: 3873432.0891543664, z: 3578996.012643183 };\r\n assert.isTrue(ecefPt.isAlmostEqual(pt), \"spatialToEcef\");\r\n\r\n const z2 = mirukuruReadonly.ecefToSpatial(ecefPt);\r\n assert.isTrue(z2.isAlmostEqual(center), \"ecefToSpatial\");\r\n\r\n const carto = mirukuruReadonly.spatialToCartographicFromEcef(center);\r\n assert.approximately(carto.longitudeDegrees, 132.70683882277805, .1); // this data is in Japan\r\n assert.approximately(carto.latitudeDegrees, 34.35462768786055, .1);\r\n const c2 = { longitude: 2.3161712773709127, latitude: 0.5996013664499733, height: 10 };\r\n assert.isTrue(carto.equalsEpsilon(c2, .001), \"spatialToCartographic\");\r\n\r\n mirukuruReadonly.cartographicToSpatialFromEcef(carto, z2);\r\n assert.isTrue(z2.isAlmostEqual(center, .001), \"cartographicToSpatial\");\r\n\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem !== undefined);\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.horizontalCRS !== undefined);\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.verticalCRS !== undefined);\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.verticalCRS!.id !== undefined);\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.horizontalCRS!.id === \"UTM84-53N\");\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.verticalCRS!.id === \"ELLIPSOID\");\r\n });\r\n\r\n it(\"should be able to create a snapshot IModel and set geolocation by GCS\", async () => {\r\n const args = {\r\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\r\n client: \"ABC Engineering\",\r\n globalOrigin: { x: 10, y: 10 },\r\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\r\n guid: Guid.createValue(),\r\n };\r\n\r\n const gcs = new GeographicCRS({\r\n horizontalCRS: {\r\n id: \"10TM115-27\",\r\n description: \"\",\r\n source: \"Mentor Software Client\",\r\n deprecated: false,\r\n datumId: \"NAD27\",\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"TransverseMercator\",\r\n centralMeridian: -115,\r\n latitudeOfOrigin: 0,\r\n scaleFactor: 0.9992,\r\n falseEasting: 0.0,\r\n falseNorthing: 0.0,\r\n },\r\n extent: {\r\n southWest: { latitude: 48, longitude: -120.5 },\r\n northEast: { latitude: 84, longitude: -109.5 },\r\n },\r\n },\r\n verticalCRS: { id: \"GEOID\" },\r\n additionalTransform: {\r\n helmert2DWithZOffset: {\r\n translationX: 10.0,\r\n translationY: 15.0,\r\n translationZ: 0.02,\r\n rotDeg: 1.2,\r\n scale: 1.0001,\r\n },\r\n },\r\n });\r\n\r\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot2.bim\");\r\n const iModel = SnapshotDb.createEmpty(testFile, args);\r\n\r\n let eventListenedTo = false;\r\n const gcsListener = (previousGCS: GeographicCRS | undefined) => {\r\n assert.equal(previousGCS, undefined);\r\n assert.isTrue(iModel.geographicCoordinateSystem !== undefined);\r\n assert.isTrue(iModel.geographicCoordinateSystem!.equals(gcs));\r\n eventListenedTo = true;\r\n };\r\n iModel.onGeographicCoordinateSystemChanged.addListener(gcsListener);\r\n\r\n assert.isTrue(iModel.geographicCoordinateSystem === undefined);\r\n\r\n assert.isFalse(eventListenedTo);\r\n\r\n iModel.geographicCoordinateSystem = gcs;\r\n\r\n assert.isTrue(eventListenedTo);\r\n\r\n withEditTxn(iModel, (txn) => {\r\n txn.updateIModelProps();\r\n });\r\n iModel.close();\r\n\r\n const iModel2 = SnapshotDb.openFile(testFile);\r\n\r\n assert.isTrue(iModel2.geographicCoordinateSystem !== undefined);\r\n\r\n // The reloaded gcs will be different as the datum definition will have been expanded\r\n assert.isFalse(iModel2.geographicCoordinateSystem!.equals(gcs));\r\n\r\n // But other properties will be identical\r\n assert.isTrue(iModel2.geographicCoordinateSystem !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.verticalCRS !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.verticalCRS!.equals(gcs.verticalCRS!));\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.additionalTransform !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.additionalTransform!.equals(gcs.additionalTransform!));\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.projection !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.projection!.equals(gcs.horizontalCRS!.projection!));\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.id !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.id === gcs.horizontalCRS!.id!);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.extent !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.extent!.equals(gcs.horizontalCRS!.extent!));\r\n\r\n // The following were not in initial definition but were completed after storage.\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum!.additionalTransformPaths !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum!.additionalTransformPaths!.length >= 0);\r\n\r\n // When a gcs is present then the ECEF is automatically defined.\r\n assert.isTrue(iModel2.ecefLocation !== undefined);\r\n\r\n iModel2.close();\r\n });\r\n\r\n describe(\"async coordinate conversions\", () => {\r\n it(\"should output same number of points as input\", async () => {\r\n const iModelCoords: Point3d[] = [];\r\n const geoCoords: Point3d[] = [];\r\n for (let numPts = 0; numPts < 3; numPts++) {\r\n const geoResponse = await mirukuruReadonly.getGeoCoordinatesFromIModelCoordinates({ target: \"WGS84\", iModelCoords });\r\n expect(geoResponse.geoCoords.length).to.equal(numPts);\r\n\r\n const iModelResponse = await mirukuruReadonly.getIModelCoordinatesFromGeoCoordinates({ source: \"WGS84\", geoCoords });\r\n expect(iModelResponse.iModelCoords.length).to.equal(numPts);\r\n\r\n iModelCoords.push(new Point3d());\r\n geoCoords.push(new Point3d());\r\n }\r\n });\r\n\r\n it(\"should always have fromCache = 0\", async () => {\r\n const iModelCoords: Point3d[] = [];\r\n const geoCoords: Point3d[] = [];\r\n for (let numPts = 0; numPts < 3; numPts++) {\r\n const geoResponse = await mirukuruReadonly.getGeoCoordinatesFromIModelCoordinates({ target: \"WGS84\", iModelCoords });\r\n expect(geoResponse.fromCache).to.equal(0);\r\n\r\n const iModelResponse = await mirukuruReadonly.getIModelCoordinatesFromGeoCoordinates({ source: \"WGS84\", geoCoords });\r\n expect(iModelResponse.iModelCoords.length).to.equal(numPts);\r\n expect(iModelResponse.fromCache).to.equal(0);\r\n\r\n iModelCoords.push(new Point3d());\r\n geoCoords.push(new Point3d());\r\n }\r\n });\r\n\r\n it(\"should be able to reproject with iModel coordinates to or from any other GeographicCRS\", async () => {\r\n const convertTest = async (fileName: string, fileGCS: GeographicCRSProps, datum: string | GeographicCRSProps, inputCoord: XYZProps, outputCoord: PointWithStatus) => {\r\n\r\n const args = {\r\n rootSubject: { name: \"TestSubject\", description: \"test project\" },\r\n client: \"ABC Engineering\",\r\n globalOrigin: { x: 0.0, y: 0.0 },\r\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\r\n guid: Guid.createValue(),\r\n };\r\n\r\n let datumOrGCS: string;\r\n if (typeof datum === \"object\")\r\n datumOrGCS = JSON.stringify(datum);\r\n else\r\n datumOrGCS = datum;\r\n\r\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", fileName);\r\n const iModel = SnapshotDb.createEmpty(testFile, args);\r\n\r\n withEditTxn(iModel, (txn) => {\r\n iModel.setGeographicCoordinateSystem(fileGCS);\r\n txn.updateIModelProps();\r\n });\r\n\r\n const testPoint1: XYZProps[] = [];\r\n testPoint1.push(inputCoord);\r\n const requestProps1: GeoCoordinatesRequestProps = { target: datumOrGCS, iModelCoords: testPoint1 };\r\n const response1 = await iModel.getGeoCoordinatesFromIModelCoordinates(requestProps1);\r\n\r\n expect(response1.geoCoords[0].s === outputCoord.s).to.be.true;\r\n\r\n // If success or warning we compare result\r\n if (outputCoord.s === GeoCoordStatus.Success || outputCoord.s === GeoCoordStatus.OutOfUsefulRange) {\r\n\r\n const expectedPt1 = Point3d.fromJSON(outputCoord.p);\r\n const outPt1 = Point3d.fromJSON(response1.geoCoords[0].p);\r\n\r\n expect(Geometry.isSamePoint3dXY(expectedPt1, outPt1, 0.001)).to.be.true;\r\n expect(Math.abs(expectedPt1.z - outPt1.z), fileName).to.be.lessThan(0.0001);\r\n\r\n // No point testing reversal when Out of useful range since reversibility is doubtful\r\n if (outputCoord.s !== GeoCoordStatus.OutOfUsefulRange) {\r\n const testPoint2: XYZProps[] = [];\r\n testPoint2.push(outputCoord.p);\r\n const requestProps2: IModelCoordinatesRequestProps = { source: datumOrGCS, geoCoords: testPoint2 };\r\n const response2 = await iModel.getIModelCoordinatesFromGeoCoordinates(requestProps2);\r\n\r\n const expectedPt2 = Point3d.fromJSON(inputCoord);\r\n const outPt2 = Point3d.fromJSON(response2.iModelCoords[0].p);\r\n\r\n expect(expectedPt2.distanceXY(outPt2) < 0.001).to.be.true;\r\n expect(Math.abs(expectedPt2.z - outPt2.z) < 0.001).to.be.true;\r\n }\r\n }\r\n\r\n iModel.close();\r\n };\r\n\r\n const EWRGCS: GeographicCRSProps = {\r\n horizontalCRS: {\r\n id: \"EPSG:27700\",\r\n description: \"OSGB 1936 / British National Grid\",\r\n source: \"EPSG V6 [Large and medium scale topographic mapping and engin]\",\r\n datumId: \"EPSG:6277\",\r\n datum: {\r\n id: \"EPSG:6277\",\r\n description: \"OSGB36 - Use OSGB-7P-2. Consider OSGB/OSTN15 instead\",\r\n deprecated: true,\r\n source: \"EPSG V6.12 operation EPSG:1314 [EPSG]\",\r\n ellipsoidId: \"EPSG:7001\",\r\n ellipsoid: {\r\n equatorialRadius: 6377563.396,\r\n polarRadius: 6356256.909237,\r\n id: \"EPSG:7001\",\r\n description: \"Airy 1830\",\r\n source: \"EPSG, Version 6 [EPSG]\",\r\n },\r\n transforms: [\r\n {\r\n method: \"PositionalVector\",\r\n sourceEllipsoid: {\r\n equatorialRadius: 6377563.396,\r\n polarRadius: 6356256.909237,\r\n id: \"EPSG:7001\",\r\n },\r\n targetEllipsoid: {\r\n equatorialRadius: 6378137,\r\n polarRadius: 6356752.3142,\r\n id: \"WGS84\",\r\n },\r\n positionalVector: {\r\n delta: {\r\n x: 446.448,\r\n y: -125.157,\r\n z: 542.06,\r\n },\r\n rotation: {\r\n x: 0.15,\r\n y: 0.247,\r\n z: 0.842,\r\n },\r\n scalePPM: -20.489,\r\n },\r\n }],\r\n },\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"TransverseMercator\",\r\n falseEasting: 400000,\r\n falseNorthing: -100000,\r\n centralMeridian: -2,\r\n latitudeOfOrigin: 49,\r\n scaleFactor: 0.999601272737422,\r\n },\r\n extent: {\r\n southWest: {\r\n latitude: 49.96,\r\n longitude: -7.56,\r\n },\r\n northEast: {\r\n latitude: 60.84,\r\n longitude: 1.78,\r\n },\r\n },\r\n },\r\n verticalCRS: {\r\n id: \"ELLIPSOID\",\r\n },\r\n additionalTransform: {\r\n helmert2DWithZOffset: {\r\n translationX: 284597.3343,\r\n translationY: 79859.4651,\r\n translationZ: 0,\r\n rotDeg: 0.5263624458992088,\r\n scale: 0.9996703340508721,\r\n },\r\n },\r\n };\r\n\r\n await convertTest(\"ExtonCampus1.bim\", { horizontalCRS: { id: \"EPSG:2272\" }, verticalCRS: { id: \"NAVD88\" } }, \"WGS84\", { x: 775970.3155166894, y: 83323.24543981979, z: 130.74977547686285 }, { p: { x: -75.68712011112366, y: 40.06524845273591, z: 95.9769083 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"UTM83-10-NGVD29-10.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NAVD88\" } }, { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 548296.472, y: 4179414.470, z: 0.8457 }, { p: { x: 548392.9689991799, y: 4179217.683834238, z: -0.000392204716569311 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"BritishNatGrid-EllipsoidHelmert1.bim\", EWRGCS, \"WGS84\", { x: 199247.08883859176, y: 150141.68625139236, z: 0.0 }, { p: { x: -0.80184489371471, y: 51.978341907041205, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"BritishNatGrid-Ellipsoid1.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2020119082059511, y: 49.959453295440234, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"BritishNatGrid-Ellipsoid2.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"ETRF89\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2030365061523707, y: 49.960007477936202, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"BritishNatGrid-Ellipsoid3.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"OSGB\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2020119082059511, y: 49.959453295440234, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"GermanyDHDN-3-Ellipsoid1.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.035413954488630, y: 50.575070810112159, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"GermanyDHDN-3-Ellipsoid2.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"DHDN/3\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.035413954488630, y: 50.575070810112159, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"GermanyDHDN-3-Ellipsoid3.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"WGS84\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.034215937440818, y: 50.573862480894853, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-1.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-2.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"NAD83\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-3.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"WGS84\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM27-10-Ellipsoid1.bim\", { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 623075.328, y: 4265650.532, z: 0.0 }, { p: { x: -121.58798236995744, y: 38.532616292207997, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM27-10-Ellipsoid2.bim\", { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"NAD83\", { x: 623075.328, y: 4265650.532, z: 0.0 }, { p: { x: -121.58905088839697, y: 38.532522753851708, z: 0.0 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"UTM83-10-NGVD29-4.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"LL84\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"UTM83-10-NGVD29-5.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"LL84\" }, verticalCRS: { id: \"GEOID\" } }, { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: 0.7621583779125531 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-6.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"NAVD88\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-7.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"GEOID\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-8.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-9.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { epsg: 26942 }, verticalCRS: { id: \"NAVD88\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-10.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NAVD88\" } }, { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 548296.472, y: 4179414.470, z: 0.8457 }, { p: { x: 548392.9689991799, y: 4179217.683834238, z: -0.000392204716569311 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"BritishNatGrid-Ellipsoid4.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"HS2_Snake_2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 237732.58101946692, y: 364048.01547843055, z: -47.874172425966336 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"BritishNatGrid-Ellipsoid5.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } },\r\n {\r\n horizontalCRS: {\r\n id: \"HS2-MOCK\",\r\n description: \"USES CUSTOM DATUM\",\r\n source: \"Test\",\r\n deprecated: false,\r\n datumId: \"HS2SD_2015\",\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"TransverseMercator\",\r\n centralMeridian: -1.5,\r\n latitudeOfOrigin: 52.30,\r\n scaleFactor: 1.0,\r\n falseEasting: 198873.0046,\r\n falseNorthing: 375064.3871,\r\n },\r\n },\r\n verticalCRS: {\r\n id: \"GEOID\",\r\n },\r\n }\r\n , { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 237732.58101952373, y: 364048.01548327296, z: -47.874172425966336 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"BritishNatGrid-Ellipsoid.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"UTM83-10-NGVD29-12.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } },\r\n {\r\n horizontalCRS: {\r\n id: \"California2\",\r\n description: \"USES CUSTOM DATUM\",\r\n source: \"Test\",\r\n deprecated: false,\r\n datumId: \"NAD83\",\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"LambertConformalConicTwoParallels\",\r\n longitudeOfOrigin: -122,\r\n latitudeOfOrigin: 37.66666666667,\r\n standardParallel1: 39.833333333333336,\r\n standardParallel2: 38.333333333333336,\r\n falseEasting: 2000000.0,\r\n falseNorthing: 500000.0,\r\n },\r\n extent: {\r\n southWest: {\r\n latitude: 35,\r\n longitude: -125,\r\n },\r\n northEast: {\r\n latitude: 39.1,\r\n longitude: -120.45,\r\n },\r\n },\r\n },\r\n verticalCRS: {\r\n id: \"GEOID\",\r\n },\r\n }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\r\n\r\n // Do some test that return errors\r\n // First test uses one GCS in Eastern USA and the other in UK. This will produce a hard domain error\r\n await convertTest(\"Error1.bim\", { horizontalCRS: { id: \"UTM84-17N\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.OutOfMathematicalDomain });\r\n\r\n // This test performs conversion in a region outside normal use of GCS but still mathematically valid (soft domain error)\r\n await convertTest(\"Error2.bim\", { horizontalCRS: { id: \"DanishS34-S99\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: -6618.5925260757449, y: 36058.097489683532, z: 0.0 }, { p: { x: 13.53250346041385, y: 54.71216475341563, z: 0.0 }, s: GeoCoordStatus.OutOfUsefulRange });\r\n // -6618.5925260757449, 36058.097489683532\r\n // { x: -221748.034, y: -10012.784, z: 0.0 } { p: { x: 10.36481105, y: 54.38462506, z: 0.0 }\r\n // This test makes use of a GCS using a grid file that does not even exist and will return a datum conversion error.\r\n const userGCSWithinexistentGridFile: GeographicCRSProps = {\r\n horizontalCRS: {\r\n id: \"User1\",\r\n datumId: \"UserDatum1\",\r\n datum: {\r\n id: \"UserDatum1\",\r\n ellipsoidId: \"CLRK66\",\r\n transforms: [\r\n {\r\n method: \"GridFiles\",\r\n sourceEllipsoid: {\r\n id: \"CLRK66\",\r\n equatorialRadius: 6378160.0,\r\n polarRadius: 6356774.719195306,\r\n },\r\n targetEllipsoid: {\r\n id: \"WGS84\",\r\n equatorialRadius: 6378160.0,\r\n polarRadius: 6356774.719195306,\r\n },\r\n gridFile: {\r\n files: [\r\n { fileName: \"./user/inexistent.gdc\", format: \"NTv2\", direction: \"Direct\" },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"TransverseMercator\",\r\n centralMeridian: -115,\r\n latitudeOfOrigin: 0,\r\n scaleFactor: 0.9992,\r\n falseEasting: 1.0,\r\n falseNorthing: 2.0,\r\n },\r\n extent: {\r\n southWest: { latitude: 48, longitude: -120.5 },\r\n northEast: { latitude: 84, longitude: -109.5 },\r\n },\r\n }, verticalCRS: { id: \"ELLIPSOID\" },\r\n };\r\n\r\n await convertTest(\"Error3.bim\", userGCSWithinexistentGridFile, \"WGS84\", { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoDatumConverter });\r\n\r\n // The model GCS is not valid\r\n await convertTest(\"Error4.bim\", { horizontalCRS: { id: \"badfood\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoGCSDefined });\r\n\r\n // The given GCS is not valid\r\n await convertTest(\"Error5.bim\", { horizontalCRS: { id: \"UTM84-17N\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"badfood\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoGCSDefined });\r\n\r\n });\r\n });\r\n\r\n it(\"should be able to create a snapshot IModel and set geolocation by ECEF\", async () => {\r\n const args = {\r\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\r\n client: \"ABC Engineering\",\r\n globalOrigin: { x: 10, y: 10 },\r\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\r\n guid: Guid.createValue(),\r\n };\r\n\r\n const ecef = new EcefLocation({\r\n origin: [42, 21, 0],\r\n orientation: { yaw: 1, pitch: 1, roll: -1 },\r\n });\r\n\r\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot3.bim\");\r\n const iModel = SnapshotDb.createEmpty(testFile, args);\r\n\r\n assert.isTrue(iModel.ecefLocation === undefined);\r\n\r\n iModel.ecefLocation = ecef;\r\n\r\n withEditTxn(iModel, (txn) => {\r\n txn.updateIModelProps();\r\n });\r\n iModel.close();\r\n\r\n const iModel2 = SnapshotDb.openFile(testFile);\r\n\r\n assert.isTrue(iModel2.ecefLocation !== undefined);\r\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\r\n\r\n iModel2.close();\r\n });\r\n\r\n it(\"should be able to create a snapshot IModel and set geolocation by ECEF with 0,0,0 rotation\", async () => {\r\n const args = {\r\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\r\n client: \"ABC Engineering\",\r\n globalOrigin: { x: 10, y: 10 },\r\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\r\n guid: Guid.createValue(),\r\n };\r\n\r\n const ecef = new EcefLocation({\r\n origin: [42, 21, 0],\r\n orientation: { yaw: 0, pitch: 0, roll: 0 },\r\n });\r\n\r\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot3_000.bim\");\r\n const iModel = SnapshotDb.createEmpty(testFile, args);\r\n\r\n assert.isTrue(iModel.ecefLocation === undefined);\r\n\r\n iModel.ecefLocation = ecef;\r\n\r\n withEditTxn(iModel, (txn) => {\r\n txn.updateIModelProps();\r\n });\r\n iModel.close();\r\n\r\n const iModel2 = SnapshotDb.openFile(testFile);\r\n\r\n assert.isTrue(iModel2.ecefLocation !== undefined);\r\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\r\n\r\n iModel2.close();\r\n });\r\n\r\n it(\"presence of a GCS imposes the ecef value\", async () => {\r\n const args = {\r\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\r\n client: \"ABC Engineering\",\r\n globalOrigin: { x: 10, y: 10 },\r\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\r\n guid: Guid.createValue(),\r\n };\r\n\r\n const gcs = new GeographicCRS({\r\n horizontalCRS: {\r\n id: \"10TM115-27\",\r\n description: \"\",\r\n source: \"Mentor Software Client\",\r\n deprecated: false,\r\n datumId: \"NAD27\",\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"TransverseMercator\",\r\n centralMeridian: -115,\r\n latitudeOfOrigin: 0,\r\n scaleFactor: 0.9992,\r\n falseEasting: 0.0,\r\n falseNorthing: 0.0,\r\n },\r\n extent: {\r\n southWest: { latitude: 48, longitude: -120.5 },\r\n northEast: { latitude: 84, longitude: -109.5 },\r\n },\r\n },\r\n verticalCRS: { id: \"GEOID\" },\r\n additionalTransform: {\r\n helmert2DWithZOffset: {\r\n translationX: 10.0,\r\n translationY: 15.0,\r\n translationZ: 0.02,\r\n rotDeg: 1.2,\r\n scale: 1.0001,\r\n },\r\n },\r\n });\r\n\r\n const ecef = new EcefLocation({\r\n origin: [42, 21, 0],\r\n orientation: { yaw: 1, pitch: 1, roll: -1 },\r\n });\r\n\r\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot4.bim\");\r\n\r\n const iModel = SnapshotDb.createEmpty(testFile, args);\r\n\r\n iModel.ecefLocation = ecef;\r\n\r\n withEditTxn(iModel, (txn) => {\r\n txn.updateIModelProps();\r\n });\r\n iModel.close();\r\n\r\n const iModel2 = SnapshotDb.openForApplyChangesets(testFile);\r\n\r\n assert.isTrue(iModel2.ecefLocation !== undefined);\r\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\r\n\r\n assert.isTrue(iModel2.geographicCoordinateSystem === undefined);\r\n\r\n iModel2.geographicCoordinateSystem = gcs;\r\n\r\n withEditTxn(iModel2, (txn) => {\r\n txn.updateIModelProps();\r\n });\r\n iModel2.close();\r\n\r\n const iModel3 = SnapshotDb.openFile(testFile);\r\n\r\n assert.isTrue(iModel3.geographicCoordinateSystem !== undefined);\r\n\r\n // When a gcs is present then ecef value is imposed by the gcs disregarding previous value.\r\n assert.isTrue(iModel3.ecefLocation !== undefined);\r\n assert.isFalse(iModel3.ecefLocation!.isAlmostEqual(ecef));\r\n\r\n iModel3.close();\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"IModelGeolocation.test.js","sourceRoot":"","sources":["../../../../src/test/imodel/IModelGeolocation.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { assert, expect } from \"chai\";\r\nimport { Guid } from \"@itwin/core-bentley\";\r\nimport {\r\n EcefLocation, GeoCoordinatesRequestProps, GeoCoordStatus, GeographicCRS, GeographicCRSProps, IModelCoordinatesRequestProps, PointWithStatus,\r\n} from \"@itwin/core-common\";\r\nimport { Geometry, Point3d, XYZProps } from \"@itwin/core-geometry\";\r\nimport { withEditTxn } from \"../../EditTxn\";\r\nimport { SnapshotDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { TestUtils } from \"../TestUtils\";\r\nimport { closeIfOpen, openReadonlySeedCopy } from \"./IModelTestFixtures\";\r\n\r\n\r\ndescribe(\"iModel geolocation\", () => {\r\n let mirukuruReadonly: SnapshotDb;\r\n let originalEnv: any;\r\n\r\n before(async () => {\r\n originalEnv = { ...process.env };\r\n\r\n await TestUtils.shutdownBackend();\r\n await TestUtils.startBackend({ loadGcsWorkspaces: true });\r\n\r\n IModelTestUtils.registerTestBimSchema();\r\n\r\n mirukuruReadonly = await openReadonlySeedCopy(\"geolocation-mirukuru.ibim\", \"mirukuru.ibim\");\r\n });\r\n\r\n after(async () => {\r\n process.env = originalEnv;\r\n\r\n closeIfOpen(mirukuruReadonly);\r\n\r\n await TestUtils.shutdownBackend();\r\n await TestUtils.startBackend();\r\n });\r\n\r\n it(\"ecefLocation for iModels\", () => {\r\n assert.isTrue(mirukuruReadonly.isGeoLocated);\r\n const center = { x: 289095, y: 3803860, z: 10 }; // near center of project extents, 10 meters above ground.\r\n const ecefPt = mirukuruReadonly.spatialToEcef(center);\r\n const pt = { x: -3575156.3661052254, y: 3873432.0891543664, z: 3578996.012643183 };\r\n assert.isTrue(ecefPt.isAlmostEqual(pt), \"spatialToEcef\");\r\n\r\n const z2 = mirukuruReadonly.ecefToSpatial(ecefPt);\r\n assert.isTrue(z2.isAlmostEqual(center), \"ecefToSpatial\");\r\n\r\n const carto = mirukuruReadonly.spatialToCartographicFromEcef(center);\r\n assert.approximately(carto.longitudeDegrees, 132.70683882277805, .1); // this data is in Japan\r\n assert.approximately(carto.latitudeDegrees, 34.35462768786055, .1);\r\n const c2 = { longitude: 2.3161712773709127, latitude: 0.5996013664499733, height: 10 };\r\n assert.isTrue(carto.equalsEpsilon(c2, .001), \"spatialToCartographic\");\r\n\r\n mirukuruReadonly.cartographicToSpatialFromEcef(carto, z2);\r\n assert.isTrue(z2.isAlmostEqual(center, .001), \"cartographicToSpatial\");\r\n\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem !== undefined);\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.horizontalCRS !== undefined);\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.verticalCRS !== undefined);\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.verticalCRS!.id !== undefined);\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.horizontalCRS!.id === \"UTM84-53N\");\r\n assert.isTrue(mirukuruReadonly.geographicCoordinateSystem!.verticalCRS!.id === \"ELLIPSOID\");\r\n });\r\n\r\n it(\"should be able to create a snapshot IModel and set geolocation by GCS\", async () => {\r\n const args = {\r\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\r\n client: \"ABC Engineering\",\r\n globalOrigin: { x: 10, y: 10 },\r\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\r\n guid: Guid.createValue(),\r\n };\r\n\r\n const gcs = new GeographicCRS({\r\n horizontalCRS: {\r\n id: \"10TM115-27\",\r\n description: \"\",\r\n source: \"Mentor Software Client\",\r\n deprecated: false,\r\n datumId: \"NAD27\",\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"TransverseMercator\",\r\n centralMeridian: -115,\r\n latitudeOfOrigin: 0,\r\n scaleFactor: 0.9992,\r\n falseEasting: 0.0,\r\n falseNorthing: 0.0,\r\n },\r\n extent: {\r\n southWest: { latitude: 48, longitude: -120.5 },\r\n northEast: { latitude: 84, longitude: -109.5 },\r\n },\r\n },\r\n verticalCRS: { id: \"GEOID\" },\r\n additionalTransform: {\r\n helmert2DWithZOffset: {\r\n translationX: 10.0,\r\n translationY: 15.0,\r\n translationZ: 0.02,\r\n rotDeg: 1.2,\r\n scale: 1.0001,\r\n },\r\n },\r\n });\r\n\r\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot2.bim\");\r\n const iModel = SnapshotDb.createEmpty(testFile, args);\r\n\r\n let eventListenedTo = false;\r\n const gcsListener = (previousGCS: GeographicCRS | undefined) => {\r\n assert.equal(previousGCS, undefined);\r\n assert.isTrue(iModel.geographicCoordinateSystem !== undefined);\r\n assert.isTrue(iModel.geographicCoordinateSystem!.equals(gcs));\r\n eventListenedTo = true;\r\n };\r\n iModel.onGeographicCoordinateSystemChanged.addListener(gcsListener);\r\n\r\n assert.isTrue(iModel.geographicCoordinateSystem === undefined);\r\n\r\n assert.isFalse(eventListenedTo);\r\n\r\n iModel.geographicCoordinateSystem = gcs;\r\n\r\n assert.isTrue(eventListenedTo);\r\n\r\n withEditTxn(iModel, (txn) => {\r\n txn.updateIModelProps();\r\n });\r\n iModel.close();\r\n\r\n const iModel2 = SnapshotDb.openFile(testFile);\r\n\r\n assert.isTrue(iModel2.geographicCoordinateSystem !== undefined);\r\n\r\n // The reloaded gcs will be different as the datum definition will have been expanded\r\n assert.isFalse(iModel2.geographicCoordinateSystem!.equals(gcs));\r\n\r\n // But other properties will be identical\r\n assert.isTrue(iModel2.geographicCoordinateSystem !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.verticalCRS !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.verticalCRS!.equals(gcs.verticalCRS!));\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.additionalTransform !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.additionalTransform!.equals(gcs.additionalTransform!));\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.projection !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.projection!.equals(gcs.horizontalCRS!.projection!));\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.id !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.id === gcs.horizontalCRS!.id!);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.extent !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.extent!.equals(gcs.horizontalCRS!.extent!));\r\n\r\n // The following were not in initial definition but were completed after storage.\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum!.additionalTransformPaths !== undefined);\r\n assert.isTrue(iModel2.geographicCoordinateSystem!.horizontalCRS!.datum!.additionalTransformPaths!.length >= 0);\r\n\r\n // When a gcs is present then the ECEF is automatically defined.\r\n assert.isTrue(iModel2.ecefLocation !== undefined);\r\n\r\n iModel2.close();\r\n });\r\n\r\n describe(\"async coordinate conversions\", () => {\r\n it(\"should output same number of points as input\", async () => {\r\n const iModelCoords: Point3d[] = [];\r\n const geoCoords: Point3d[] = [];\r\n for (let numPts = 0; numPts < 3; numPts++) {\r\n const geoResponse = await mirukuruReadonly.getGeoCoordinatesFromIModelCoordinates({ target: \"WGS84\", iModelCoords });\r\n expect(geoResponse.geoCoords.length).to.equal(numPts);\r\n\r\n const iModelResponse = await mirukuruReadonly.getIModelCoordinatesFromGeoCoordinates({ source: \"WGS84\", geoCoords });\r\n expect(iModelResponse.iModelCoords.length).to.equal(numPts);\r\n\r\n iModelCoords.push(new Point3d());\r\n geoCoords.push(new Point3d());\r\n }\r\n });\r\n\r\n it(\"should always have fromCache = 0\", async () => {\r\n const iModelCoords: Point3d[] = [];\r\n const geoCoords: Point3d[] = [];\r\n for (let numPts = 0; numPts < 3; numPts++) {\r\n const geoResponse = await mirukuruReadonly.getGeoCoordinatesFromIModelCoordinates({ target: \"WGS84\", iModelCoords });\r\n expect(geoResponse.fromCache).to.equal(0);\r\n\r\n const iModelResponse = await mirukuruReadonly.getIModelCoordinatesFromGeoCoordinates({ source: \"WGS84\", geoCoords });\r\n expect(iModelResponse.iModelCoords.length).to.equal(numPts);\r\n expect(iModelResponse.fromCache).to.equal(0);\r\n\r\n iModelCoords.push(new Point3d());\r\n geoCoords.push(new Point3d());\r\n }\r\n });\r\n\r\n it(\"should be able to reproject with iModel coordinates to or from any other GeographicCRS\", async () => {\r\n const convertTest = async (fileName: string, fileGCS: GeographicCRSProps, datum: string | GeographicCRSProps, inputCoord: XYZProps, outputCoord: PointWithStatus) => {\r\n\r\n const args = {\r\n rootSubject: { name: \"TestSubject\", description: \"test project\" },\r\n client: \"ABC Engineering\",\r\n globalOrigin: { x: 0.0, y: 0.0 },\r\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\r\n guid: Guid.createValue(),\r\n };\r\n\r\n let datumOrGCS: string;\r\n if (typeof datum === \"object\")\r\n datumOrGCS = JSON.stringify(datum);\r\n else\r\n datumOrGCS = datum;\r\n\r\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", fileName);\r\n const iModel = SnapshotDb.createEmpty(testFile, args);\r\n\r\n withEditTxn(iModel, (txn) => {\r\n iModel.setGeographicCoordinateSystem(fileGCS);\r\n txn.updateIModelProps();\r\n });\r\n\r\n const testPoint1: XYZProps[] = [];\r\n testPoint1.push(inputCoord);\r\n const requestProps1: GeoCoordinatesRequestProps = { target: datumOrGCS, iModelCoords: testPoint1 };\r\n const response1 = await iModel.getGeoCoordinatesFromIModelCoordinates(requestProps1);\r\n\r\n expect(response1.geoCoords[0].s === outputCoord.s).to.be.true;\r\n\r\n // If success or warning we compare result\r\n if (outputCoord.s === GeoCoordStatus.Success || outputCoord.s === GeoCoordStatus.OutOfUsefulRange) {\r\n\r\n const expectedPt1 = Point3d.fromJSON(outputCoord.p);\r\n const outPt1 = Point3d.fromJSON(response1.geoCoords[0].p);\r\n\r\n expect(Geometry.isSamePoint3dXY(expectedPt1, outPt1, 0.001)).to.be.true;\r\n expect(Math.abs(expectedPt1.z - outPt1.z), fileName).to.be.lessThan(0.001);\r\n\r\n // No point testing reversal when Out of useful range since reversibility is doubtful\r\n if (outputCoord.s !== GeoCoordStatus.OutOfUsefulRange) {\r\n const testPoint2: XYZProps[] = [];\r\n testPoint2.push(outputCoord.p);\r\n const requestProps2: IModelCoordinatesRequestProps = { source: datumOrGCS, geoCoords: testPoint2 };\r\n const response2 = await iModel.getIModelCoordinatesFromGeoCoordinates(requestProps2);\r\n\r\n const expectedPt2 = Point3d.fromJSON(inputCoord);\r\n const outPt2 = Point3d.fromJSON(response2.iModelCoords[0].p);\r\n\r\n expect(expectedPt2.distanceXY(outPt2), fileName).to.be.lessThan(0.001);\r\n expect(Math.abs(expectedPt2.z - outPt2.z), fileName).to.be.lessThan(0.001);\r\n }\r\n }\r\n\r\n iModel.close();\r\n };\r\n\r\n const EWRGCS: GeographicCRSProps = {\r\n horizontalCRS: {\r\n id: \"EPSG:27700\",\r\n description: \"OSGB 1936 / British National Grid\",\r\n source: \"EPSG V6 [Large and medium scale topographic mapping and engin]\",\r\n datumId: \"EPSG:6277\",\r\n datum: {\r\n id: \"EPSG:6277\",\r\n description: \"OSGB36 - Use OSGB-7P-2. Consider OSGB/OSTN15 instead\",\r\n deprecated: true,\r\n source: \"EPSG V6.12 operation EPSG:1314 [EPSG]\",\r\n ellipsoidId: \"EPSG:7001\",\r\n ellipsoid: {\r\n equatorialRadius: 6377563.396,\r\n polarRadius: 6356256.909237,\r\n id: \"EPSG:7001\",\r\n description: \"Airy 1830\",\r\n source: \"EPSG, Version 6 [EPSG]\",\r\n },\r\n transforms: [\r\n {\r\n method: \"PositionalVector\",\r\n sourceEllipsoid: {\r\n equatorialRadius: 6377563.396,\r\n polarRadius: 6356256.909237,\r\n id: \"EPSG:7001\",\r\n },\r\n targetEllipsoid: {\r\n equatorialRadius: 6378137,\r\n polarRadius: 6356752.3142,\r\n id: \"WGS84\",\r\n },\r\n positionalVector: {\r\n delta: {\r\n x: 446.448,\r\n y: -125.157,\r\n z: 542.06,\r\n },\r\n rotation: {\r\n x: 0.15,\r\n y: 0.247,\r\n z: 0.842,\r\n },\r\n scalePPM: -20.489,\r\n },\r\n }],\r\n },\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"TransverseMercator\",\r\n falseEasting: 400000,\r\n falseNorthing: -100000,\r\n centralMeridian: -2,\r\n latitudeOfOrigin: 49,\r\n scaleFactor: 0.999601272737422,\r\n },\r\n extent: {\r\n southWest: {\r\n latitude: 49.96,\r\n longitude: -7.56,\r\n },\r\n northEast: {\r\n latitude: 60.84,\r\n longitude: 1.78,\r\n },\r\n },\r\n },\r\n verticalCRS: {\r\n id: \"ELLIPSOID\",\r\n },\r\n additionalTransform: {\r\n helmert2DWithZOffset: {\r\n translationX: 284597.3343,\r\n translationY: 79859.4651,\r\n translationZ: 0,\r\n rotDeg: 0.5263624458992088,\r\n scale: 0.9996703340508721,\r\n },\r\n },\r\n };\r\n\r\n await convertTest(\"ExtonCampus1.bim\", { horizontalCRS: { id: \"EPSG:2272\" }, verticalCRS: { id: \"NAVD88\" } }, \"WGS84\", { x: 775970.3155166894, y: 83323.24543981979, z: 130.74977547686285 }, { p: { x: -75.68712011112366, y: 40.06524845273591, z: 95.9769083 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"UTM83-10-NGVD29-10.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NAVD88\" } }, { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 548296.472, y: 4179414.470, z: 0.8457 }, { p: { x: 548392.9689991799, y: 4179217.683834238, z: -0.000392204716569311 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"BritishNatGrid-EllipsoidHelmert1.bim\", EWRGCS, \"WGS84\", { x: 199247.08883859176, y: 150141.68625139236, z: 0.0 }, { p: { x: -0.80184489371471, y: 51.978341907041205, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"BritishNatGrid-Ellipsoid1.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2020119082059511, y: 49.959453295440234, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"BritishNatGrid-Ellipsoid2.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"ETRF89\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2030365061523707, y: 49.960007477936202, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"BritishNatGrid-Ellipsoid3.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"OSGB\", { x: 170370.718, y: 11572.405, z: 0.0 }, { p: { x: -5.2020119082059511, y: 49.959453295440234, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"GermanyDHDN-3-Ellipsoid1.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.035413954488630, y: 50.575070810112159, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"GermanyDHDN-3-Ellipsoid2.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"DHDN/3\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.035413954488630, y: 50.575070810112159, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"GermanyDHDN-3-Ellipsoid3.bim\", { horizontalCRS: { id: \"DHDN/3.GK3d-4/EN\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"WGS84\", { x: 4360857.005, y: 5606083.067, z: 0.0 }, { p: { x: 10.034215937440818, y: 50.573862480894853, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-1.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-2.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"NAD83\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-3.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, \"WGS84\", { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM27-10-Ellipsoid1.bim\", { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: 623075.328, y: 4265650.532, z: 0.0 }, { p: { x: -121.58798236995744, y: 38.532616292207997, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM27-10-Ellipsoid2.bim\", { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"NAD83\", { x: 623075.328, y: 4265650.532, z: 0.0 }, { p: { x: -121.58905088839697, y: 38.532522753851708, z: 0.0 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"UTM83-10-NGVD29-4.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"LL84\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: -30.12668428839329 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"UTM83-10-NGVD29-5.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"LL84\" }, verticalCRS: { id: \"GEOID\" } }, { x: 632748.112, y: 4263868.307, z: 0.0 }, { p: { x: -121.47738265889652, y: 38.513305313793019, z: 0.7621583779125531 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-6.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"NAVD88\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-7.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"GEOID\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-8.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { id: \"CA83-II\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.0 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-9.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } }, { horizontalCRS: { epsg: 26942 }, verticalCRS: { id: \"NAVD88\" } }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\r\n await convertTest(\"UTM83-10-NGVD29-10.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NAVD88\" } }, { horizontalCRS: { id: \"UTM27-10\" }, verticalCRS: { id: \"NGVD29\" } }, { x: 548296.472, y: 4179414.470, z: 0.8457 }, { p: { x: 548392.9689991799, y: 4179217.683834238, z: -0.000392204716569311 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"BritishNatGrid-Ellipsoid4.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"HS2_Snake_2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 237732.58101946692, y: 364048.01547843055, z: -47.874172425966336 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"BritishNatGrid-Ellipsoid5.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } },\r\n {\r\n horizontalCRS: {\r\n id: \"HS2-MOCK\",\r\n description: \"USES CUSTOM DATUM\",\r\n source: \"Test\",\r\n deprecated: false,\r\n datumId: \"HS2SD_2015\",\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"TransverseMercator\",\r\n centralMeridian: -1.5,\r\n latitudeOfOrigin: 52.30,\r\n scaleFactor: 1.0,\r\n falseEasting: 198873.0046,\r\n falseNorthing: 375064.3871,\r\n },\r\n },\r\n verticalCRS: {\r\n id: \"GEOID\",\r\n },\r\n }\r\n , { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 237732.58101952373, y: 364048.01548327296, z: -47.874172425966336 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"BritishNatGrid-Ellipsoid.bim\", { horizontalCRS: { id: \"BritishNatGrid\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 473327.251, y: 257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.Success });\r\n\r\n await convertTest(\"UTM83-10-NGVD29-12.bim\", { horizontalCRS: { id: \"UTM83-10\" }, verticalCRS: { id: \"NGVD29\" } },\r\n {\r\n horizontalCRS: {\r\n id: \"California2\",\r\n description: \"USES CUSTOM DATUM\",\r\n source: \"Test\",\r\n deprecated: false,\r\n datumId: \"NAD83\",\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"LambertConformalConicTwoParallels\",\r\n longitudeOfOrigin: -122,\r\n latitudeOfOrigin: 37.66666666667,\r\n standardParallel1: 39.833333333333336,\r\n standardParallel2: 38.333333333333336,\r\n falseEasting: 2000000.0,\r\n falseNorthing: 500000.0,\r\n },\r\n extent: {\r\n southWest: {\r\n latitude: 35,\r\n longitude: -125,\r\n },\r\n northEast: {\r\n latitude: 39.1,\r\n longitude: -120.45,\r\n },\r\n },\r\n },\r\n verticalCRS: {\r\n id: \"GEOID\",\r\n },\r\n }, { x: 569024.940, y: 4386341.752, z: 0.0 }, { p: { x: 1983192.529823256, y: 717304.0311293667, z: 0.745910484422781 }, s: GeoCoordStatus.Success });\r\n\r\n // Do some test that return errors\r\n // First test uses one GCS in Eastern USA and the other in UK. This will produce a hard domain error\r\n await convertTest(\"Error1.bim\", { horizontalCRS: { id: \"UTM84-17N\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.OutOfMathematicalDomain });\r\n\r\n // This test performs conversion in a region outside normal use of GCS but still mathematically valid (soft domain error)\r\n await convertTest(\"Error2.bim\", { horizontalCRS: { id: \"DanishS34-S99\" }, verticalCRS: { id: \"ELLIPSOID\" } }, \"\", { x: -6618.5925260757449, y: 36058.097489683532, z: 0.0 }, { p: { x: 13.53250346041385, y: 54.71216475341563, z: 0.0 }, s: GeoCoordStatus.OutOfUsefulRange });\r\n // -6618.5925260757449, 36058.097489683532\r\n // { x: -221748.034, y: -10012.784, z: 0.0 } { p: { x: 10.36481105, y: 54.38462506, z: 0.0 }\r\n // This test makes use of a GCS using a grid file that does not even exist and will return a datum conversion error.\r\n const userGCSWithinexistentGridFile: GeographicCRSProps = {\r\n horizontalCRS: {\r\n id: \"User1\",\r\n datumId: \"UserDatum1\",\r\n datum: {\r\n id: \"UserDatum1\",\r\n ellipsoidId: \"CLRK66\",\r\n transforms: [\r\n {\r\n method: \"GridFiles\",\r\n sourceEllipsoid: {\r\n id: \"CLRK66\",\r\n equatorialRadius: 6378160.0,\r\n polarRadius: 6356774.719195306,\r\n },\r\n targetEllipsoid: {\r\n id: \"WGS84\",\r\n equatorialRadius: 6378160.0,\r\n polarRadius: 6356774.719195306,\r\n },\r\n gridFile: {\r\n files: [\r\n { fileName: \"./user/inexistent.gdc\", format: \"NTv2\", direction: \"Direct\" },\r\n ],\r\n },\r\n },\r\n ],\r\n },\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"TransverseMercator\",\r\n centralMeridian: -115,\r\n latitudeOfOrigin: 0,\r\n scaleFactor: 0.9992,\r\n falseEasting: 1.0,\r\n falseNorthing: 2.0,\r\n },\r\n extent: {\r\n southWest: { latitude: 48, longitude: -120.5 },\r\n northEast: { latitude: 84, longitude: -109.5 },\r\n },\r\n }, verticalCRS: { id: \"ELLIPSOID\" },\r\n };\r\n\r\n await convertTest(\"Error3.bim\", userGCSWithinexistentGridFile, \"WGS84\", { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoDatumConverter });\r\n\r\n // The model GCS is not valid\r\n await convertTest(\"Error4.bim\", { horizontalCRS: { id: \"badfood\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"OSGB-GPS-2015\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoGCSDefined });\r\n\r\n // The given GCS is not valid\r\n await convertTest(\"Error5.bim\", { horizontalCRS: { id: \"UTM84-17N\" }, verticalCRS: { id: \"ELLIPSOID\" } }, { horizontalCRS: { id: \"badfood\" }, verticalCRS: { id: \"GEOID\" } }, { x: 1473327.251, y: 1257049.636, z: 0.0 }, { p: { x: 473325.6830048648, y: 257049.77062273448, z: -47.87643904264457 }, s: GeoCoordStatus.NoGCSDefined });\r\n\r\n });\r\n });\r\n\r\n it(\"should be able to create a snapshot IModel and set geolocation by ECEF\", async () => {\r\n const args = {\r\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\r\n client: \"ABC Engineering\",\r\n globalOrigin: { x: 10, y: 10 },\r\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\r\n guid: Guid.createValue(),\r\n };\r\n\r\n const ecef = new EcefLocation({\r\n origin: [42, 21, 0],\r\n orientation: { yaw: 1, pitch: 1, roll: -1 },\r\n });\r\n\r\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot3.bim\");\r\n const iModel = SnapshotDb.createEmpty(testFile, args);\r\n\r\n assert.isTrue(iModel.ecefLocation === undefined);\r\n\r\n iModel.ecefLocation = ecef;\r\n\r\n withEditTxn(iModel, (txn) => {\r\n txn.updateIModelProps();\r\n });\r\n iModel.close();\r\n\r\n const iModel2 = SnapshotDb.openFile(testFile);\r\n\r\n assert.isTrue(iModel2.ecefLocation !== undefined);\r\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\r\n\r\n iModel2.close();\r\n });\r\n\r\n it(\"should be able to create a snapshot IModel and set geolocation by ECEF with 0,0,0 rotation\", async () => {\r\n const args = {\r\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\r\n client: \"ABC Engineering\",\r\n globalOrigin: { x: 10, y: 10 },\r\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\r\n guid: Guid.createValue(),\r\n };\r\n\r\n const ecef = new EcefLocation({\r\n origin: [42, 21, 0],\r\n orientation: { yaw: 0, pitch: 0, roll: 0 },\r\n });\r\n\r\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot3_000.bim\");\r\n const iModel = SnapshotDb.createEmpty(testFile, args);\r\n\r\n assert.isTrue(iModel.ecefLocation === undefined);\r\n\r\n iModel.ecefLocation = ecef;\r\n\r\n withEditTxn(iModel, (txn) => {\r\n txn.updateIModelProps();\r\n });\r\n iModel.close();\r\n\r\n const iModel2 = SnapshotDb.openFile(testFile);\r\n\r\n assert.isTrue(iModel2.ecefLocation !== undefined);\r\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\r\n\r\n iModel2.close();\r\n });\r\n\r\n it(\"presence of a GCS imposes the ecef value\", async () => {\r\n const args = {\r\n rootSubject: { name: \"TestSubject\", description: \"test iTwin\" },\r\n client: \"ABC Engineering\",\r\n globalOrigin: { x: 10, y: 10 },\r\n projectExtents: { low: { x: -300, y: -300, z: -20 }, high: { x: 500, y: 500, z: 400 } },\r\n guid: Guid.createValue(),\r\n };\r\n\r\n const gcs = new GeographicCRS({\r\n horizontalCRS: {\r\n id: \"10TM115-27\",\r\n description: \"\",\r\n source: \"Mentor Software Client\",\r\n deprecated: false,\r\n datumId: \"NAD27\",\r\n unit: \"Meter\",\r\n projection: {\r\n method: \"TransverseMercator\",\r\n centralMeridian: -115,\r\n latitudeOfOrigin: 0,\r\n scaleFactor: 0.9992,\r\n falseEasting: 0.0,\r\n falseNorthing: 0.0,\r\n },\r\n extent: {\r\n southWest: { latitude: 48, longitude: -120.5 },\r\n northEast: { latitude: 84, longitude: -109.5 },\r\n },\r\n },\r\n verticalCRS: { id: \"GEOID\" },\r\n additionalTransform: {\r\n helmert2DWithZOffset: {\r\n translationX: 10.0,\r\n translationY: 15.0,\r\n translationZ: 0.02,\r\n rotDeg: 1.2,\r\n scale: 1.0001,\r\n },\r\n },\r\n });\r\n\r\n const ecef = new EcefLocation({\r\n origin: [42, 21, 0],\r\n orientation: { yaw: 1, pitch: 1, roll: -1 },\r\n });\r\n\r\n const testFile = IModelTestUtils.prepareOutputFile(\"IModel\", \"TestSnapshot4.bim\");\r\n\r\n const iModel = SnapshotDb.createEmpty(testFile, args);\r\n\r\n iModel.ecefLocation = ecef;\r\n\r\n withEditTxn(iModel, (txn) => {\r\n txn.updateIModelProps();\r\n });\r\n iModel.close();\r\n\r\n const iModel2 = SnapshotDb.openForApplyChangesets(testFile);\r\n\r\n assert.isTrue(iModel2.ecefLocation !== undefined);\r\n assert.isTrue(iModel2.ecefLocation!.isAlmostEqual(ecef));\r\n\r\n assert.isTrue(iModel2.geographicCoordinateSystem === undefined);\r\n\r\n iModel2.geographicCoordinateSystem = gcs;\r\n\r\n withEditTxn(iModel2, (txn) => {\r\n txn.updateIModelProps();\r\n });\r\n iModel2.close();\r\n\r\n const iModel3 = SnapshotDb.openFile(testFile);\r\n\r\n assert.isTrue(iModel3.geographicCoordinateSystem !== undefined);\r\n\r\n // When a gcs is present then ecef value is imposed by the gcs disregarding previous value.\r\n assert.isTrue(iModel3.ecefLocation !== undefined);\r\n assert.isFalse(iModel3.ecefLocation!.isAlmostEqual(ecef));\r\n\r\n iModel3.close();\r\n });\r\n});\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/core-backend",
|
|
3
|
-
"version": "5.15.0-dev.
|
|
3
|
+
"version": "5.15.0-dev.6",
|
|
4
4
|
"description": "iTwin.js backend components",
|
|
5
5
|
"main": "lib/cjs/core-backend.js",
|
|
6
6
|
"module": "lib/esm/core-backend.js",
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"@opentelemetry/api": "^1.0.4",
|
|
30
|
-
"@itwin/core-bentley": "5.15.0-dev.
|
|
31
|
-
"@itwin/
|
|
32
|
-
"@itwin/core-geometry": "5.15.0-dev.
|
|
33
|
-
"@itwin/
|
|
34
|
-
"@itwin/core-quantity": "5.15.0-dev.
|
|
30
|
+
"@itwin/core-bentley": "5.15.0-dev.6",
|
|
31
|
+
"@itwin/ecschema-metadata": "5.15.0-dev.6",
|
|
32
|
+
"@itwin/core-geometry": "5.15.0-dev.6",
|
|
33
|
+
"@itwin/core-common": "5.15.0-dev.6",
|
|
34
|
+
"@itwin/core-quantity": "5.15.0-dev.6"
|
|
35
35
|
},
|
|
36
36
|
"peerDependenciesMeta": {
|
|
37
37
|
"@opentelemetry/api": {
|
|
@@ -72,18 +72,18 @@
|
|
|
72
72
|
"marked": "^14.1.3",
|
|
73
73
|
"sql-formatter": "^15.4.6",
|
|
74
74
|
"vite": "^6.4.3",
|
|
75
|
-
"@itwin/
|
|
76
|
-
"@itwin/
|
|
77
|
-
"@itwin/core-
|
|
78
|
-
"@itwin/
|
|
79
|
-
"@itwin/core-
|
|
80
|
-
"@itwin/
|
|
75
|
+
"@itwin/build-tools": "5.15.0-dev.6",
|
|
76
|
+
"@itwin/core-quantity": "5.15.0-dev.6",
|
|
77
|
+
"@itwin/core-bentley": "5.15.0-dev.6",
|
|
78
|
+
"@itwin/ecschema-locaters": "5.15.0-dev.6",
|
|
79
|
+
"@itwin/core-common": "5.15.0-dev.6",
|
|
80
|
+
"@itwin/ecsql-common": "5.15.0-dev.6",
|
|
81
|
+
"@itwin/ecschema-metadata": "5.15.0-dev.6",
|
|
81
82
|
"internal-tools": "3.0.0-dev.69",
|
|
82
|
-
"@itwin/core-geometry": "5.15.0-dev.
|
|
83
|
-
"@itwin/ecschema-locaters": "5.15.0-dev.5"
|
|
83
|
+
"@itwin/core-geometry": "5.15.0-dev.6"
|
|
84
84
|
},
|
|
85
85
|
"dependencies": {
|
|
86
|
-
"@bentley/imodeljs-native": "5.15.
|
|
86
|
+
"@bentley/imodeljs-native": "5.15.10",
|
|
87
87
|
"@itwin/object-storage-azure": "^3.0.4",
|
|
88
88
|
"@azure/storage-blob": "^12.28.0",
|
|
89
89
|
"form-data": "^4.0.6",
|