@itwin/core-common 5.15.0-dev.5 → 5.15.0-dev.7
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/geometry/CoordinateReferenceSystem.d.ts +18 -7
- package/lib/cjs/geometry/CoordinateReferenceSystem.d.ts.map +1 -1
- package/lib/cjs/geometry/CoordinateReferenceSystem.js +20 -8
- package/lib/cjs/geometry/CoordinateReferenceSystem.js.map +1 -1
- package/lib/esm/geometry/CoordinateReferenceSystem.d.ts +18 -7
- package/lib/esm/geometry/CoordinateReferenceSystem.d.ts.map +1 -1
- package/lib/esm/geometry/CoordinateReferenceSystem.js +20 -8
- package/lib/esm/geometry/CoordinateReferenceSystem.js.map +1 -1
- package/package.json +6 -6
|
@@ -170,16 +170,21 @@ export declare class HorizontalCRS implements HorizontalCRSProps {
|
|
|
170
170
|
* @extensions
|
|
171
171
|
*/
|
|
172
172
|
export interface VerticalCRSProps {
|
|
173
|
-
/**
|
|
174
|
-
* @
|
|
173
|
+
/** Legacy key - preserved for backwards compatibility
|
|
174
|
+
* @note You must continue to use one of the supported keys for backward compatibility so that new models can
|
|
175
|
+
* still be opened with older versions of itwin.js.
|
|
175
176
|
*/
|
|
176
177
|
id: "GEOID" | "ELLIPSOID" | "NGVD29" | "NAVD88" | "LOCAL_ELLIPSOID";
|
|
178
|
+
/** Dictionary CRS name, e.g. "EGM96 height". Takes precedence over [[epsg]] and [[id]] when set.
|
|
179
|
+
* @beta */
|
|
180
|
+
crsName?: string;
|
|
181
|
+
/** EPSG code identifying the vertical CRS. Takes precedence over [[id]] when [[crsName]] is not set.
|
|
182
|
+
* @beta */
|
|
183
|
+
epsg?: number;
|
|
177
184
|
}
|
|
178
185
|
/** Vertical Coordinate reference System implementation.
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
* we expect to support a broader set in the future including, eventually, user defined vertical CRS
|
|
182
|
-
* which will require additional parameters to be added.
|
|
186
|
+
* A VerticalCRS can identify a predefined system by dictionary name or EPSG code while retaining
|
|
187
|
+
* one of the five legacy keys for backward compatibility.
|
|
183
188
|
* @public
|
|
184
189
|
*/
|
|
185
190
|
export declare class VerticalCRS implements VerticalCRSProps {
|
|
@@ -194,6 +199,12 @@ export declare class VerticalCRS implements VerticalCRSProps {
|
|
|
194
199
|
* be used for datums that are not considered coincident vertically with WGS84. Use of this vertical datum is strongly discouraged.
|
|
195
200
|
*/
|
|
196
201
|
readonly id: "GEOID" | "ELLIPSOID" | "NGVD29" | "NAVD88" | "LOCAL_ELLIPSOID";
|
|
202
|
+
/** Dictionary CRS name, e.g. "EGM96 height". Takes precedence over [[epsg]] and [[id]] when set.
|
|
203
|
+
* @beta */
|
|
204
|
+
readonly crsName?: string;
|
|
205
|
+
/** EPSG code identifying the vertical CRS. Takes precedence over [[id]] when [[crsName]] is not set.
|
|
206
|
+
* @beta */
|
|
207
|
+
readonly epsg?: number;
|
|
197
208
|
constructor(data?: VerticalCRSProps);
|
|
198
209
|
/** Creates a Vertical CRS from JSON representation.
|
|
199
210
|
* @public */
|
|
@@ -201,7 +212,7 @@ export declare class VerticalCRS implements VerticalCRSProps {
|
|
|
201
212
|
/** Creates a JSON from the Vertical CRS definition
|
|
202
213
|
* @public */
|
|
203
214
|
toJSON(): VerticalCRSProps;
|
|
204
|
-
/**
|
|
215
|
+
/** Strictly compares the stored properties of two vertical CRS, not their resolved identities.
|
|
205
216
|
* @public */
|
|
206
217
|
equals(other: VerticalCRS): boolean;
|
|
207
218
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoordinateReferenceSystem.d.ts","sourceRoot":"","sources":["../../../src/geometry/CoordinateReferenceSystem.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"CoordinateReferenceSystem.d.ts","sourceRoot":"","sources":["../../../src/geometry/CoordinateReferenceSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -204,10 +204,8 @@ class HorizontalCRS {
|
|
|
204
204
|
}
|
|
205
205
|
exports.HorizontalCRS = HorizontalCRS;
|
|
206
206
|
/** Vertical Coordinate reference System implementation.
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
* we expect to support a broader set in the future including, eventually, user defined vertical CRS
|
|
210
|
-
* which will require additional parameters to be added.
|
|
207
|
+
* A VerticalCRS can identify a predefined system by dictionary name or EPSG code while retaining
|
|
208
|
+
* one of the five legacy keys for backward compatibility.
|
|
211
209
|
* @public
|
|
212
210
|
*/
|
|
213
211
|
class VerticalCRS {
|
|
@@ -222,10 +220,19 @@ class VerticalCRS {
|
|
|
222
220
|
* be used for datums that are not considered coincident vertically with WGS84. Use of this vertical datum is strongly discouraged.
|
|
223
221
|
*/
|
|
224
222
|
id;
|
|
223
|
+
/** Dictionary CRS name, e.g. "EGM96 height". Takes precedence over [[epsg]] and [[id]] when set.
|
|
224
|
+
* @beta */
|
|
225
|
+
crsName;
|
|
226
|
+
/** EPSG code identifying the vertical CRS. Takes precedence over [[id]] when [[crsName]] is not set.
|
|
227
|
+
* @beta */
|
|
228
|
+
epsg;
|
|
225
229
|
constructor(data) {
|
|
226
230
|
this.id = "GEOID";
|
|
227
|
-
if (data)
|
|
231
|
+
if (data) {
|
|
228
232
|
this.id = data.id;
|
|
233
|
+
this.crsName = data.crsName;
|
|
234
|
+
this.epsg = data.epsg;
|
|
235
|
+
}
|
|
229
236
|
}
|
|
230
237
|
/** Creates a Vertical CRS from JSON representation.
|
|
231
238
|
* @public */
|
|
@@ -235,12 +242,17 @@ class VerticalCRS {
|
|
|
235
242
|
/** Creates a JSON from the Vertical CRS definition
|
|
236
243
|
* @public */
|
|
237
244
|
toJSON() {
|
|
238
|
-
|
|
245
|
+
const data = { id: this.id };
|
|
246
|
+
if (this.crsName !== undefined)
|
|
247
|
+
data.crsName = this.crsName;
|
|
248
|
+
if (this.epsg !== undefined)
|
|
249
|
+
data.epsg = this.epsg;
|
|
250
|
+
return data;
|
|
239
251
|
}
|
|
240
|
-
/**
|
|
252
|
+
/** Strictly compares the stored properties of two vertical CRS, not their resolved identities.
|
|
241
253
|
* @public */
|
|
242
254
|
equals(other) {
|
|
243
|
-
return
|
|
255
|
+
return this.id === other.id && this.crsName === other.crsName && this.epsg === other.epsg;
|
|
244
256
|
}
|
|
245
257
|
}
|
|
246
258
|
exports.VerticalCRS = VerticalCRS;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoordinateReferenceSystem.js","sourceRoot":"","sources":["../../../src/geometry/CoordinateReferenceSystem.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\n/** @packageDocumentation\r\n * @module Geometry\r\n */\r\n// cspell:ignore NAVD, NGVD, NSRS, Helmert\r\n\r\nimport { GeodeticDatum, GeodeticDatumProps } from \"./GeodeticDatum\";\r\nimport { GeodeticEllipsoid, GeodeticEllipsoidProps } from \"./GeodeticEllipsoid\";\r\nimport { Carto2DDegrees, Carto2DDegreesProps, Projection, ProjectionProps } from \"./Projection\";\r\nimport { AdditionalTransform, AdditionalTransformProps } from \"./AdditionalTransform\";\r\n/** This type indicates possible linear and angular units supported.\r\n * @public\r\n * @extensions\r\n*/\r\nexport type UnitType = \"Meter\" | \"InternationalFoot\" | \"USSurveyFoot\" | \"Degree\" | \"Unsupported\";\r\n\r\n/** The extent in latitude, longitude bounds where a horizontal CRS is applicable\r\n * @public\r\n * @extensions\r\n*/\r\nexport interface HorizontalCRSExtentProps {\r\n /** The South West point in latitude and longitude in degrees for the user-defined extent of the CRS */\r\n southWest: Carto2DDegreesProps;\r\n /** The North East point in latitude in longitude in degrees for the user-defined extent of the CRS.\r\n The latitude of the North East must be greater or equal to the latitude of the South West point\r\n It is possible, however, for the longitude of the South West corner to have greater value than the\r\n longitude of the North East point such as when the west longitude is located on the other side\r\n of the -180/180 degree longitude line.*/\r\n northEast: Carto2DDegreesProps;\r\n}\r\n\r\n/** The extent in latitude, longitude bounds where a horizontal CRS is applicable\r\n * @public\r\n */\r\nexport class HorizontalCRSExtent implements HorizontalCRSExtentProps {\r\n /** The latitude minimum and maximum for the user-defined extent of the CRS */\r\n public readonly southWest: Carto2DDegrees;\r\n /** The North East point in latitude in longitude in degrees for the user-defined extent of the CRS.\r\n The latitude of the North East must be greater or equal to the latitude of the South West point\r\n It is possible, however, for the longitude of the South West corner to have greater value than the\r\n longitude of the North East point such as when the west longitude is located on the other side\r\n of the -180/180 degree longitude line.*/\r\n public readonly northEast: Carto2DDegrees;\r\n\r\n public constructor(data?: HorizontalCRSExtentProps) {\r\n if (data) {\r\n this.southWest = Carto2DDegrees.fromJSON(data.southWest);\r\n this.northEast = Carto2DDegrees.fromJSON(data.northEast);\r\n if (this.northEast.latitude < this.southWest.latitude)\r\n this.northEast.latitude = this.southWest.latitude;\r\n } else {\r\n this.southWest = new Carto2DDegrees();\r\n this.northEast = new Carto2DDegrees();\r\n }\r\n }\r\n\r\n /** Creates an extent object from JSON representation.\r\n * @public */\r\n public static fromJSON(data: HorizontalCRSExtentProps): HorizontalCRSExtent {\r\n return new HorizontalCRSExtent(data);\r\n }\r\n\r\n /** Creates a JSON from the Extent definition\r\n * @public */\r\n public toJSON(): HorizontalCRSExtentProps {\r\n return { southWest: this.southWest.toJSON(), northEast: this.northEast.toJSON() };\r\n }\r\n\r\n /** Compares two Extents. It applies a minuscule tolerance to comparing numbers.\r\n * @public */\r\n public equals(other: HorizontalCRSExtent): boolean {\r\n return this.southWest.equals(other.southWest) && this.northEast.equals(other.northEast);\r\n }\r\n}\r\n\r\n/** Horizontal Geographic Coordinate Reference System definition\r\n * @public\r\n * @extensions\r\n */\r\nexport interface HorizontalCRSProps {\r\n /** The identifier of the horizontal CRS as stored in the dictionary or the service database */\r\n id?: string;\r\n /** Used only for user-defined definitions that will typically use a GUID as id. A display name for the CRS that allows\r\n * a human to understand the nature of the definition\r\n */\r\n name?: string;\r\n /** Description */\r\n description?: string;\r\n /** A textual description of the source of the CRS definition. */\r\n source?: string;\r\n /** If true then indicates the definition is deprecated. It should then be used for backward compatibility only.\r\n * If false or undefined then the definition is not deprecated.\r\n */\r\n deprecated?: boolean;\r\n /** The EPSG code of the CRS. If undefined then there is no EPSG code associated. */\r\n epsg?: number;\r\n /** The identifier of the geodetic datum as stored in the dictionary or the service database. */\r\n datumId?: string;\r\n /** The complete definition of the geodetic datum referred to by datumId. It can also be used if the datum is not stored\r\n * in either service or dictionary.\r\n */\r\n datum?: GeodeticDatumProps;\r\n /** The identifier of the geodetic ellipsoid as stored in the dictionary or the service database. This property is exclusive\r\n * of having datumId and datum properties undefined.\r\n */\r\n ellipsoidId?: string;\r\n /** The complete definition of the geodetic datum referred to by datumId. It can also be used if the datum is not stored\r\n * in either service or dictionary\r\n */\r\n ellipsoid?: GeodeticEllipsoidProps;\r\n /** The text indicating the unit used. */\r\n unit?: UnitType;\r\n /** Projection including projection parameters. */\r\n projection?: ProjectionProps;\r\n /** Extent representing the domain of application of the CRS. */\r\n extent?: HorizontalCRSExtentProps;\r\n}\r\n\r\n/** Horizontal Geographic Coordinate reference System implementation.\r\n * An horizontal CRS defines the portion which is horizontal to the Earth surface (within the deformation brought by the projection process).\r\n * There are two major classes of Horizontal Coordinate Reference Systems:\r\n * - The projected CRS which rely on a projection to flatten the coordinate system space into axises using linear\r\n * units (meter, US Survey Feet, ...) relative to some origin.\r\n * - The non projected CRS (also named geographic CRS by EPSG nomenclature) that does\r\n * not require a projection (projection method = None) and horizontal coordinates are expressed\r\n * as longitude and latitude (see [[Cartographic]])\r\n * Horizontal Coordinate Systems rely on a projection to flatten the surface of an ellipsoid (see [[GeodeticEllipsoid]]) which is\r\n * the mathematical model of the Earth surface.\r\n * Explanations in more details of the various concepts can be obtained from other sources including the page on the subject\r\n * on itwinJS.org (see https://www.itwinjs.org/learning/geolocation/?term=coordinate+system).\r\n * A few details are still required to grasp the model. Geographic Coordinate Reference Systems rely on the concept of geodetic datums\r\n * (see [[GeodeticDatum]]) to convert latitude/longitude from one frame of reference to another. Such geodetic datum will bind the ellipsoid\r\n * and possibly define transformation steps required to convert from the currently used geodetic datum to the common datum WGS84\r\n * used for worldwide data (such as most popular imagery data sources). If there are no rules established to convert to WGS84\r\n * or if those rules are secret then the horizontal CRS can be datum-less and must make direct use of the ellipsoid\r\n * to define the earth surface.\r\n * For this purpose either the geodetic datum must be specified using either datumId or datum properties or both. If\r\n * both these values are undefined then it is possible to define the ellipsoid using properties ellipsoidId or ellipsoid or both.\r\n * These two pairs of properties are mutually exclusive with datum related properties having precedence. If a datum or datumId is set then\r\n * ellipsoid properties will automatically be undefined. If datumId or datum is defined then attempts to set ellipsoidId or ellipsoid\r\n * will fail silently, the values remaining undefined. The ellipsoidId will not be a repeat of the ellipsoidId property part of the\r\n * geodetic datum definition.\r\n * @public\r\n */\r\nexport class HorizontalCRS implements HorizontalCRSProps {\r\n /** The identifier of the horizontal CRS as stored in the dictionary or the service database */\r\n public readonly id?: string;\r\n /** Used only for user-defined definitions that will typically use a GUID as id. A display name for the CRS that allows\r\n ** a human to understand the nature of the definition\r\n */\r\n public readonly name?: string;\r\n /** Description */\r\n public readonly description?: string;\r\n /** The source of the CRS definition. */\r\n public readonly source?: string;\r\n /** If true then indicates the definition is deprecated. It should then be used for backward compatibility only.\r\n * If false then the definition is not deprecated. Default is false.\r\n */\r\n public readonly deprecated: boolean;\r\n /** The EPSG code of the CRS. If undefined then there is no EPSG code associated. */\r\n public readonly epsg?: number;\r\n /** The identifier of the geodetic datum as stored in the dictionary or the service database. */\r\n public readonly datumId?: string;\r\n /** The complete definition of the geodetic datum referred to by datumId. It can also be used if the datum is not stored\r\n * in either service or dictionary.\r\n */\r\n public readonly datum?: GeodeticDatum;\r\n\r\n /** The identifier of the geodetic ellipsoid as stored in the dictionary or the service database. This property is exclusive\r\n * of having datumId and datum properties undefined.\r\n */\r\n public readonly ellipsoidId?: string;\r\n /** The complete definition of the geodetic ellipsoid referred to by ellipsoidId. It can also be used if the ellipsoid is not stored\r\n * in either service or dictionary. This property is exclusive\r\n * of having datumId and datum properties undefined.\r\n */\r\n public readonly ellipsoid?: GeodeticEllipsoid;\r\n /** The text indicating the unit used. */\r\n public readonly unit?: UnitType;\r\n /** Projection including projection parameters. */\r\n public readonly projection?: Projection;\r\n /** Extent representing the domain of application of the CRS. */\r\n public readonly extent?: HorizontalCRSExtent;\r\n\r\n public constructor(_data?: HorizontalCRSProps) {\r\n this.deprecated = false;\r\n if (_data) {\r\n this.id = _data.id;\r\n this.description = _data.description;\r\n this.source = _data.source;\r\n this.deprecated = _data.deprecated ?? false;\r\n this.epsg = _data.epsg;\r\n this.datumId = _data.datumId;\r\n this.datum = _data.datum ? GeodeticDatum.fromJSON(_data.datum) : undefined;\r\n if (!this.datumId && !this.datum) {\r\n this.ellipsoidId = _data.ellipsoidId;\r\n this.ellipsoid = _data.ellipsoid ? GeodeticEllipsoid.fromJSON(_data.ellipsoid) : undefined;\r\n }\r\n this.unit = _data.unit;\r\n this.projection = _data.projection ? Projection.fromJSON(_data.projection) : undefined;\r\n this.extent = _data.extent ? HorizontalCRSExtent.fromJSON(_data.extent) : undefined;\r\n }\r\n }\r\n\r\n /** Creates an Horizontal CRS from JSON representation.\r\n * @public */\r\n public static fromJSON(data: HorizontalCRSProps): HorizontalCRS {\r\n return new HorizontalCRS(data);\r\n }\r\n\r\n /** Creates a JSON from the Horizontal CRS definition\r\n * @public */\r\n public toJSON(): HorizontalCRSProps {\r\n const data: HorizontalCRSProps = {};\r\n data.id = this.id;\r\n data.description = this.description;\r\n data.source = this.source;\r\n /* We prefer to use the default undef instead of false value for deprecated in Json */\r\n if (this.deprecated)\r\n data.deprecated = true;\r\n\r\n data.epsg = this.epsg;\r\n data.datumId = this.datumId;\r\n if (this.datum)\r\n data.datum = this.datum.toJSON();\r\n\r\n data.ellipsoidId = this.ellipsoidId;\r\n if (this.ellipsoid)\r\n data.ellipsoid = this.ellipsoid.toJSON();\r\n\r\n data.unit = this.unit;\r\n if (this.projection)\r\n data.projection = this.projection.toJSON();\r\n\r\n if (this.extent)\r\n data.extent = this.extent.toJSON();\r\n\r\n return data;\r\n }\r\n\r\n /** Compares two horizontal CRS. It is not an equivalence test as descriptive properties are also compared\r\n * but number compares are applied a minuscule tolerance.\r\n * @public */\r\n public equals(other: HorizontalCRS): boolean {\r\n if (this.id !== other.id ||\r\n this.description !== other.description ||\r\n this.source !== other.source ||\r\n this.deprecated !== other.deprecated ||\r\n this.epsg !== other.epsg ||\r\n this.datumId !== other.datumId ||\r\n this.ellipsoidId !== other.ellipsoidId ||\r\n this.unit !== other.unit)\r\n return false;\r\n\r\n if ((this.datum === undefined) !== (other.datum === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.datum && !this.datum.equals(other.datum!))\r\n return false;\r\n\r\n if ((this.ellipsoid === undefined) !== (other.ellipsoid === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.ellipsoid && !this.ellipsoid.equals(other.ellipsoid!))\r\n return false;\r\n\r\n if ((this.projection === undefined) !== (other.projection === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.projection && !this.projection.equals(other.projection!))\r\n return false;\r\n\r\n if ((this.extent === undefined) !== (other.extent === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.extent && !this.extent.equals(other.extent!))\r\n return false;\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Vertical Geographic Coordinate reference System definition\r\n * @public\r\n * @extensions\r\n */\r\nexport interface VerticalCRSProps {\r\n /** Vertical CRS Key name.\r\n * @see [[VerticalCRS.id]]\r\n */\r\n id: \"GEOID\" | \"ELLIPSOID\" | \"NGVD29\" | \"NAVD88\" | \"LOCAL_ELLIPSOID\";\r\n}\r\n\r\n/** Vertical Coordinate reference System implementation.\r\n * The VerticalCRS contains currently a single identifier property of string type. Although\r\n * we currently only support five distinct key values \"GEOID\", \"ELLIPSOID\", \"NAVD88\", \"NGVD29\" and \"LOCAL_ELLIPSOID\"\r\n * we expect to support a broader set in the future including, eventually, user defined vertical CRS\r\n * which will require additional parameters to be added.\r\n * @public\r\n*/\r\nexport class VerticalCRS implements VerticalCRSProps {\r\n /** Vertical CRS Key name. The only supported values are currently \"GEOID\", \"ELLIPSOID\", \"NAVD88\", \"NGVD29\" and \"LOCAL_ELLIPSOID\".\r\n * GEOID indicates elevations are to be interpreted relative to the local Geoid of the dataset. It can also be considered to be Mean Sea Level.\r\n * NAVD88 is the local geoid model for the USA. This vertical datum can only be used if the horizontal portion is based on a\r\n * datum variation of NAD83, NAD27, NSRS2007 and NSRS2011.\r\n * NGVD29 is the former local geoid model for the USA. This vertical datum can only be used if the horizontal portion is based on a\r\n * datum variation of NAD83, NAD27, NSRS2007 and NSRS2011.\r\n * ELLIPSOID indicates that elevations are relative to the surface of the WGS84(or current coincident) ellipsoid.\r\n * LOCAL_ELLIPSOID indicates that elevations are relative to the surface of the local ellipsoid used by the horizontal CRS. It can only\r\n * be used for datums that are not considered coincident vertically with WGS84. Use of this vertical datum is strongly discouraged.\r\n */\r\n public readonly id: \"GEOID\" | \"ELLIPSOID\" | \"NGVD29\" | \"NAVD88\" | \"LOCAL_ELLIPSOID\";\r\n\r\n public constructor(data?: VerticalCRSProps) {\r\n this.id = \"GEOID\";\r\n if (data)\r\n this.id = data.id;\r\n }\r\n\r\n /** Creates a Vertical CRS from JSON representation.\r\n * @public */\r\n public static fromJSON(data: VerticalCRSProps): VerticalCRS {\r\n return new VerticalCRS(data);\r\n }\r\n\r\n /** Creates a JSON from the Vertical CRS definition\r\n * @public */\r\n public toJSON(): VerticalCRSProps {\r\n return { id: this.id };\r\n }\r\n\r\n /** Compares two vertical CRS.\r\n * @public */\r\n public equals(other: VerticalCRS): boolean {\r\n return (this.id === other.id);\r\n }\r\n}\r\n\r\n/** Geographic Coordinate Reference System definition that includes the horizontal and vertical definitions as well as an optional\r\n * additional transformation.\r\n * @see [[GeographicCRS]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GeographicCRSProps {\r\n /** The horizontal portion of the geographic coordinate reference system. */\r\n horizontalCRS?: HorizontalCRSProps;\r\n /** The vertical portion of the geographic coordinate reference system. */\r\n verticalCRS?: VerticalCRSProps;\r\n /** The optional additional transform the geographic coordinate reference system. */\r\n additionalTransform?: AdditionalTransformProps;\r\n}\r\n\r\n/** Geographic Coordinate Reference System implementation. This is the class that indicates the definition of a Geographic\r\n * coordinate reference system comprised of three components: Horizontal and Vertical and an optional additional transform.\r\n * The vertical component (see [[VerticalCRS]]) is the simplest portion containing a simple identifier as a string.\r\n * The optional additional transform of which, currently, only the type Helmert 2D with Z offset [[Helmert2DWithZOffset]] is supported\r\n * defines a transformation of x,y, and z cartesian coordinate of the projection to the final\r\n * Geographic Coordinate Reference System cartesian coordinates.\r\n * The horizontal component contains a list of identification and documentation properties as well as\r\n * defining details possibly including the projection with method and parameters, the definition of the datum, ellipsoid, extent and so on.\r\n * The principle of describing a Geographic CRS is that the definition may be incomplete. The whole set of classes related to geographic\r\n * coordinate reference system classes ([[GeodeticEllipsoid]], [[GeodeticDatum]], [[Projection]], [[GeodeticTransform]], ...) are designed\r\n * so that they can be parsed from incomplete JSON fragments, or produce incomplete JSON fragments such as would be\r\n * generated from a request to a REST API to a server when select OData clauses are used.\r\n * Often GeographicCRS would knowingly be created incomplete but with sufficient information to perform conversion from some\r\n * reprojection engine (the present set of classes do not provide any GeographicCRS conversion).\r\n * For example the following definitions are quite sufficient to request conversion to or from by a reprojection engine:\r\n * { horizontalCRS: {id: \"LL84\"}, verticalCRS: {id:\"GEOID\"}\r\n * or\r\n * { horizontalCRS: {datumId: \"WGS84\", projection: {method: \"None\"}}, verticalCRS: \"ELLIPSOID\"}\r\n * The reprojection engine will use the engine internal dictionary to obtain the details if it can.\r\n * Some definitions will originate from other sources (a parsed WKT for example) and the reprojection engine will require\r\n * all mathematical and operational details to perform any conversion (descriptive information are ignored in the conversion process).\r\n * @note see important detailed explanation in the [[HorizontalCRS]], [[VerticalCRS]] and [[AdditionalTransform]] documentation.\r\n * @note Earth Centered, Earth Fixed coordinate system (ECEF) is a full 3D cartesian system that unambiguously\r\n * expressed coordinates relative to the Earth Center. Since there is no horizontal portion independent from\r\n * the vertical portion this system cannot be represented by a GeographicCRS and remains a separate concept.\r\n * @public\r\n*/\r\nexport class GeographicCRS implements GeographicCRSProps {\r\n /** The horizontal portion of the geographic coordinate reference system. */\r\n public readonly horizontalCRS?: HorizontalCRS;\r\n /** The vertical portion of the geographic coordinate reference system. */\r\n public readonly verticalCRS?: VerticalCRS;\r\n /** The optional additional transform the geographic coordinate reference system. */\r\n public readonly additionalTransform?: AdditionalTransform;\r\n\r\n public constructor(data?: GeographicCRSProps) {\r\n if (data) {\r\n this.horizontalCRS = data.horizontalCRS ? HorizontalCRS.fromJSON(data.horizontalCRS) : undefined;\r\n this.verticalCRS = data.verticalCRS ? VerticalCRS.fromJSON(data.verticalCRS) : undefined;\r\n this.additionalTransform = data.additionalTransform ? AdditionalTransform.fromJSON(data.additionalTransform) : undefined;\r\n }\r\n }\r\n\r\n /** Creates a Geographic CRS from JSON representation.\r\n * @public */\r\n public static fromJSON(data: GeographicCRSProps): GeographicCRS {\r\n return new GeographicCRS(data);\r\n }\r\n\r\n /** Creates a JSON from the Geographic CRS definition\r\n * @public */\r\n public toJSON(): GeographicCRSProps {\r\n const data: GeographicCRSProps = {};\r\n if (this.horizontalCRS)\r\n data.horizontalCRS = this.horizontalCRS.toJSON();\r\n\r\n if (this.verticalCRS)\r\n data.verticalCRS = this.verticalCRS.toJSON();\r\n\r\n if (this.additionalTransform)\r\n data.additionalTransform = this.additionalTransform.toJSON();\r\n\r\n return data;\r\n }\r\n\r\n /** Compares two Geographic CRS. It is a strict compare operation not an equivalence test though\r\n * number compares are applied a minuscule tolerance.\r\n * It takes into account descriptive properties not only mathematical definition properties.\r\n * @public\r\n */\r\n public equals(other: GeographicCRS): boolean {\r\n if ((this.horizontalCRS === undefined) !== (other.horizontalCRS === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.horizontalCRS && !this.horizontalCRS.equals(other.horizontalCRS!))\r\n return false;\r\n\r\n if ((this.verticalCRS === undefined) !== (other.verticalCRS === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.verticalCRS && !this.verticalCRS.equals(other.verticalCRS!))\r\n return false;\r\n\r\n if ((this.additionalTransform === undefined) !== (other.additionalTransform === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.additionalTransform && !this.additionalTransform.equals(other.additionalTransform!))\r\n return false;\r\n\r\n return true;\r\n }\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"CoordinateReferenceSystem.js","sourceRoot":"","sources":["../../../src/geometry/CoordinateReferenceSystem.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\n/** @packageDocumentation\r\n * @module Geometry\r\n */\r\n// cspell:ignore NAVD, NGVD, NSRS, Helmert\r\n\r\nimport { GeodeticDatum, GeodeticDatumProps } from \"./GeodeticDatum\";\r\nimport { GeodeticEllipsoid, GeodeticEllipsoidProps } from \"./GeodeticEllipsoid\";\r\nimport { Carto2DDegrees, Carto2DDegreesProps, Projection, ProjectionProps } from \"./Projection\";\r\nimport { AdditionalTransform, AdditionalTransformProps } from \"./AdditionalTransform\";\r\n/** This type indicates possible linear and angular units supported.\r\n * @public\r\n * @extensions\r\n*/\r\nexport type UnitType = \"Meter\" | \"InternationalFoot\" | \"USSurveyFoot\" | \"Degree\" | \"Unsupported\";\r\n\r\n/** The extent in latitude, longitude bounds where a horizontal CRS is applicable\r\n * @public\r\n * @extensions\r\n*/\r\nexport interface HorizontalCRSExtentProps {\r\n /** The South West point in latitude and longitude in degrees for the user-defined extent of the CRS */\r\n southWest: Carto2DDegreesProps;\r\n /** The North East point in latitude in longitude in degrees for the user-defined extent of the CRS.\r\n The latitude of the North East must be greater or equal to the latitude of the South West point\r\n It is possible, however, for the longitude of the South West corner to have greater value than the\r\n longitude of the North East point such as when the west longitude is located on the other side\r\n of the -180/180 degree longitude line.*/\r\n northEast: Carto2DDegreesProps;\r\n}\r\n\r\n/** The extent in latitude, longitude bounds where a horizontal CRS is applicable\r\n * @public\r\n */\r\nexport class HorizontalCRSExtent implements HorizontalCRSExtentProps {\r\n /** The latitude minimum and maximum for the user-defined extent of the CRS */\r\n public readonly southWest: Carto2DDegrees;\r\n /** The North East point in latitude in longitude in degrees for the user-defined extent of the CRS.\r\n The latitude of the North East must be greater or equal to the latitude of the South West point\r\n It is possible, however, for the longitude of the South West corner to have greater value than the\r\n longitude of the North East point such as when the west longitude is located on the other side\r\n of the -180/180 degree longitude line.*/\r\n public readonly northEast: Carto2DDegrees;\r\n\r\n public constructor(data?: HorizontalCRSExtentProps) {\r\n if (data) {\r\n this.southWest = Carto2DDegrees.fromJSON(data.southWest);\r\n this.northEast = Carto2DDegrees.fromJSON(data.northEast);\r\n if (this.northEast.latitude < this.southWest.latitude)\r\n this.northEast.latitude = this.southWest.latitude;\r\n } else {\r\n this.southWest = new Carto2DDegrees();\r\n this.northEast = new Carto2DDegrees();\r\n }\r\n }\r\n\r\n /** Creates an extent object from JSON representation.\r\n * @public */\r\n public static fromJSON(data: HorizontalCRSExtentProps): HorizontalCRSExtent {\r\n return new HorizontalCRSExtent(data);\r\n }\r\n\r\n /** Creates a JSON from the Extent definition\r\n * @public */\r\n public toJSON(): HorizontalCRSExtentProps {\r\n return { southWest: this.southWest.toJSON(), northEast: this.northEast.toJSON() };\r\n }\r\n\r\n /** Compares two Extents. It applies a minuscule tolerance to comparing numbers.\r\n * @public */\r\n public equals(other: HorizontalCRSExtent): boolean {\r\n return this.southWest.equals(other.southWest) && this.northEast.equals(other.northEast);\r\n }\r\n}\r\n\r\n/** Horizontal Geographic Coordinate Reference System definition\r\n * @public\r\n * @extensions\r\n */\r\nexport interface HorizontalCRSProps {\r\n /** The identifier of the horizontal CRS as stored in the dictionary or the service database */\r\n id?: string;\r\n /** Used only for user-defined definitions that will typically use a GUID as id. A display name for the CRS that allows\r\n * a human to understand the nature of the definition\r\n */\r\n name?: string;\r\n /** Description */\r\n description?: string;\r\n /** A textual description of the source of the CRS definition. */\r\n source?: string;\r\n /** If true then indicates the definition is deprecated. It should then be used for backward compatibility only.\r\n * If false or undefined then the definition is not deprecated.\r\n */\r\n deprecated?: boolean;\r\n /** The EPSG code of the CRS. If undefined then there is no EPSG code associated. */\r\n epsg?: number;\r\n /** The identifier of the geodetic datum as stored in the dictionary or the service database. */\r\n datumId?: string;\r\n /** The complete definition of the geodetic datum referred to by datumId. It can also be used if the datum is not stored\r\n * in either service or dictionary.\r\n */\r\n datum?: GeodeticDatumProps;\r\n /** The identifier of the geodetic ellipsoid as stored in the dictionary or the service database. This property is exclusive\r\n * of having datumId and datum properties undefined.\r\n */\r\n ellipsoidId?: string;\r\n /** The complete definition of the geodetic datum referred to by datumId. It can also be used if the datum is not stored\r\n * in either service or dictionary\r\n */\r\n ellipsoid?: GeodeticEllipsoidProps;\r\n /** The text indicating the unit used. */\r\n unit?: UnitType;\r\n /** Projection including projection parameters. */\r\n projection?: ProjectionProps;\r\n /** Extent representing the domain of application of the CRS. */\r\n extent?: HorizontalCRSExtentProps;\r\n}\r\n\r\n/** Horizontal Geographic Coordinate reference System implementation.\r\n * An horizontal CRS defines the portion which is horizontal to the Earth surface (within the deformation brought by the projection process).\r\n * There are two major classes of Horizontal Coordinate Reference Systems:\r\n * - The projected CRS which rely on a projection to flatten the coordinate system space into axises using linear\r\n * units (meter, US Survey Feet, ...) relative to some origin.\r\n * - The non projected CRS (also named geographic CRS by EPSG nomenclature) that does\r\n * not require a projection (projection method = None) and horizontal coordinates are expressed\r\n * as longitude and latitude (see [[Cartographic]])\r\n * Horizontal Coordinate Systems rely on a projection to flatten the surface of an ellipsoid (see [[GeodeticEllipsoid]]) which is\r\n * the mathematical model of the Earth surface.\r\n * Explanations in more details of the various concepts can be obtained from other sources including the page on the subject\r\n * on itwinJS.org (see https://www.itwinjs.org/learning/geolocation/?term=coordinate+system).\r\n * A few details are still required to grasp the model. Geographic Coordinate Reference Systems rely on the concept of geodetic datums\r\n * (see [[GeodeticDatum]]) to convert latitude/longitude from one frame of reference to another. Such geodetic datum will bind the ellipsoid\r\n * and possibly define transformation steps required to convert from the currently used geodetic datum to the common datum WGS84\r\n * used for worldwide data (such as most popular imagery data sources). If there are no rules established to convert to WGS84\r\n * or if those rules are secret then the horizontal CRS can be datum-less and must make direct use of the ellipsoid\r\n * to define the earth surface.\r\n * For this purpose either the geodetic datum must be specified using either datumId or datum properties or both. If\r\n * both these values are undefined then it is possible to define the ellipsoid using properties ellipsoidId or ellipsoid or both.\r\n * These two pairs of properties are mutually exclusive with datum related properties having precedence. If a datum or datumId is set then\r\n * ellipsoid properties will automatically be undefined. If datumId or datum is defined then attempts to set ellipsoidId or ellipsoid\r\n * will fail silently, the values remaining undefined. The ellipsoidId will not be a repeat of the ellipsoidId property part of the\r\n * geodetic datum definition.\r\n * @public\r\n */\r\nexport class HorizontalCRS implements HorizontalCRSProps {\r\n /** The identifier of the horizontal CRS as stored in the dictionary or the service database */\r\n public readonly id?: string;\r\n /** Used only for user-defined definitions that will typically use a GUID as id. A display name for the CRS that allows\r\n ** a human to understand the nature of the definition\r\n */\r\n public readonly name?: string;\r\n /** Description */\r\n public readonly description?: string;\r\n /** The source of the CRS definition. */\r\n public readonly source?: string;\r\n /** If true then indicates the definition is deprecated. It should then be used for backward compatibility only.\r\n * If false then the definition is not deprecated. Default is false.\r\n */\r\n public readonly deprecated: boolean;\r\n /** The EPSG code of the CRS. If undefined then there is no EPSG code associated. */\r\n public readonly epsg?: number;\r\n /** The identifier of the geodetic datum as stored in the dictionary or the service database. */\r\n public readonly datumId?: string;\r\n /** The complete definition of the geodetic datum referred to by datumId. It can also be used if the datum is not stored\r\n * in either service or dictionary.\r\n */\r\n public readonly datum?: GeodeticDatum;\r\n\r\n /** The identifier of the geodetic ellipsoid as stored in the dictionary or the service database. This property is exclusive\r\n * of having datumId and datum properties undefined.\r\n */\r\n public readonly ellipsoidId?: string;\r\n /** The complete definition of the geodetic ellipsoid referred to by ellipsoidId. It can also be used if the ellipsoid is not stored\r\n * in either service or dictionary. This property is exclusive\r\n * of having datumId and datum properties undefined.\r\n */\r\n public readonly ellipsoid?: GeodeticEllipsoid;\r\n /** The text indicating the unit used. */\r\n public readonly unit?: UnitType;\r\n /** Projection including projection parameters. */\r\n public readonly projection?: Projection;\r\n /** Extent representing the domain of application of the CRS. */\r\n public readonly extent?: HorizontalCRSExtent;\r\n\r\n public constructor(_data?: HorizontalCRSProps) {\r\n this.deprecated = false;\r\n if (_data) {\r\n this.id = _data.id;\r\n this.description = _data.description;\r\n this.source = _data.source;\r\n this.deprecated = _data.deprecated ?? false;\r\n this.epsg = _data.epsg;\r\n this.datumId = _data.datumId;\r\n this.datum = _data.datum ? GeodeticDatum.fromJSON(_data.datum) : undefined;\r\n if (!this.datumId && !this.datum) {\r\n this.ellipsoidId = _data.ellipsoidId;\r\n this.ellipsoid = _data.ellipsoid ? GeodeticEllipsoid.fromJSON(_data.ellipsoid) : undefined;\r\n }\r\n this.unit = _data.unit;\r\n this.projection = _data.projection ? Projection.fromJSON(_data.projection) : undefined;\r\n this.extent = _data.extent ? HorizontalCRSExtent.fromJSON(_data.extent) : undefined;\r\n }\r\n }\r\n\r\n /** Creates an Horizontal CRS from JSON representation.\r\n * @public */\r\n public static fromJSON(data: HorizontalCRSProps): HorizontalCRS {\r\n return new HorizontalCRS(data);\r\n }\r\n\r\n /** Creates a JSON from the Horizontal CRS definition\r\n * @public */\r\n public toJSON(): HorizontalCRSProps {\r\n const data: HorizontalCRSProps = {};\r\n data.id = this.id;\r\n data.description = this.description;\r\n data.source = this.source;\r\n /* We prefer to use the default undef instead of false value for deprecated in Json */\r\n if (this.deprecated)\r\n data.deprecated = true;\r\n\r\n data.epsg = this.epsg;\r\n data.datumId = this.datumId;\r\n if (this.datum)\r\n data.datum = this.datum.toJSON();\r\n\r\n data.ellipsoidId = this.ellipsoidId;\r\n if (this.ellipsoid)\r\n data.ellipsoid = this.ellipsoid.toJSON();\r\n\r\n data.unit = this.unit;\r\n if (this.projection)\r\n data.projection = this.projection.toJSON();\r\n\r\n if (this.extent)\r\n data.extent = this.extent.toJSON();\r\n\r\n return data;\r\n }\r\n\r\n /** Compares two horizontal CRS. It is not an equivalence test as descriptive properties are also compared\r\n * but number compares are applied a minuscule tolerance.\r\n * @public */\r\n public equals(other: HorizontalCRS): boolean {\r\n if (this.id !== other.id ||\r\n this.description !== other.description ||\r\n this.source !== other.source ||\r\n this.deprecated !== other.deprecated ||\r\n this.epsg !== other.epsg ||\r\n this.datumId !== other.datumId ||\r\n this.ellipsoidId !== other.ellipsoidId ||\r\n this.unit !== other.unit)\r\n return false;\r\n\r\n if ((this.datum === undefined) !== (other.datum === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.datum && !this.datum.equals(other.datum!))\r\n return false;\r\n\r\n if ((this.ellipsoid === undefined) !== (other.ellipsoid === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.ellipsoid && !this.ellipsoid.equals(other.ellipsoid!))\r\n return false;\r\n\r\n if ((this.projection === undefined) !== (other.projection === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.projection && !this.projection.equals(other.projection!))\r\n return false;\r\n\r\n if ((this.extent === undefined) !== (other.extent === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.extent && !this.extent.equals(other.extent!))\r\n return false;\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Vertical Geographic Coordinate reference System definition\r\n * @public\r\n * @extensions\r\n */\r\nexport interface VerticalCRSProps {\r\n /** Legacy key - preserved for backwards compatibility\r\n * @note You must continue to use one of the supported keys for backward compatibility so that new models can\r\n * still be opened with older versions of itwin.js.\r\n */\r\n id: \"GEOID\" | \"ELLIPSOID\" | \"NGVD29\" | \"NAVD88\" | \"LOCAL_ELLIPSOID\";\r\n /** Dictionary CRS name, e.g. \"EGM96 height\". Takes precedence over [[epsg]] and [[id]] when set.\r\n * @beta */\r\n crsName?: string;\r\n /** EPSG code identifying the vertical CRS. Takes precedence over [[id]] when [[crsName]] is not set.\r\n * @beta */\r\n epsg?: number;\r\n}\r\n/** Vertical Coordinate reference System implementation.\r\n * A VerticalCRS can identify a predefined system by dictionary name or EPSG code while retaining\r\n * one of the five legacy keys for backward compatibility.\r\n * @public\r\n*/\r\nexport class VerticalCRS implements VerticalCRSProps {\r\n /** Vertical CRS Key name. The only supported values are currently \"GEOID\", \"ELLIPSOID\", \"NAVD88\", \"NGVD29\" and \"LOCAL_ELLIPSOID\".\r\n * GEOID indicates elevations are to be interpreted relative to the local Geoid of the dataset. It can also be considered to be Mean Sea Level.\r\n * NAVD88 is the local geoid model for the USA. This vertical datum can only be used if the horizontal portion is based on a\r\n * datum variation of NAD83, NAD27, NSRS2007 and NSRS2011.\r\n * NGVD29 is the former local geoid model for the USA. This vertical datum can only be used if the horizontal portion is based on a\r\n * datum variation of NAD83, NAD27, NSRS2007 and NSRS2011.\r\n * ELLIPSOID indicates that elevations are relative to the surface of the WGS84(or current coincident) ellipsoid.\r\n * LOCAL_ELLIPSOID indicates that elevations are relative to the surface of the local ellipsoid used by the horizontal CRS. It can only\r\n * be used for datums that are not considered coincident vertically with WGS84. Use of this vertical datum is strongly discouraged.\r\n */\r\n public readonly id: \"GEOID\" | \"ELLIPSOID\" | \"NGVD29\" | \"NAVD88\" | \"LOCAL_ELLIPSOID\";\r\n /** Dictionary CRS name, e.g. \"EGM96 height\". Takes precedence over [[epsg]] and [[id]] when set.\r\n * @beta */\r\n public readonly crsName?: string;\r\n /** EPSG code identifying the vertical CRS. Takes precedence over [[id]] when [[crsName]] is not set.\r\n * @beta */\r\n public readonly epsg?: number;\r\n\r\n public constructor(data?: VerticalCRSProps) {\r\n this.id = \"GEOID\";\r\n if (data) {\r\n this.id = data.id;\r\n this.crsName = data.crsName;\r\n this.epsg = data.epsg;\r\n }\r\n }\r\n\r\n /** Creates a Vertical CRS from JSON representation.\r\n * @public */\r\n public static fromJSON(data: VerticalCRSProps): VerticalCRS {\r\n return new VerticalCRS(data);\r\n }\r\n\r\n /** Creates a JSON from the Vertical CRS definition\r\n * @public */\r\n public toJSON(): VerticalCRSProps {\r\n const data: VerticalCRSProps = { id: this.id };\r\n if (this.crsName !== undefined)\r\n data.crsName = this.crsName;\r\n\r\n if (this.epsg !== undefined)\r\n data.epsg = this.epsg;\r\n\r\n return data;\r\n }\r\n\r\n /** Strictly compares the stored properties of two vertical CRS, not their resolved identities.\r\n * @public */\r\n public equals(other: VerticalCRS): boolean {\r\n return this.id === other.id && this.crsName === other.crsName && this.epsg === other.epsg;\r\n }\r\n}\r\n\r\n/** Geographic Coordinate Reference System definition that includes the horizontal and vertical definitions as well as an optional\r\n * additional transformation.\r\n * @see [[GeographicCRS]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GeographicCRSProps {\r\n /** The horizontal portion of the geographic coordinate reference system. */\r\n horizontalCRS?: HorizontalCRSProps;\r\n /** The vertical portion of the geographic coordinate reference system. */\r\n verticalCRS?: VerticalCRSProps;\r\n /** The optional additional transform the geographic coordinate reference system. */\r\n additionalTransform?: AdditionalTransformProps;\r\n}\r\n\r\n/** Geographic Coordinate Reference System implementation. This is the class that indicates the definition of a Geographic\r\n * coordinate reference system comprised of three components: Horizontal and Vertical and an optional additional transform.\r\n * The vertical component (see [[VerticalCRS]]) is the simplest portion containing a simple identifier as a string.\r\n * The optional additional transform of which, currently, only the type Helmert 2D with Z offset [[Helmert2DWithZOffset]] is supported\r\n * defines a transformation of x,y, and z cartesian coordinate of the projection to the final\r\n * Geographic Coordinate Reference System cartesian coordinates.\r\n * The horizontal component contains a list of identification and documentation properties as well as\r\n * defining details possibly including the projection with method and parameters, the definition of the datum, ellipsoid, extent and so on.\r\n * The principle of describing a Geographic CRS is that the definition may be incomplete. The whole set of classes related to geographic\r\n * coordinate reference system classes ([[GeodeticEllipsoid]], [[GeodeticDatum]], [[Projection]], [[GeodeticTransform]], ...) are designed\r\n * so that they can be parsed from incomplete JSON fragments, or produce incomplete JSON fragments such as would be\r\n * generated from a request to a REST API to a server when select OData clauses are used.\r\n * Often GeographicCRS would knowingly be created incomplete but with sufficient information to perform conversion from some\r\n * reprojection engine (the present set of classes do not provide any GeographicCRS conversion).\r\n * For example the following definitions are quite sufficient to request conversion to or from by a reprojection engine:\r\n * { horizontalCRS: {id: \"LL84\"}, verticalCRS: {id:\"GEOID\"}\r\n * or\r\n * { horizontalCRS: {datumId: \"WGS84\", projection: {method: \"None\"}}, verticalCRS: \"ELLIPSOID\"}\r\n * The reprojection engine will use the engine internal dictionary to obtain the details if it can.\r\n * Some definitions will originate from other sources (a parsed WKT for example) and the reprojection engine will require\r\n * all mathematical and operational details to perform any conversion (descriptive information are ignored in the conversion process).\r\n * @note see important detailed explanation in the [[HorizontalCRS]], [[VerticalCRS]] and [[AdditionalTransform]] documentation.\r\n * @note Earth Centered, Earth Fixed coordinate system (ECEF) is a full 3D cartesian system that unambiguously\r\n * expressed coordinates relative to the Earth Center. Since there is no horizontal portion independent from\r\n * the vertical portion this system cannot be represented by a GeographicCRS and remains a separate concept.\r\n * @public\r\n*/\r\nexport class GeographicCRS implements GeographicCRSProps {\r\n /** The horizontal portion of the geographic coordinate reference system. */\r\n public readonly horizontalCRS?: HorizontalCRS;\r\n /** The vertical portion of the geographic coordinate reference system. */\r\n public readonly verticalCRS?: VerticalCRS;\r\n /** The optional additional transform the geographic coordinate reference system. */\r\n public readonly additionalTransform?: AdditionalTransform;\r\n\r\n public constructor(data?: GeographicCRSProps) {\r\n if (data) {\r\n this.horizontalCRS = data.horizontalCRS ? HorizontalCRS.fromJSON(data.horizontalCRS) : undefined;\r\n this.verticalCRS = data.verticalCRS ? VerticalCRS.fromJSON(data.verticalCRS) : undefined;\r\n this.additionalTransform = data.additionalTransform ? AdditionalTransform.fromJSON(data.additionalTransform) : undefined;\r\n }\r\n }\r\n\r\n /** Creates a Geographic CRS from JSON representation.\r\n * @public */\r\n public static fromJSON(data: GeographicCRSProps): GeographicCRS {\r\n return new GeographicCRS(data);\r\n }\r\n\r\n /** Creates a JSON from the Geographic CRS definition\r\n * @public */\r\n public toJSON(): GeographicCRSProps {\r\n const data: GeographicCRSProps = {};\r\n if (this.horizontalCRS)\r\n data.horizontalCRS = this.horizontalCRS.toJSON();\r\n\r\n if (this.verticalCRS)\r\n data.verticalCRS = this.verticalCRS.toJSON();\r\n\r\n if (this.additionalTransform)\r\n data.additionalTransform = this.additionalTransform.toJSON();\r\n\r\n return data;\r\n }\r\n\r\n /** Compares two Geographic CRS. It is a strict compare operation not an equivalence test though\r\n * number compares are applied a minuscule tolerance.\r\n * It takes into account descriptive properties not only mathematical definition properties.\r\n * @public\r\n */\r\n public equals(other: GeographicCRS): boolean {\r\n if ((this.horizontalCRS === undefined) !== (other.horizontalCRS === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.horizontalCRS && !this.horizontalCRS.equals(other.horizontalCRS!))\r\n return false;\r\n\r\n if ((this.verticalCRS === undefined) !== (other.verticalCRS === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.verticalCRS && !this.verticalCRS.equals(other.verticalCRS!))\r\n return false;\r\n\r\n if ((this.additionalTransform === undefined) !== (other.additionalTransform === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.additionalTransform && !this.additionalTransform.equals(other.additionalTransform!))\r\n return false;\r\n\r\n return true;\r\n }\r\n}\r\n\r\n"]}
|
|
@@ -170,16 +170,21 @@ export declare class HorizontalCRS implements HorizontalCRSProps {
|
|
|
170
170
|
* @extensions
|
|
171
171
|
*/
|
|
172
172
|
export interface VerticalCRSProps {
|
|
173
|
-
/**
|
|
174
|
-
* @
|
|
173
|
+
/** Legacy key - preserved for backwards compatibility
|
|
174
|
+
* @note You must continue to use one of the supported keys for backward compatibility so that new models can
|
|
175
|
+
* still be opened with older versions of itwin.js.
|
|
175
176
|
*/
|
|
176
177
|
id: "GEOID" | "ELLIPSOID" | "NGVD29" | "NAVD88" | "LOCAL_ELLIPSOID";
|
|
178
|
+
/** Dictionary CRS name, e.g. "EGM96 height". Takes precedence over [[epsg]] and [[id]] when set.
|
|
179
|
+
* @beta */
|
|
180
|
+
crsName?: string;
|
|
181
|
+
/** EPSG code identifying the vertical CRS. Takes precedence over [[id]] when [[crsName]] is not set.
|
|
182
|
+
* @beta */
|
|
183
|
+
epsg?: number;
|
|
177
184
|
}
|
|
178
185
|
/** Vertical Coordinate reference System implementation.
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
* we expect to support a broader set in the future including, eventually, user defined vertical CRS
|
|
182
|
-
* which will require additional parameters to be added.
|
|
186
|
+
* A VerticalCRS can identify a predefined system by dictionary name or EPSG code while retaining
|
|
187
|
+
* one of the five legacy keys for backward compatibility.
|
|
183
188
|
* @public
|
|
184
189
|
*/
|
|
185
190
|
export declare class VerticalCRS implements VerticalCRSProps {
|
|
@@ -194,6 +199,12 @@ export declare class VerticalCRS implements VerticalCRSProps {
|
|
|
194
199
|
* be used for datums that are not considered coincident vertically with WGS84. Use of this vertical datum is strongly discouraged.
|
|
195
200
|
*/
|
|
196
201
|
readonly id: "GEOID" | "ELLIPSOID" | "NGVD29" | "NAVD88" | "LOCAL_ELLIPSOID";
|
|
202
|
+
/** Dictionary CRS name, e.g. "EGM96 height". Takes precedence over [[epsg]] and [[id]] when set.
|
|
203
|
+
* @beta */
|
|
204
|
+
readonly crsName?: string;
|
|
205
|
+
/** EPSG code identifying the vertical CRS. Takes precedence over [[id]] when [[crsName]] is not set.
|
|
206
|
+
* @beta */
|
|
207
|
+
readonly epsg?: number;
|
|
197
208
|
constructor(data?: VerticalCRSProps);
|
|
198
209
|
/** Creates a Vertical CRS from JSON representation.
|
|
199
210
|
* @public */
|
|
@@ -201,7 +212,7 @@ export declare class VerticalCRS implements VerticalCRSProps {
|
|
|
201
212
|
/** Creates a JSON from the Vertical CRS definition
|
|
202
213
|
* @public */
|
|
203
214
|
toJSON(): VerticalCRSProps;
|
|
204
|
-
/**
|
|
215
|
+
/** Strictly compares the stored properties of two vertical CRS, not their resolved identities.
|
|
205
216
|
* @public */
|
|
206
217
|
equals(other: VerticalCRS): boolean;
|
|
207
218
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoordinateReferenceSystem.d.ts","sourceRoot":"","sources":["../../../src/geometry/CoordinateReferenceSystem.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"CoordinateReferenceSystem.d.ts","sourceRoot":"","sources":["../../../src/geometry/CoordinateReferenceSystem.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtF;;;EAGE;AACF,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,mBAAmB,GAAG,cAAc,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEjG;;;EAGE;AACF,MAAM,WAAW,wBAAwB;IACvC,uGAAuG;IACvG,SAAS,EAAE,mBAAmB,CAAC;IAC/B;;;;+CAI2C;IAC3C,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,wBAAwB;IAClE,8EAA8E;IAC9E,SAAgB,SAAS,EAAE,cAAc,CAAC;IAC1C;;;;+CAI2C;IAC3C,SAAgB,SAAS,EAAE,cAAc,CAAC;gBAEvB,IAAI,CAAC,EAAE,wBAAwB;IAYlD;iBACa;WACC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,GAAG,mBAAmB;IAI3E;iBACa;IACN,MAAM,IAAI,wBAAwB;IAIzC;kBACc;IACP,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO;CAGnD;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,+FAA+F;IAC/F,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gGAAgG;IAChG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B;;MAEE;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,sBAAsB,CAAC;IACnC,yCAAyC;IACzC,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,kDAAkD;IAClD,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,gEAAgE;IAChE,MAAM,CAAC,EAAE,wBAAwB,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,aAAc,YAAW,kBAAkB;IACtD,+FAA+F;IAC/F,SAAgB,EAAE,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB;IAClB,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrC,wCAAwC;IACxC,SAAgB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChC;;OAEG;IACH,SAAgB,UAAU,EAAE,OAAO,CAAC;IACpC,oFAAoF;IACpF,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9B,gGAAgG;IAChG,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjC;;OAEG;IACH,SAAgB,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtC;;MAEE;IACF,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrC;;;MAGE;IACF,SAAgB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9C,yCAAyC;IACzC,SAAgB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChC,kDAAkD;IAClD,SAAgB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxC,gEAAgE;IAChE,SAAgB,MAAM,CAAC,EAAE,mBAAmB,CAAC;gBAE1B,KAAK,CAAC,EAAE,kBAAkB;IAoB7C;iBACa;WACC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa;IAI/D;iBACa;IACN,MAAM,IAAI,kBAAkB;IA4BnC;;kBAEc;IACP,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;CAyC7C;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,EAAE,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,iBAAiB,CAAC;IACpE;eACW;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;eACW;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AACD;;;;EAIE;AACF,qBAAa,WAAY,YAAW,gBAAgB;IAClD;;;;;;;;;MASE;IACF,SAAgB,EAAE,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,iBAAiB,CAAC;IACpF;eACW;IACX,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjC;eACW;IACX,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;gBAEX,IAAI,CAAC,EAAE,gBAAgB;IAS1C;iBACa;WACC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,WAAW;IAI3D;iBACa;IACN,MAAM,IAAI,gBAAgB;IAWjC;kBACc;IACP,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO;CAG3C;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,0EAA0E;IAC1E,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,oFAAoF;IACpF,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;CAChD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BE;AACF,qBAAa,aAAc,YAAW,kBAAkB;IACtD,4EAA4E;IAC5E,SAAgB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9C,0EAA0E;IAC1E,SAAgB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1C,oFAAoF;IACpF,SAAgB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;gBAEvC,IAAI,CAAC,EAAE,kBAAkB;IAQ5C;iBACa;WACC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,GAAG,aAAa;IAI/D;iBACa;IACN,MAAM,IAAI,kBAAkB;IAcnC;;;;OAIG;IACI,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;CAwB7C"}
|
|
@@ -199,10 +199,8 @@ export class HorizontalCRS {
|
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
201
|
/** Vertical Coordinate reference System implementation.
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
* we expect to support a broader set in the future including, eventually, user defined vertical CRS
|
|
205
|
-
* which will require additional parameters to be added.
|
|
202
|
+
* A VerticalCRS can identify a predefined system by dictionary name or EPSG code while retaining
|
|
203
|
+
* one of the five legacy keys for backward compatibility.
|
|
206
204
|
* @public
|
|
207
205
|
*/
|
|
208
206
|
export class VerticalCRS {
|
|
@@ -217,10 +215,19 @@ export class VerticalCRS {
|
|
|
217
215
|
* be used for datums that are not considered coincident vertically with WGS84. Use of this vertical datum is strongly discouraged.
|
|
218
216
|
*/
|
|
219
217
|
id;
|
|
218
|
+
/** Dictionary CRS name, e.g. "EGM96 height". Takes precedence over [[epsg]] and [[id]] when set.
|
|
219
|
+
* @beta */
|
|
220
|
+
crsName;
|
|
221
|
+
/** EPSG code identifying the vertical CRS. Takes precedence over [[id]] when [[crsName]] is not set.
|
|
222
|
+
* @beta */
|
|
223
|
+
epsg;
|
|
220
224
|
constructor(data) {
|
|
221
225
|
this.id = "GEOID";
|
|
222
|
-
if (data)
|
|
226
|
+
if (data) {
|
|
223
227
|
this.id = data.id;
|
|
228
|
+
this.crsName = data.crsName;
|
|
229
|
+
this.epsg = data.epsg;
|
|
230
|
+
}
|
|
224
231
|
}
|
|
225
232
|
/** Creates a Vertical CRS from JSON representation.
|
|
226
233
|
* @public */
|
|
@@ -230,12 +237,17 @@ export class VerticalCRS {
|
|
|
230
237
|
/** Creates a JSON from the Vertical CRS definition
|
|
231
238
|
* @public */
|
|
232
239
|
toJSON() {
|
|
233
|
-
|
|
240
|
+
const data = { id: this.id };
|
|
241
|
+
if (this.crsName !== undefined)
|
|
242
|
+
data.crsName = this.crsName;
|
|
243
|
+
if (this.epsg !== undefined)
|
|
244
|
+
data.epsg = this.epsg;
|
|
245
|
+
return data;
|
|
234
246
|
}
|
|
235
|
-
/**
|
|
247
|
+
/** Strictly compares the stored properties of two vertical CRS, not their resolved identities.
|
|
236
248
|
* @public */
|
|
237
249
|
equals(other) {
|
|
238
|
-
return
|
|
250
|
+
return this.id === other.id && this.crsName === other.crsName && this.epsg === other.epsg;
|
|
239
251
|
}
|
|
240
252
|
}
|
|
241
253
|
/** Geographic Coordinate Reference System implementation. This is the class that indicates the definition of a Geographic
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoordinateReferenceSystem.js","sourceRoot":"","sources":["../../../src/geometry/CoordinateReferenceSystem.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\n/** @packageDocumentation\r\n * @module Geometry\r\n */\r\n// cspell:ignore NAVD, NGVD, NSRS, Helmert\r\n\r\nimport { GeodeticDatum, GeodeticDatumProps } from \"./GeodeticDatum\";\r\nimport { GeodeticEllipsoid, GeodeticEllipsoidProps } from \"./GeodeticEllipsoid\";\r\nimport { Carto2DDegrees, Carto2DDegreesProps, Projection, ProjectionProps } from \"./Projection\";\r\nimport { AdditionalTransform, AdditionalTransformProps } from \"./AdditionalTransform\";\r\n/** This type indicates possible linear and angular units supported.\r\n * @public\r\n * @extensions\r\n*/\r\nexport type UnitType = \"Meter\" | \"InternationalFoot\" | \"USSurveyFoot\" | \"Degree\" | \"Unsupported\";\r\n\r\n/** The extent in latitude, longitude bounds where a horizontal CRS is applicable\r\n * @public\r\n * @extensions\r\n*/\r\nexport interface HorizontalCRSExtentProps {\r\n /** The South West point in latitude and longitude in degrees for the user-defined extent of the CRS */\r\n southWest: Carto2DDegreesProps;\r\n /** The North East point in latitude in longitude in degrees for the user-defined extent of the CRS.\r\n The latitude of the North East must be greater or equal to the latitude of the South West point\r\n It is possible, however, for the longitude of the South West corner to have greater value than the\r\n longitude of the North East point such as when the west longitude is located on the other side\r\n of the -180/180 degree longitude line.*/\r\n northEast: Carto2DDegreesProps;\r\n}\r\n\r\n/** The extent in latitude, longitude bounds where a horizontal CRS is applicable\r\n * @public\r\n */\r\nexport class HorizontalCRSExtent implements HorizontalCRSExtentProps {\r\n /** The latitude minimum and maximum for the user-defined extent of the CRS */\r\n public readonly southWest: Carto2DDegrees;\r\n /** The North East point in latitude in longitude in degrees for the user-defined extent of the CRS.\r\n The latitude of the North East must be greater or equal to the latitude of the South West point\r\n It is possible, however, for the longitude of the South West corner to have greater value than the\r\n longitude of the North East point such as when the west longitude is located on the other side\r\n of the -180/180 degree longitude line.*/\r\n public readonly northEast: Carto2DDegrees;\r\n\r\n public constructor(data?: HorizontalCRSExtentProps) {\r\n if (data) {\r\n this.southWest = Carto2DDegrees.fromJSON(data.southWest);\r\n this.northEast = Carto2DDegrees.fromJSON(data.northEast);\r\n if (this.northEast.latitude < this.southWest.latitude)\r\n this.northEast.latitude = this.southWest.latitude;\r\n } else {\r\n this.southWest = new Carto2DDegrees();\r\n this.northEast = new Carto2DDegrees();\r\n }\r\n }\r\n\r\n /** Creates an extent object from JSON representation.\r\n * @public */\r\n public static fromJSON(data: HorizontalCRSExtentProps): HorizontalCRSExtent {\r\n return new HorizontalCRSExtent(data);\r\n }\r\n\r\n /** Creates a JSON from the Extent definition\r\n * @public */\r\n public toJSON(): HorizontalCRSExtentProps {\r\n return { southWest: this.southWest.toJSON(), northEast: this.northEast.toJSON() };\r\n }\r\n\r\n /** Compares two Extents. It applies a minuscule tolerance to comparing numbers.\r\n * @public */\r\n public equals(other: HorizontalCRSExtent): boolean {\r\n return this.southWest.equals(other.southWest) && this.northEast.equals(other.northEast);\r\n }\r\n}\r\n\r\n/** Horizontal Geographic Coordinate Reference System definition\r\n * @public\r\n * @extensions\r\n */\r\nexport interface HorizontalCRSProps {\r\n /** The identifier of the horizontal CRS as stored in the dictionary or the service database */\r\n id?: string;\r\n /** Used only for user-defined definitions that will typically use a GUID as id. A display name for the CRS that allows\r\n * a human to understand the nature of the definition\r\n */\r\n name?: string;\r\n /** Description */\r\n description?: string;\r\n /** A textual description of the source of the CRS definition. */\r\n source?: string;\r\n /** If true then indicates the definition is deprecated. It should then be used for backward compatibility only.\r\n * If false or undefined then the definition is not deprecated.\r\n */\r\n deprecated?: boolean;\r\n /** The EPSG code of the CRS. If undefined then there is no EPSG code associated. */\r\n epsg?: number;\r\n /** The identifier of the geodetic datum as stored in the dictionary or the service database. */\r\n datumId?: string;\r\n /** The complete definition of the geodetic datum referred to by datumId. It can also be used if the datum is not stored\r\n * in either service or dictionary.\r\n */\r\n datum?: GeodeticDatumProps;\r\n /** The identifier of the geodetic ellipsoid as stored in the dictionary or the service database. This property is exclusive\r\n * of having datumId and datum properties undefined.\r\n */\r\n ellipsoidId?: string;\r\n /** The complete definition of the geodetic datum referred to by datumId. It can also be used if the datum is not stored\r\n * in either service or dictionary\r\n */\r\n ellipsoid?: GeodeticEllipsoidProps;\r\n /** The text indicating the unit used. */\r\n unit?: UnitType;\r\n /** Projection including projection parameters. */\r\n projection?: ProjectionProps;\r\n /** Extent representing the domain of application of the CRS. */\r\n extent?: HorizontalCRSExtentProps;\r\n}\r\n\r\n/** Horizontal Geographic Coordinate reference System implementation.\r\n * An horizontal CRS defines the portion which is horizontal to the Earth surface (within the deformation brought by the projection process).\r\n * There are two major classes of Horizontal Coordinate Reference Systems:\r\n * - The projected CRS which rely on a projection to flatten the coordinate system space into axises using linear\r\n * units (meter, US Survey Feet, ...) relative to some origin.\r\n * - The non projected CRS (also named geographic CRS by EPSG nomenclature) that does\r\n * not require a projection (projection method = None) and horizontal coordinates are expressed\r\n * as longitude and latitude (see [[Cartographic]])\r\n * Horizontal Coordinate Systems rely on a projection to flatten the surface of an ellipsoid (see [[GeodeticEllipsoid]]) which is\r\n * the mathematical model of the Earth surface.\r\n * Explanations in more details of the various concepts can be obtained from other sources including the page on the subject\r\n * on itwinJS.org (see https://www.itwinjs.org/learning/geolocation/?term=coordinate+system).\r\n * A few details are still required to grasp the model. Geographic Coordinate Reference Systems rely on the concept of geodetic datums\r\n * (see [[GeodeticDatum]]) to convert latitude/longitude from one frame of reference to another. Such geodetic datum will bind the ellipsoid\r\n * and possibly define transformation steps required to convert from the currently used geodetic datum to the common datum WGS84\r\n * used for worldwide data (such as most popular imagery data sources). If there are no rules established to convert to WGS84\r\n * or if those rules are secret then the horizontal CRS can be datum-less and must make direct use of the ellipsoid\r\n * to define the earth surface.\r\n * For this purpose either the geodetic datum must be specified using either datumId or datum properties or both. If\r\n * both these values are undefined then it is possible to define the ellipsoid using properties ellipsoidId or ellipsoid or both.\r\n * These two pairs of properties are mutually exclusive with datum related properties having precedence. If a datum or datumId is set then\r\n * ellipsoid properties will automatically be undefined. If datumId or datum is defined then attempts to set ellipsoidId or ellipsoid\r\n * will fail silently, the values remaining undefined. The ellipsoidId will not be a repeat of the ellipsoidId property part of the\r\n * geodetic datum definition.\r\n * @public\r\n */\r\nexport class HorizontalCRS implements HorizontalCRSProps {\r\n /** The identifier of the horizontal CRS as stored in the dictionary or the service database */\r\n public readonly id?: string;\r\n /** Used only for user-defined definitions that will typically use a GUID as id. A display name for the CRS that allows\r\n ** a human to understand the nature of the definition\r\n */\r\n public readonly name?: string;\r\n /** Description */\r\n public readonly description?: string;\r\n /** The source of the CRS definition. */\r\n public readonly source?: string;\r\n /** If true then indicates the definition is deprecated. It should then be used for backward compatibility only.\r\n * If false then the definition is not deprecated. Default is false.\r\n */\r\n public readonly deprecated: boolean;\r\n /** The EPSG code of the CRS. If undefined then there is no EPSG code associated. */\r\n public readonly epsg?: number;\r\n /** The identifier of the geodetic datum as stored in the dictionary or the service database. */\r\n public readonly datumId?: string;\r\n /** The complete definition of the geodetic datum referred to by datumId. It can also be used if the datum is not stored\r\n * in either service or dictionary.\r\n */\r\n public readonly datum?: GeodeticDatum;\r\n\r\n /** The identifier of the geodetic ellipsoid as stored in the dictionary or the service database. This property is exclusive\r\n * of having datumId and datum properties undefined.\r\n */\r\n public readonly ellipsoidId?: string;\r\n /** The complete definition of the geodetic ellipsoid referred to by ellipsoidId. It can also be used if the ellipsoid is not stored\r\n * in either service or dictionary. This property is exclusive\r\n * of having datumId and datum properties undefined.\r\n */\r\n public readonly ellipsoid?: GeodeticEllipsoid;\r\n /** The text indicating the unit used. */\r\n public readonly unit?: UnitType;\r\n /** Projection including projection parameters. */\r\n public readonly projection?: Projection;\r\n /** Extent representing the domain of application of the CRS. */\r\n public readonly extent?: HorizontalCRSExtent;\r\n\r\n public constructor(_data?: HorizontalCRSProps) {\r\n this.deprecated = false;\r\n if (_data) {\r\n this.id = _data.id;\r\n this.description = _data.description;\r\n this.source = _data.source;\r\n this.deprecated = _data.deprecated ?? false;\r\n this.epsg = _data.epsg;\r\n this.datumId = _data.datumId;\r\n this.datum = _data.datum ? GeodeticDatum.fromJSON(_data.datum) : undefined;\r\n if (!this.datumId && !this.datum) {\r\n this.ellipsoidId = _data.ellipsoidId;\r\n this.ellipsoid = _data.ellipsoid ? GeodeticEllipsoid.fromJSON(_data.ellipsoid) : undefined;\r\n }\r\n this.unit = _data.unit;\r\n this.projection = _data.projection ? Projection.fromJSON(_data.projection) : undefined;\r\n this.extent = _data.extent ? HorizontalCRSExtent.fromJSON(_data.extent) : undefined;\r\n }\r\n }\r\n\r\n /** Creates an Horizontal CRS from JSON representation.\r\n * @public */\r\n public static fromJSON(data: HorizontalCRSProps): HorizontalCRS {\r\n return new HorizontalCRS(data);\r\n }\r\n\r\n /** Creates a JSON from the Horizontal CRS definition\r\n * @public */\r\n public toJSON(): HorizontalCRSProps {\r\n const data: HorizontalCRSProps = {};\r\n data.id = this.id;\r\n data.description = this.description;\r\n data.source = this.source;\r\n /* We prefer to use the default undef instead of false value for deprecated in Json */\r\n if (this.deprecated)\r\n data.deprecated = true;\r\n\r\n data.epsg = this.epsg;\r\n data.datumId = this.datumId;\r\n if (this.datum)\r\n data.datum = this.datum.toJSON();\r\n\r\n data.ellipsoidId = this.ellipsoidId;\r\n if (this.ellipsoid)\r\n data.ellipsoid = this.ellipsoid.toJSON();\r\n\r\n data.unit = this.unit;\r\n if (this.projection)\r\n data.projection = this.projection.toJSON();\r\n\r\n if (this.extent)\r\n data.extent = this.extent.toJSON();\r\n\r\n return data;\r\n }\r\n\r\n /** Compares two horizontal CRS. It is not an equivalence test as descriptive properties are also compared\r\n * but number compares are applied a minuscule tolerance.\r\n * @public */\r\n public equals(other: HorizontalCRS): boolean {\r\n if (this.id !== other.id ||\r\n this.description !== other.description ||\r\n this.source !== other.source ||\r\n this.deprecated !== other.deprecated ||\r\n this.epsg !== other.epsg ||\r\n this.datumId !== other.datumId ||\r\n this.ellipsoidId !== other.ellipsoidId ||\r\n this.unit !== other.unit)\r\n return false;\r\n\r\n if ((this.datum === undefined) !== (other.datum === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.datum && !this.datum.equals(other.datum!))\r\n return false;\r\n\r\n if ((this.ellipsoid === undefined) !== (other.ellipsoid === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.ellipsoid && !this.ellipsoid.equals(other.ellipsoid!))\r\n return false;\r\n\r\n if ((this.projection === undefined) !== (other.projection === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.projection && !this.projection.equals(other.projection!))\r\n return false;\r\n\r\n if ((this.extent === undefined) !== (other.extent === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.extent && !this.extent.equals(other.extent!))\r\n return false;\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Vertical Geographic Coordinate reference System definition\r\n * @public\r\n * @extensions\r\n */\r\nexport interface VerticalCRSProps {\r\n /** Vertical CRS Key name.\r\n * @see [[VerticalCRS.id]]\r\n */\r\n id: \"GEOID\" | \"ELLIPSOID\" | \"NGVD29\" | \"NAVD88\" | \"LOCAL_ELLIPSOID\";\r\n}\r\n\r\n/** Vertical Coordinate reference System implementation.\r\n * The VerticalCRS contains currently a single identifier property of string type. Although\r\n * we currently only support five distinct key values \"GEOID\", \"ELLIPSOID\", \"NAVD88\", \"NGVD29\" and \"LOCAL_ELLIPSOID\"\r\n * we expect to support a broader set in the future including, eventually, user defined vertical CRS\r\n * which will require additional parameters to be added.\r\n * @public\r\n*/\r\nexport class VerticalCRS implements VerticalCRSProps {\r\n /** Vertical CRS Key name. The only supported values are currently \"GEOID\", \"ELLIPSOID\", \"NAVD88\", \"NGVD29\" and \"LOCAL_ELLIPSOID\".\r\n * GEOID indicates elevations are to be interpreted relative to the local Geoid of the dataset. It can also be considered to be Mean Sea Level.\r\n * NAVD88 is the local geoid model for the USA. This vertical datum can only be used if the horizontal portion is based on a\r\n * datum variation of NAD83, NAD27, NSRS2007 and NSRS2011.\r\n * NGVD29 is the former local geoid model for the USA. This vertical datum can only be used if the horizontal portion is based on a\r\n * datum variation of NAD83, NAD27, NSRS2007 and NSRS2011.\r\n * ELLIPSOID indicates that elevations are relative to the surface of the WGS84(or current coincident) ellipsoid.\r\n * LOCAL_ELLIPSOID indicates that elevations are relative to the surface of the local ellipsoid used by the horizontal CRS. It can only\r\n * be used for datums that are not considered coincident vertically with WGS84. Use of this vertical datum is strongly discouraged.\r\n */\r\n public readonly id: \"GEOID\" | \"ELLIPSOID\" | \"NGVD29\" | \"NAVD88\" | \"LOCAL_ELLIPSOID\";\r\n\r\n public constructor(data?: VerticalCRSProps) {\r\n this.id = \"GEOID\";\r\n if (data)\r\n this.id = data.id;\r\n }\r\n\r\n /** Creates a Vertical CRS from JSON representation.\r\n * @public */\r\n public static fromJSON(data: VerticalCRSProps): VerticalCRS {\r\n return new VerticalCRS(data);\r\n }\r\n\r\n /** Creates a JSON from the Vertical CRS definition\r\n * @public */\r\n public toJSON(): VerticalCRSProps {\r\n return { id: this.id };\r\n }\r\n\r\n /** Compares two vertical CRS.\r\n * @public */\r\n public equals(other: VerticalCRS): boolean {\r\n return (this.id === other.id);\r\n }\r\n}\r\n\r\n/** Geographic Coordinate Reference System definition that includes the horizontal and vertical definitions as well as an optional\r\n * additional transformation.\r\n * @see [[GeographicCRS]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GeographicCRSProps {\r\n /** The horizontal portion of the geographic coordinate reference system. */\r\n horizontalCRS?: HorizontalCRSProps;\r\n /** The vertical portion of the geographic coordinate reference system. */\r\n verticalCRS?: VerticalCRSProps;\r\n /** The optional additional transform the geographic coordinate reference system. */\r\n additionalTransform?: AdditionalTransformProps;\r\n}\r\n\r\n/** Geographic Coordinate Reference System implementation. This is the class that indicates the definition of a Geographic\r\n * coordinate reference system comprised of three components: Horizontal and Vertical and an optional additional transform.\r\n * The vertical component (see [[VerticalCRS]]) is the simplest portion containing a simple identifier as a string.\r\n * The optional additional transform of which, currently, only the type Helmert 2D with Z offset [[Helmert2DWithZOffset]] is supported\r\n * defines a transformation of x,y, and z cartesian coordinate of the projection to the final\r\n * Geographic Coordinate Reference System cartesian coordinates.\r\n * The horizontal component contains a list of identification and documentation properties as well as\r\n * defining details possibly including the projection with method and parameters, the definition of the datum, ellipsoid, extent and so on.\r\n * The principle of describing a Geographic CRS is that the definition may be incomplete. The whole set of classes related to geographic\r\n * coordinate reference system classes ([[GeodeticEllipsoid]], [[GeodeticDatum]], [[Projection]], [[GeodeticTransform]], ...) are designed\r\n * so that they can be parsed from incomplete JSON fragments, or produce incomplete JSON fragments such as would be\r\n * generated from a request to a REST API to a server when select OData clauses are used.\r\n * Often GeographicCRS would knowingly be created incomplete but with sufficient information to perform conversion from some\r\n * reprojection engine (the present set of classes do not provide any GeographicCRS conversion).\r\n * For example the following definitions are quite sufficient to request conversion to or from by a reprojection engine:\r\n * { horizontalCRS: {id: \"LL84\"}, verticalCRS: {id:\"GEOID\"}\r\n * or\r\n * { horizontalCRS: {datumId: \"WGS84\", projection: {method: \"None\"}}, verticalCRS: \"ELLIPSOID\"}\r\n * The reprojection engine will use the engine internal dictionary to obtain the details if it can.\r\n * Some definitions will originate from other sources (a parsed WKT for example) and the reprojection engine will require\r\n * all mathematical and operational details to perform any conversion (descriptive information are ignored in the conversion process).\r\n * @note see important detailed explanation in the [[HorizontalCRS]], [[VerticalCRS]] and [[AdditionalTransform]] documentation.\r\n * @note Earth Centered, Earth Fixed coordinate system (ECEF) is a full 3D cartesian system that unambiguously\r\n * expressed coordinates relative to the Earth Center. Since there is no horizontal portion independent from\r\n * the vertical portion this system cannot be represented by a GeographicCRS and remains a separate concept.\r\n * @public\r\n*/\r\nexport class GeographicCRS implements GeographicCRSProps {\r\n /** The horizontal portion of the geographic coordinate reference system. */\r\n public readonly horizontalCRS?: HorizontalCRS;\r\n /** The vertical portion of the geographic coordinate reference system. */\r\n public readonly verticalCRS?: VerticalCRS;\r\n /** The optional additional transform the geographic coordinate reference system. */\r\n public readonly additionalTransform?: AdditionalTransform;\r\n\r\n public constructor(data?: GeographicCRSProps) {\r\n if (data) {\r\n this.horizontalCRS = data.horizontalCRS ? HorizontalCRS.fromJSON(data.horizontalCRS) : undefined;\r\n this.verticalCRS = data.verticalCRS ? VerticalCRS.fromJSON(data.verticalCRS) : undefined;\r\n this.additionalTransform = data.additionalTransform ? AdditionalTransform.fromJSON(data.additionalTransform) : undefined;\r\n }\r\n }\r\n\r\n /** Creates a Geographic CRS from JSON representation.\r\n * @public */\r\n public static fromJSON(data: GeographicCRSProps): GeographicCRS {\r\n return new GeographicCRS(data);\r\n }\r\n\r\n /** Creates a JSON from the Geographic CRS definition\r\n * @public */\r\n public toJSON(): GeographicCRSProps {\r\n const data: GeographicCRSProps = {};\r\n if (this.horizontalCRS)\r\n data.horizontalCRS = this.horizontalCRS.toJSON();\r\n\r\n if (this.verticalCRS)\r\n data.verticalCRS = this.verticalCRS.toJSON();\r\n\r\n if (this.additionalTransform)\r\n data.additionalTransform = this.additionalTransform.toJSON();\r\n\r\n return data;\r\n }\r\n\r\n /** Compares two Geographic CRS. It is a strict compare operation not an equivalence test though\r\n * number compares are applied a minuscule tolerance.\r\n * It takes into account descriptive properties not only mathematical definition properties.\r\n * @public\r\n */\r\n public equals(other: GeographicCRS): boolean {\r\n if ((this.horizontalCRS === undefined) !== (other.horizontalCRS === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.horizontalCRS && !this.horizontalCRS.equals(other.horizontalCRS!))\r\n return false;\r\n\r\n if ((this.verticalCRS === undefined) !== (other.verticalCRS === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.verticalCRS && !this.verticalCRS.equals(other.verticalCRS!))\r\n return false;\r\n\r\n if ((this.additionalTransform === undefined) !== (other.additionalTransform === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.additionalTransform && !this.additionalTransform.equals(other.additionalTransform!))\r\n return false;\r\n\r\n return true;\r\n }\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"CoordinateReferenceSystem.js","sourceRoot":"","sources":["../../../src/geometry/CoordinateReferenceSystem.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\n/** @packageDocumentation\r\n * @module Geometry\r\n */\r\n// cspell:ignore NAVD, NGVD, NSRS, Helmert\r\n\r\nimport { GeodeticDatum, GeodeticDatumProps } from \"./GeodeticDatum\";\r\nimport { GeodeticEllipsoid, GeodeticEllipsoidProps } from \"./GeodeticEllipsoid\";\r\nimport { Carto2DDegrees, Carto2DDegreesProps, Projection, ProjectionProps } from \"./Projection\";\r\nimport { AdditionalTransform, AdditionalTransformProps } from \"./AdditionalTransform\";\r\n/** This type indicates possible linear and angular units supported.\r\n * @public\r\n * @extensions\r\n*/\r\nexport type UnitType = \"Meter\" | \"InternationalFoot\" | \"USSurveyFoot\" | \"Degree\" | \"Unsupported\";\r\n\r\n/** The extent in latitude, longitude bounds where a horizontal CRS is applicable\r\n * @public\r\n * @extensions\r\n*/\r\nexport interface HorizontalCRSExtentProps {\r\n /** The South West point in latitude and longitude in degrees for the user-defined extent of the CRS */\r\n southWest: Carto2DDegreesProps;\r\n /** The North East point in latitude in longitude in degrees for the user-defined extent of the CRS.\r\n The latitude of the North East must be greater or equal to the latitude of the South West point\r\n It is possible, however, for the longitude of the South West corner to have greater value than the\r\n longitude of the North East point such as when the west longitude is located on the other side\r\n of the -180/180 degree longitude line.*/\r\n northEast: Carto2DDegreesProps;\r\n}\r\n\r\n/** The extent in latitude, longitude bounds where a horizontal CRS is applicable\r\n * @public\r\n */\r\nexport class HorizontalCRSExtent implements HorizontalCRSExtentProps {\r\n /** The latitude minimum and maximum for the user-defined extent of the CRS */\r\n public readonly southWest: Carto2DDegrees;\r\n /** The North East point in latitude in longitude in degrees for the user-defined extent of the CRS.\r\n The latitude of the North East must be greater or equal to the latitude of the South West point\r\n It is possible, however, for the longitude of the South West corner to have greater value than the\r\n longitude of the North East point such as when the west longitude is located on the other side\r\n of the -180/180 degree longitude line.*/\r\n public readonly northEast: Carto2DDegrees;\r\n\r\n public constructor(data?: HorizontalCRSExtentProps) {\r\n if (data) {\r\n this.southWest = Carto2DDegrees.fromJSON(data.southWest);\r\n this.northEast = Carto2DDegrees.fromJSON(data.northEast);\r\n if (this.northEast.latitude < this.southWest.latitude)\r\n this.northEast.latitude = this.southWest.latitude;\r\n } else {\r\n this.southWest = new Carto2DDegrees();\r\n this.northEast = new Carto2DDegrees();\r\n }\r\n }\r\n\r\n /** Creates an extent object from JSON representation.\r\n * @public */\r\n public static fromJSON(data: HorizontalCRSExtentProps): HorizontalCRSExtent {\r\n return new HorizontalCRSExtent(data);\r\n }\r\n\r\n /** Creates a JSON from the Extent definition\r\n * @public */\r\n public toJSON(): HorizontalCRSExtentProps {\r\n return { southWest: this.southWest.toJSON(), northEast: this.northEast.toJSON() };\r\n }\r\n\r\n /** Compares two Extents. It applies a minuscule tolerance to comparing numbers.\r\n * @public */\r\n public equals(other: HorizontalCRSExtent): boolean {\r\n return this.southWest.equals(other.southWest) && this.northEast.equals(other.northEast);\r\n }\r\n}\r\n\r\n/** Horizontal Geographic Coordinate Reference System definition\r\n * @public\r\n * @extensions\r\n */\r\nexport interface HorizontalCRSProps {\r\n /** The identifier of the horizontal CRS as stored in the dictionary or the service database */\r\n id?: string;\r\n /** Used only for user-defined definitions that will typically use a GUID as id. A display name for the CRS that allows\r\n * a human to understand the nature of the definition\r\n */\r\n name?: string;\r\n /** Description */\r\n description?: string;\r\n /** A textual description of the source of the CRS definition. */\r\n source?: string;\r\n /** If true then indicates the definition is deprecated. It should then be used for backward compatibility only.\r\n * If false or undefined then the definition is not deprecated.\r\n */\r\n deprecated?: boolean;\r\n /** The EPSG code of the CRS. If undefined then there is no EPSG code associated. */\r\n epsg?: number;\r\n /** The identifier of the geodetic datum as stored in the dictionary or the service database. */\r\n datumId?: string;\r\n /** The complete definition of the geodetic datum referred to by datumId. It can also be used if the datum is not stored\r\n * in either service or dictionary.\r\n */\r\n datum?: GeodeticDatumProps;\r\n /** The identifier of the geodetic ellipsoid as stored in the dictionary or the service database. This property is exclusive\r\n * of having datumId and datum properties undefined.\r\n */\r\n ellipsoidId?: string;\r\n /** The complete definition of the geodetic datum referred to by datumId. It can also be used if the datum is not stored\r\n * in either service or dictionary\r\n */\r\n ellipsoid?: GeodeticEllipsoidProps;\r\n /** The text indicating the unit used. */\r\n unit?: UnitType;\r\n /** Projection including projection parameters. */\r\n projection?: ProjectionProps;\r\n /** Extent representing the domain of application of the CRS. */\r\n extent?: HorizontalCRSExtentProps;\r\n}\r\n\r\n/** Horizontal Geographic Coordinate reference System implementation.\r\n * An horizontal CRS defines the portion which is horizontal to the Earth surface (within the deformation brought by the projection process).\r\n * There are two major classes of Horizontal Coordinate Reference Systems:\r\n * - The projected CRS which rely on a projection to flatten the coordinate system space into axises using linear\r\n * units (meter, US Survey Feet, ...) relative to some origin.\r\n * - The non projected CRS (also named geographic CRS by EPSG nomenclature) that does\r\n * not require a projection (projection method = None) and horizontal coordinates are expressed\r\n * as longitude and latitude (see [[Cartographic]])\r\n * Horizontal Coordinate Systems rely on a projection to flatten the surface of an ellipsoid (see [[GeodeticEllipsoid]]) which is\r\n * the mathematical model of the Earth surface.\r\n * Explanations in more details of the various concepts can be obtained from other sources including the page on the subject\r\n * on itwinJS.org (see https://www.itwinjs.org/learning/geolocation/?term=coordinate+system).\r\n * A few details are still required to grasp the model. Geographic Coordinate Reference Systems rely on the concept of geodetic datums\r\n * (see [[GeodeticDatum]]) to convert latitude/longitude from one frame of reference to another. Such geodetic datum will bind the ellipsoid\r\n * and possibly define transformation steps required to convert from the currently used geodetic datum to the common datum WGS84\r\n * used for worldwide data (such as most popular imagery data sources). If there are no rules established to convert to WGS84\r\n * or if those rules are secret then the horizontal CRS can be datum-less and must make direct use of the ellipsoid\r\n * to define the earth surface.\r\n * For this purpose either the geodetic datum must be specified using either datumId or datum properties or both. If\r\n * both these values are undefined then it is possible to define the ellipsoid using properties ellipsoidId or ellipsoid or both.\r\n * These two pairs of properties are mutually exclusive with datum related properties having precedence. If a datum or datumId is set then\r\n * ellipsoid properties will automatically be undefined. If datumId or datum is defined then attempts to set ellipsoidId or ellipsoid\r\n * will fail silently, the values remaining undefined. The ellipsoidId will not be a repeat of the ellipsoidId property part of the\r\n * geodetic datum definition.\r\n * @public\r\n */\r\nexport class HorizontalCRS implements HorizontalCRSProps {\r\n /** The identifier of the horizontal CRS as stored in the dictionary or the service database */\r\n public readonly id?: string;\r\n /** Used only for user-defined definitions that will typically use a GUID as id. A display name for the CRS that allows\r\n ** a human to understand the nature of the definition\r\n */\r\n public readonly name?: string;\r\n /** Description */\r\n public readonly description?: string;\r\n /** The source of the CRS definition. */\r\n public readonly source?: string;\r\n /** If true then indicates the definition is deprecated. It should then be used for backward compatibility only.\r\n * If false then the definition is not deprecated. Default is false.\r\n */\r\n public readonly deprecated: boolean;\r\n /** The EPSG code of the CRS. If undefined then there is no EPSG code associated. */\r\n public readonly epsg?: number;\r\n /** The identifier of the geodetic datum as stored in the dictionary or the service database. */\r\n public readonly datumId?: string;\r\n /** The complete definition of the geodetic datum referred to by datumId. It can also be used if the datum is not stored\r\n * in either service or dictionary.\r\n */\r\n public readonly datum?: GeodeticDatum;\r\n\r\n /** The identifier of the geodetic ellipsoid as stored in the dictionary or the service database. This property is exclusive\r\n * of having datumId and datum properties undefined.\r\n */\r\n public readonly ellipsoidId?: string;\r\n /** The complete definition of the geodetic ellipsoid referred to by ellipsoidId. It can also be used if the ellipsoid is not stored\r\n * in either service or dictionary. This property is exclusive\r\n * of having datumId and datum properties undefined.\r\n */\r\n public readonly ellipsoid?: GeodeticEllipsoid;\r\n /** The text indicating the unit used. */\r\n public readonly unit?: UnitType;\r\n /** Projection including projection parameters. */\r\n public readonly projection?: Projection;\r\n /** Extent representing the domain of application of the CRS. */\r\n public readonly extent?: HorizontalCRSExtent;\r\n\r\n public constructor(_data?: HorizontalCRSProps) {\r\n this.deprecated = false;\r\n if (_data) {\r\n this.id = _data.id;\r\n this.description = _data.description;\r\n this.source = _data.source;\r\n this.deprecated = _data.deprecated ?? false;\r\n this.epsg = _data.epsg;\r\n this.datumId = _data.datumId;\r\n this.datum = _data.datum ? GeodeticDatum.fromJSON(_data.datum) : undefined;\r\n if (!this.datumId && !this.datum) {\r\n this.ellipsoidId = _data.ellipsoidId;\r\n this.ellipsoid = _data.ellipsoid ? GeodeticEllipsoid.fromJSON(_data.ellipsoid) : undefined;\r\n }\r\n this.unit = _data.unit;\r\n this.projection = _data.projection ? Projection.fromJSON(_data.projection) : undefined;\r\n this.extent = _data.extent ? HorizontalCRSExtent.fromJSON(_data.extent) : undefined;\r\n }\r\n }\r\n\r\n /** Creates an Horizontal CRS from JSON representation.\r\n * @public */\r\n public static fromJSON(data: HorizontalCRSProps): HorizontalCRS {\r\n return new HorizontalCRS(data);\r\n }\r\n\r\n /** Creates a JSON from the Horizontal CRS definition\r\n * @public */\r\n public toJSON(): HorizontalCRSProps {\r\n const data: HorizontalCRSProps = {};\r\n data.id = this.id;\r\n data.description = this.description;\r\n data.source = this.source;\r\n /* We prefer to use the default undef instead of false value for deprecated in Json */\r\n if (this.deprecated)\r\n data.deprecated = true;\r\n\r\n data.epsg = this.epsg;\r\n data.datumId = this.datumId;\r\n if (this.datum)\r\n data.datum = this.datum.toJSON();\r\n\r\n data.ellipsoidId = this.ellipsoidId;\r\n if (this.ellipsoid)\r\n data.ellipsoid = this.ellipsoid.toJSON();\r\n\r\n data.unit = this.unit;\r\n if (this.projection)\r\n data.projection = this.projection.toJSON();\r\n\r\n if (this.extent)\r\n data.extent = this.extent.toJSON();\r\n\r\n return data;\r\n }\r\n\r\n /** Compares two horizontal CRS. It is not an equivalence test as descriptive properties are also compared\r\n * but number compares are applied a minuscule tolerance.\r\n * @public */\r\n public equals(other: HorizontalCRS): boolean {\r\n if (this.id !== other.id ||\r\n this.description !== other.description ||\r\n this.source !== other.source ||\r\n this.deprecated !== other.deprecated ||\r\n this.epsg !== other.epsg ||\r\n this.datumId !== other.datumId ||\r\n this.ellipsoidId !== other.ellipsoidId ||\r\n this.unit !== other.unit)\r\n return false;\r\n\r\n if ((this.datum === undefined) !== (other.datum === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.datum && !this.datum.equals(other.datum!))\r\n return false;\r\n\r\n if ((this.ellipsoid === undefined) !== (other.ellipsoid === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.ellipsoid && !this.ellipsoid.equals(other.ellipsoid!))\r\n return false;\r\n\r\n if ((this.projection === undefined) !== (other.projection === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.projection && !this.projection.equals(other.projection!))\r\n return false;\r\n\r\n if ((this.extent === undefined) !== (other.extent === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.extent && !this.extent.equals(other.extent!))\r\n return false;\r\n\r\n return true;\r\n }\r\n}\r\n\r\n/** Vertical Geographic Coordinate reference System definition\r\n * @public\r\n * @extensions\r\n */\r\nexport interface VerticalCRSProps {\r\n /** Legacy key - preserved for backwards compatibility\r\n * @note You must continue to use one of the supported keys for backward compatibility so that new models can\r\n * still be opened with older versions of itwin.js.\r\n */\r\n id: \"GEOID\" | \"ELLIPSOID\" | \"NGVD29\" | \"NAVD88\" | \"LOCAL_ELLIPSOID\";\r\n /** Dictionary CRS name, e.g. \"EGM96 height\". Takes precedence over [[epsg]] and [[id]] when set.\r\n * @beta */\r\n crsName?: string;\r\n /** EPSG code identifying the vertical CRS. Takes precedence over [[id]] when [[crsName]] is not set.\r\n * @beta */\r\n epsg?: number;\r\n}\r\n/** Vertical Coordinate reference System implementation.\r\n * A VerticalCRS can identify a predefined system by dictionary name or EPSG code while retaining\r\n * one of the five legacy keys for backward compatibility.\r\n * @public\r\n*/\r\nexport class VerticalCRS implements VerticalCRSProps {\r\n /** Vertical CRS Key name. The only supported values are currently \"GEOID\", \"ELLIPSOID\", \"NAVD88\", \"NGVD29\" and \"LOCAL_ELLIPSOID\".\r\n * GEOID indicates elevations are to be interpreted relative to the local Geoid of the dataset. It can also be considered to be Mean Sea Level.\r\n * NAVD88 is the local geoid model for the USA. This vertical datum can only be used if the horizontal portion is based on a\r\n * datum variation of NAD83, NAD27, NSRS2007 and NSRS2011.\r\n * NGVD29 is the former local geoid model for the USA. This vertical datum can only be used if the horizontal portion is based on a\r\n * datum variation of NAD83, NAD27, NSRS2007 and NSRS2011.\r\n * ELLIPSOID indicates that elevations are relative to the surface of the WGS84(or current coincident) ellipsoid.\r\n * LOCAL_ELLIPSOID indicates that elevations are relative to the surface of the local ellipsoid used by the horizontal CRS. It can only\r\n * be used for datums that are not considered coincident vertically with WGS84. Use of this vertical datum is strongly discouraged.\r\n */\r\n public readonly id: \"GEOID\" | \"ELLIPSOID\" | \"NGVD29\" | \"NAVD88\" | \"LOCAL_ELLIPSOID\";\r\n /** Dictionary CRS name, e.g. \"EGM96 height\". Takes precedence over [[epsg]] and [[id]] when set.\r\n * @beta */\r\n public readonly crsName?: string;\r\n /** EPSG code identifying the vertical CRS. Takes precedence over [[id]] when [[crsName]] is not set.\r\n * @beta */\r\n public readonly epsg?: number;\r\n\r\n public constructor(data?: VerticalCRSProps) {\r\n this.id = \"GEOID\";\r\n if (data) {\r\n this.id = data.id;\r\n this.crsName = data.crsName;\r\n this.epsg = data.epsg;\r\n }\r\n }\r\n\r\n /** Creates a Vertical CRS from JSON representation.\r\n * @public */\r\n public static fromJSON(data: VerticalCRSProps): VerticalCRS {\r\n return new VerticalCRS(data);\r\n }\r\n\r\n /** Creates a JSON from the Vertical CRS definition\r\n * @public */\r\n public toJSON(): VerticalCRSProps {\r\n const data: VerticalCRSProps = { id: this.id };\r\n if (this.crsName !== undefined)\r\n data.crsName = this.crsName;\r\n\r\n if (this.epsg !== undefined)\r\n data.epsg = this.epsg;\r\n\r\n return data;\r\n }\r\n\r\n /** Strictly compares the stored properties of two vertical CRS, not their resolved identities.\r\n * @public */\r\n public equals(other: VerticalCRS): boolean {\r\n return this.id === other.id && this.crsName === other.crsName && this.epsg === other.epsg;\r\n }\r\n}\r\n\r\n/** Geographic Coordinate Reference System definition that includes the horizontal and vertical definitions as well as an optional\r\n * additional transformation.\r\n * @see [[GeographicCRS]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GeographicCRSProps {\r\n /** The horizontal portion of the geographic coordinate reference system. */\r\n horizontalCRS?: HorizontalCRSProps;\r\n /** The vertical portion of the geographic coordinate reference system. */\r\n verticalCRS?: VerticalCRSProps;\r\n /** The optional additional transform the geographic coordinate reference system. */\r\n additionalTransform?: AdditionalTransformProps;\r\n}\r\n\r\n/** Geographic Coordinate Reference System implementation. This is the class that indicates the definition of a Geographic\r\n * coordinate reference system comprised of three components: Horizontal and Vertical and an optional additional transform.\r\n * The vertical component (see [[VerticalCRS]]) is the simplest portion containing a simple identifier as a string.\r\n * The optional additional transform of which, currently, only the type Helmert 2D with Z offset [[Helmert2DWithZOffset]] is supported\r\n * defines a transformation of x,y, and z cartesian coordinate of the projection to the final\r\n * Geographic Coordinate Reference System cartesian coordinates.\r\n * The horizontal component contains a list of identification and documentation properties as well as\r\n * defining details possibly including the projection with method and parameters, the definition of the datum, ellipsoid, extent and so on.\r\n * The principle of describing a Geographic CRS is that the definition may be incomplete. The whole set of classes related to geographic\r\n * coordinate reference system classes ([[GeodeticEllipsoid]], [[GeodeticDatum]], [[Projection]], [[GeodeticTransform]], ...) are designed\r\n * so that they can be parsed from incomplete JSON fragments, or produce incomplete JSON fragments such as would be\r\n * generated from a request to a REST API to a server when select OData clauses are used.\r\n * Often GeographicCRS would knowingly be created incomplete but with sufficient information to perform conversion from some\r\n * reprojection engine (the present set of classes do not provide any GeographicCRS conversion).\r\n * For example the following definitions are quite sufficient to request conversion to or from by a reprojection engine:\r\n * { horizontalCRS: {id: \"LL84\"}, verticalCRS: {id:\"GEOID\"}\r\n * or\r\n * { horizontalCRS: {datumId: \"WGS84\", projection: {method: \"None\"}}, verticalCRS: \"ELLIPSOID\"}\r\n * The reprojection engine will use the engine internal dictionary to obtain the details if it can.\r\n * Some definitions will originate from other sources (a parsed WKT for example) and the reprojection engine will require\r\n * all mathematical and operational details to perform any conversion (descriptive information are ignored in the conversion process).\r\n * @note see important detailed explanation in the [[HorizontalCRS]], [[VerticalCRS]] and [[AdditionalTransform]] documentation.\r\n * @note Earth Centered, Earth Fixed coordinate system (ECEF) is a full 3D cartesian system that unambiguously\r\n * expressed coordinates relative to the Earth Center. Since there is no horizontal portion independent from\r\n * the vertical portion this system cannot be represented by a GeographicCRS and remains a separate concept.\r\n * @public\r\n*/\r\nexport class GeographicCRS implements GeographicCRSProps {\r\n /** The horizontal portion of the geographic coordinate reference system. */\r\n public readonly horizontalCRS?: HorizontalCRS;\r\n /** The vertical portion of the geographic coordinate reference system. */\r\n public readonly verticalCRS?: VerticalCRS;\r\n /** The optional additional transform the geographic coordinate reference system. */\r\n public readonly additionalTransform?: AdditionalTransform;\r\n\r\n public constructor(data?: GeographicCRSProps) {\r\n if (data) {\r\n this.horizontalCRS = data.horizontalCRS ? HorizontalCRS.fromJSON(data.horizontalCRS) : undefined;\r\n this.verticalCRS = data.verticalCRS ? VerticalCRS.fromJSON(data.verticalCRS) : undefined;\r\n this.additionalTransform = data.additionalTransform ? AdditionalTransform.fromJSON(data.additionalTransform) : undefined;\r\n }\r\n }\r\n\r\n /** Creates a Geographic CRS from JSON representation.\r\n * @public */\r\n public static fromJSON(data: GeographicCRSProps): GeographicCRS {\r\n return new GeographicCRS(data);\r\n }\r\n\r\n /** Creates a JSON from the Geographic CRS definition\r\n * @public */\r\n public toJSON(): GeographicCRSProps {\r\n const data: GeographicCRSProps = {};\r\n if (this.horizontalCRS)\r\n data.horizontalCRS = this.horizontalCRS.toJSON();\r\n\r\n if (this.verticalCRS)\r\n data.verticalCRS = this.verticalCRS.toJSON();\r\n\r\n if (this.additionalTransform)\r\n data.additionalTransform = this.additionalTransform.toJSON();\r\n\r\n return data;\r\n }\r\n\r\n /** Compares two Geographic CRS. It is a strict compare operation not an equivalence test though\r\n * number compares are applied a minuscule tolerance.\r\n * It takes into account descriptive properties not only mathematical definition properties.\r\n * @public\r\n */\r\n public equals(other: GeographicCRS): boolean {\r\n if ((this.horizontalCRS === undefined) !== (other.horizontalCRS === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.horizontalCRS && !this.horizontalCRS.equals(other.horizontalCRS!))\r\n return false;\r\n\r\n if ((this.verticalCRS === undefined) !== (other.verticalCRS === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.verticalCRS && !this.verticalCRS.equals(other.verticalCRS!))\r\n return false;\r\n\r\n if ((this.additionalTransform === undefined) !== (other.additionalTransform === undefined))\r\n return false;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n if (this.additionalTransform && !this.additionalTransform.equals(other.additionalTransform!))\r\n return false;\r\n\r\n return true;\r\n }\r\n}\r\n\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/core-common",
|
|
3
|
-
"version": "5.15.0-dev.
|
|
3
|
+
"version": "5.15.0-dev.7",
|
|
4
4
|
"description": "iTwin.js components common to frontend and backend",
|
|
5
5
|
"main": "lib/cjs/core-common.js",
|
|
6
6
|
"module": "lib/esm/core-common.js",
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"js-base64": "^3.6.1"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
|
-
"@itwin/core-bentley": "5.15.0-dev.
|
|
31
|
-
"@itwin/core-geometry": "5.15.0-dev.
|
|
30
|
+
"@itwin/core-bentley": "5.15.0-dev.7",
|
|
31
|
+
"@itwin/core-geometry": "5.15.0-dev.7"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@itwin/eslint-plugin": "^6.0.0",
|
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
"rimraf": "^6.0.1",
|
|
41
41
|
"typescript": "~5.6.2",
|
|
42
42
|
"vitest": "^4.1.10",
|
|
43
|
-
"@itwin/build-tools": "5.15.0-dev.
|
|
44
|
-
"@itwin/core-
|
|
45
|
-
"@itwin/core-
|
|
43
|
+
"@itwin/build-tools": "5.15.0-dev.7",
|
|
44
|
+
"@itwin/core-geometry": "5.15.0-dev.7",
|
|
45
|
+
"@itwin/core-bentley": "5.15.0-dev.7"
|
|
46
46
|
},
|
|
47
47
|
"scripts": {
|
|
48
48
|
"build": "npm run -s build:cjs && npm run -s build:esm",
|