@developmentseed/deck.gl-geotiff 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +33 -4
  2. package/dist/cog-layer.d.ts +63 -57
  3. package/dist/cog-layer.d.ts.map +1 -1
  4. package/dist/cog-layer.js +116 -85
  5. package/dist/cog-layer.js.map +1 -1
  6. package/dist/geotiff/geotiff.d.ts +5 -43
  7. package/dist/geotiff/geotiff.d.ts.map +1 -1
  8. package/dist/geotiff/geotiff.js +34 -103
  9. package/dist/geotiff/geotiff.js.map +1 -1
  10. package/dist/geotiff/render-pipeline.d.ts +7 -5
  11. package/dist/geotiff/render-pipeline.d.ts.map +1 -1
  12. package/dist/geotiff/render-pipeline.js +152 -49
  13. package/dist/geotiff/render-pipeline.js.map +1 -1
  14. package/dist/geotiff/texture.d.ts +5 -4
  15. package/dist/geotiff/texture.d.ts.map +1 -1
  16. package/dist/geotiff/texture.js +7 -7
  17. package/dist/geotiff/texture.js.map +1 -1
  18. package/dist/geotiff-layer.d.ts +21 -24
  19. package/dist/geotiff-layer.d.ts.map +1 -1
  20. package/dist/geotiff-layer.js +25 -21
  21. package/dist/geotiff-layer.js.map +1 -1
  22. package/dist/geotiff-reprojection.d.ts +5 -18
  23. package/dist/geotiff-reprojection.d.ts.map +1 -1
  24. package/dist/geotiff-reprojection.js +9 -126
  25. package/dist/geotiff-reprojection.js.map +1 -1
  26. package/dist/index.d.ts +3 -10
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +1 -7
  29. package/dist/index.js.map +1 -1
  30. package/dist/proj.d.ts +3 -23
  31. package/dist/proj.d.ts.map +1 -1
  32. package/dist/proj.js +20 -38
  33. package/dist/proj.js.map +1 -1
  34. package/package.json +16 -12
  35. package/dist/cog-tile-matrix-set.d.ts +0 -32
  36. package/dist/cog-tile-matrix-set.d.ts.map +0 -1
  37. package/dist/cog-tile-matrix-set.js +0 -180
  38. package/dist/cog-tile-matrix-set.js.map +0 -1
  39. package/dist/ellipsoids.d.ts +0 -153
  40. package/dist/ellipsoids.d.ts.map +0 -1
  41. package/dist/ellipsoids.js +0 -153
  42. package/dist/ellipsoids.js.map +0 -1
  43. package/dist/geotiff/types.d.ts +0 -34
  44. package/dist/geotiff/types.d.ts.map +0 -1
  45. package/dist/geotiff/types.js +0 -18
  46. package/dist/geotiff/types.js.map +0 -1
@@ -1,10 +1,10 @@
1
+ import { SampleFormat } from "@cogeotiff/core";
1
2
  /**
2
3
  * Infers texture properties from a GeoTIFF image and its associated data.
3
4
  */
4
- export function createTextureProps(image, data, options) {
5
- const ifd = image.getFileDirectory();
6
- const samplesPerPixel = ifd.SamplesPerPixel;
7
- const textureFormat = inferTextureFormat(samplesPerPixel, ifd.BitsPerSample, ifd.SampleFormat);
5
+ export function createTextureProps(geotiff, data, options) {
6
+ const { samplesPerPixel, bitsPerSample, sampleFormat } = geotiff.cachedTags;
7
+ const textureFormat = inferTextureFormat(samplesPerPixel, bitsPerSample, sampleFormat);
8
8
  return {
9
9
  data,
10
10
  format: textureFormat,
@@ -60,11 +60,11 @@ function inferScalarKind(sampleFormat) {
60
60
  }
61
61
  }
62
62
  switch (first) {
63
- case 1:
63
+ case SampleFormat.Uint:
64
64
  return "unorm";
65
- case 2:
65
+ case SampleFormat.Int:
66
66
  return "sint";
67
- case 3:
67
+ case SampleFormat.Float:
68
68
  return "float";
69
69
  default:
70
70
  throw new Error(`Unsupported SampleFormat ${sampleFormat}`);
@@ -1 +1 @@
1
- {"version":3,"file":"texture.js","sourceRoot":"","sources":["../../src/geotiff/texture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"texture.js","sourceRoot":"","sources":["../../src/geotiff/texture.ts"],"names":[],"mappings":"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"}
@@ -1,37 +1,37 @@
1
1
  import type { CompositeLayerProps, UpdateParameters } from "@deck.gl/core";
2
2
  import { CompositeLayer } from "@deck.gl/core";
3
3
  import { RasterLayer } from "@developmentseed/deck.gl-raster";
4
+ import type { DecoderPool, GeoTIFF } from "@developmentseed/geotiff";
4
5
  import type { ReprojectionFns } from "@developmentseed/raster-reproject";
5
- import type { BaseClient, GeoTIFF, Pool } from "geotiff";
6
- import type { GeoKeysParser, ProjectionInfo } from "./proj.js";
7
- import { epsgIoGeoKeyParser } from "./proj.js";
6
+ import type { ProjectionDefinition } from "wkt-parser";
7
+ import type { EpsgResolver } from "./proj.js";
8
+ import { epsgResolver } from "./proj.js";
8
9
  export interface GeoTIFFLayerProps extends CompositeLayerProps {
9
10
  /**
10
11
  * GeoTIFF input.
11
12
  *
12
- * - URL string pointing to a GeoTIFF
13
- * - ArrayBuffer containing the GeoTIFF data
14
- * - Blob containing the GeoTIFF data
15
- * - An instance of GeoTIFF.js's GeoTIFF class
16
- * - An instance of GeoTIFF.js's BaseClient for custom fetching
13
+ * - {@link URL} or `string` pointing to a GeoTIFF
14
+ * - {@link ArrayBuffer} containing the GeoTIFF data
15
+ * - An instance of the {@link GeoTIFF} class.
17
16
  */
18
- geotiff: GeoTIFF | string | ArrayBuffer | Blob | BaseClient;
17
+ geotiff: GeoTIFF | string | URL | ArrayBuffer;
19
18
  /**
20
- * A function callback for parsing GeoTIFF geo keys to a Proj4 compatible
21
- * definition.
19
+ * A function callback for parsing numeric EPSG codes to projection
20
+ * information (as returned by `wkt-parser`).
22
21
  *
23
- * By default, uses epsg.io to resolve EPSG codes found in the GeoTIFF.
24
- * Alternatively, you may want to use `geotiff-geokeys-to-proj4`, which is
25
- * more extensive but adds 1.5MB to your bundle size.
22
+ * The default implementation:
23
+ * - makes a request to epsg.io to resolve EPSG codes found in the GeoTIFF.
24
+ * - caches any previous requests
25
+ * - parses PROJJSON response with `wkt-parser`
26
26
  */
27
- geoKeysParser?: GeoKeysParser;
27
+ epsgResolver?: EpsgResolver;
28
28
  /**
29
- * GeoTIFF.js Pool for decoding image chunks.
29
+ * Decoder pool for decoding image chunks.
30
30
  *
31
- * If none is provided, a default Pool will be created and shared between all
32
- * COGLayer and GeoTIFFLayer instances.
31
+ * If none is provided, a default DecoderPool will be created and shared
32
+ * between all COGLayer and GeoTIFFLayer instances.
33
33
  */
34
- pool?: Pool;
34
+ pool?: DecoderPool;
35
35
  /**
36
36
  * Maximum reprojection error in pixels for mesh refinement.
37
37
  * Lower values create denser meshes with higher accuracy.
@@ -50,12 +50,9 @@ export interface GeoTIFFLayerProps extends CompositeLayerProps {
50
50
  debugOpacity?: number;
51
51
  /**
52
52
  * Called when the GeoTIFF metadata has been loaded and parsed.
53
- *
54
- * @param {GeoTIFF} geotiff
55
- * @param {ProjectionInfo} projection
56
53
  */
57
54
  onGeoTIFFLoad?: (geotiff: GeoTIFF, options: {
58
- projection: ProjectionInfo;
55
+ projection: ProjectionDefinition;
59
56
  /**
60
57
  * Bounds of the image in geographic coordinates (WGS84) [minLon, minLat,
61
58
  * maxLon, maxLat]
@@ -78,7 +75,7 @@ export interface GeoTIFFLayerProps extends CompositeLayerProps {
78
75
  export declare class GeoTIFFLayer extends CompositeLayer<GeoTIFFLayerProps> {
79
76
  static layerName: string;
80
77
  static defaultProps: {
81
- geoKeysParser: typeof epsgIoGeoKeyParser;
78
+ epsgResolver: typeof epsgResolver;
82
79
  };
83
80
  state: {
84
81
  reprojectionFns?: ReprojectionFns;
@@ -1 +1 @@
1
- {"version":3,"file":"geotiff-layer.d.ts","sourceRoot":"","sources":["../src/geotiff-layer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AASzD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D;;;;;;;;OAQG;IACH,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,UAAU,CAAC;IAE5D;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,IAAI,CAAC;IAEZ;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CACd,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;QACP,UAAU,EAAE,cAAc,CAAC;QAC3B;;;WAGG;QACH,gBAAgB,EAAE;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH,KACE,IAAI,CAAC;CACX;AAMD;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,cAAc,CAAC,iBAAiB,CAAC;IACjE,OAAgB,SAAS,SAAkB;IAC3C,OAAgB,YAAY;;MAAgB;IAEpC,KAAK,EAAE;QACb,eAAe,CAAC,EAAE,eAAe,CAAC;QAClC,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAEO,eAAe,IAAI,IAAI;IAIvB,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC;IAe7C,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAsCpC,YAAY;CAsBb"}
1
+ {"version":3,"file":"geotiff-layer.d.ts","sourceRoot":"","sources":["../src/geotiff-layer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEzE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D;;;;;;OAMG;IACH,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,GAAG,GAAG,WAAW,CAAC;IAE9C;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,aAAa,CAAC,EAAE,CACd,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;QACP,UAAU,EAAE,oBAAoB,CAAC;QACjC;;;WAGG;QACH,gBAAgB,EAAE;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH,KACE,IAAI,CAAC;CACX;AAMD;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,cAAc,CAAC,iBAAiB,CAAC;IACjE,OAAgB,SAAS,SAAkB;IAC3C,OAAgB,YAAY;;MAAgB;IAEpC,KAAK,EAAE;QACb,eAAe,CAAC,EAAE,eAAe,CAAC;QAClC,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAEO,eAAe,IAAI,IAAI;IAIvB,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC;IAe7C,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCpC,YAAY;CAsBb"}
@@ -1,11 +1,12 @@
1
1
  import { CompositeLayer } from "@deck.gl/core";
2
2
  import { RasterLayer } from "@developmentseed/deck.gl-raster";
3
3
  import proj4 from "proj4";
4
- import { defaultPool, fetchGeoTIFF, getGeographicBounds, loadRgbImage, } from "./geotiff/geotiff.js";
4
+ import wktParser from "wkt-parser";
5
+ import { fetchGeoTIFF, getGeographicBounds } from "./geotiff/geotiff.js";
5
6
  import { extractGeotiffReprojectors } from "./geotiff-reprojection.js";
6
- import { epsgIoGeoKeyParser } from "./proj.js";
7
+ import { epsgResolver } from "./proj.js";
7
8
  const defaultProps = {
8
- geoKeysParser: epsgIoGeoKeyParser,
9
+ epsgResolver,
9
10
  };
10
11
  /**
11
12
  * GeoTIFFLayer renders a GeoTIFF file from an arbitrary projection.
@@ -32,30 +33,33 @@ export class GeoTIFFLayer extends CompositeLayer {
32
33
  }
33
34
  async _parseGeoTIFF() {
34
35
  const geotiff = await fetchGeoTIFF(this.props.geotiff);
35
- const image = await geotiff.getImage();
36
- const geoKeysParser = this.props.geoKeysParser;
37
- const sourceProjection = await geoKeysParser(image.getGeoKeys());
38
- if (!sourceProjection) {
39
- throw new Error("Could not determine source projection from GeoTIFF geo keys");
40
- }
41
- const converter = proj4(sourceProjection.def, "EPSG:4326");
36
+ const crs = geotiff.crs;
37
+ const sourceProjection = typeof crs === "number"
38
+ ? await this.props.epsgResolver(crs)
39
+ : wktParser(crs);
40
+ // @ts-expect-error proj4 has incomplete types that don't support wkt-parser
41
+ // output
42
+ const converter = proj4(sourceProjection, "EPSG:4326");
42
43
  if (this.props.onGeoTIFFLoad) {
43
- const geographicBounds = getGeographicBounds(image, converter);
44
+ const geographicBounds = getGeographicBounds(geotiff, converter);
44
45
  this.props.onGeoTIFFLoad(geotiff, {
45
46
  projection: sourceProjection,
46
47
  geographicBounds,
47
48
  });
48
49
  }
49
- const reprojectionFns = await extractGeotiffReprojectors(geotiff, sourceProjection.def);
50
- const { texture, height, width } = await loadRgbImage(image, {
51
- pool: this.props.pool || defaultPool(),
52
- });
53
- this.setState({
54
- reprojectionFns,
55
- imageData: texture,
56
- height,
57
- width,
58
- });
50
+ // @ts-expect-error unused variable
51
+ // biome-ignore lint/correctness/noUnusedVariables: not implemented
52
+ const reprojectionFns = await extractGeotiffReprojectors(geotiff, sourceProjection);
53
+ // Our GeoTIFF implementation doesn't currently support reading the full
54
+ // image; it only supports reading tiles.
55
+ throw new Error("Loading GeoTIFF image data not yet implemented");
56
+ // const { texture, height, width } = await loadRgbImage(image);
57
+ // this.setState({
58
+ // reprojectionFns,
59
+ // imageData: texture,
60
+ // height,
61
+ // width,
62
+ // });
59
63
  }
60
64
  renderLayers() {
61
65
  const { reprojectionFns, imageData, height, width } = this.state;
@@ -1 +1 @@
1
- {"version":3,"file":"geotiff-layer.js","sourceRoot":"","sources":["../src/geotiff-layer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"geotiff-layer.js","sourceRoot":"","sources":["../src/geotiff-layer.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,12 @@
1
+ import type { Affine } from "@developmentseed/affine";
2
+ import type { GeoTIFF } from "@developmentseed/geotiff";
1
3
  import type { ReprojectionFns } from "@developmentseed/raster-reproject";
2
- import type { GeoTIFF, GeoTIFFImage } from "geotiff";
3
4
  import type { PROJJSONDefinition } from "proj4/dist/lib/core";
4
5
  import type Projection from "proj4/dist/lib/Proj";
5
- export declare const OGC_84: PROJJSONDefinition;
6
- export declare function extractGeotiffReprojectors(tiff: GeoTIFF, sourceProjection: string | PROJJSONDefinition, outputCrs?: string | PROJJSONDefinition | Projection): Promise<ReprojectionFns>;
7
- export declare function fromGeoTransform(geotransform: [number, number, number, number, number, number]): {
6
+ import type { ProjectionDefinition } from "wkt-parser";
7
+ export declare function extractGeotiffReprojectors(geotiff: GeoTIFF, sourceProjection: string | PROJJSONDefinition | ProjectionDefinition, outputCrs?: string | PROJJSONDefinition | Projection): Promise<ReprojectionFns>;
8
+ export declare function fromAffine(geotransform: Affine): {
8
9
  forwardTransform: (x: number, y: number) => [number, number];
9
10
  inverseTransform: (x: number, y: number) => [number, number];
10
11
  };
11
- /**
12
- * Extract affine geotransform from a GeoTIFF image.
13
- *
14
- * The first `image` must be passed in, as only the top-level IFD contains geo
15
- * keys.
16
- *
17
- * Returns a 6-element array in Python `affine` package ordering:
18
- * [a, b, c, d, e, f] where:
19
- * - x_geo = a * col + b * row + c
20
- * - y_geo = d * col + e * row + f
21
- *
22
- * This is NOT GDAL ordering, which is [c, a, b, f, d, e].
23
- */
24
- export declare function extractGeotransform(image: GeoTIFFImage): [number, number, number, number, number, number];
25
12
  //# sourceMappingURL=geotiff-reprojection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"geotiff-reprojection.d.ts","sourceRoot":"","sources":["../src/geotiff-reprojection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAKzE,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAErD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAElD,eAAO,MAAM,MAAM,EAAE,kBAuEpB,CAAC;AAMF,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,OAAO,EACb,gBAAgB,EAAE,MAAM,GAAG,kBAAkB,EAC7C,SAAS,GAAE,MAAM,GAAG,kBAAkB,GAAG,UAAmB,GAC3D,OAAO,CAAC,eAAe,CAAC,CAmB1B;AAED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC7D;IACD,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7D,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9D,CAOA;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,GAClB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAiClD"}
1
+ {"version":3,"file":"geotiff-reprojection.d.ts","sourceRoot":"","sources":["../src/geotiff-reprojection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAMvD,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,OAAO,EAChB,gBAAgB,EAAE,MAAM,GAAG,kBAAkB,GAAG,oBAAoB,EACpE,SAAS,GAAE,MAAM,GAAG,kBAAkB,GAAG,UAAwB,GAChE,OAAO,CAAC,eAAe,CAAC,CAc1B;AAED,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG;IAChD,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7D,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9D,CAQA"}
@@ -1,89 +1,14 @@
1
- /* eslint-env browser */
2
- import { applyAffine, invertGeoTransform, } from "@developmentseed/raster-reproject/affine";
1
+ import * as affine from "@developmentseed/affine";
3
2
  import proj4 from "proj4";
4
- export const OGC_84 = {
5
- $schema: "https://proj.org/schemas/v0.7/projjson.schema.json",
6
- type: "GeographicCRS",
7
- name: "WGS 84 (CRS84)",
8
- datum_ensemble: {
9
- name: "World Geodetic System 1984 ensemble",
10
- members: [
11
- {
12
- name: "World Geodetic System 1984 (Transit)",
13
- id: { authority: "EPSG", code: 1166 },
14
- },
15
- {
16
- name: "World Geodetic System 1984 (G730)",
17
- id: { authority: "EPSG", code: 1152 },
18
- },
19
- {
20
- name: "World Geodetic System 1984 (G873)",
21
- id: { authority: "EPSG", code: 1153 },
22
- },
23
- {
24
- name: "World Geodetic System 1984 (G1150)",
25
- id: { authority: "EPSG", code: 1154 },
26
- },
27
- {
28
- name: "World Geodetic System 1984 (G1674)",
29
- id: { authority: "EPSG", code: 1155 },
30
- },
31
- {
32
- name: "World Geodetic System 1984 (G1762)",
33
- id: { authority: "EPSG", code: 1156 },
34
- },
35
- {
36
- name: "World Geodetic System 1984 (G2139)",
37
- id: { authority: "EPSG", code: 1309 },
38
- },
39
- ],
40
- ellipsoid: {
41
- name: "WGS 84",
42
- semi_major_axis: 6378137,
43
- inverse_flattening: 298.257223563,
44
- },
45
- accuracy: "2.0",
46
- id: { authority: "EPSG", code: 6326 },
47
- },
48
- coordinate_system: {
49
- subtype: "ellipsoidal",
50
- axis: [
51
- {
52
- name: "Geodetic longitude",
53
- abbreviation: "Lon",
54
- direction: "east",
55
- unit: "degree",
56
- },
57
- {
58
- name: "Geodetic latitude",
59
- abbreviation: "Lat",
60
- direction: "north",
61
- unit: "degree",
62
- },
63
- ],
64
- },
65
- scope: "Not known.",
66
- area: "World.",
67
- bbox: {
68
- south_latitude: -90,
69
- west_longitude: -180,
70
- north_latitude: 90,
71
- east_longitude: 180,
72
- },
73
- // @ts-expect-error - proj4 types are incomplete
74
- id: { authority: "OGC", code: "CRS84" },
75
- };
76
3
  // Derived from existing work here:
77
4
  // https://github.com/developmentseed/lonboard/blob/35a1f3d691604ad9e083bf10a4bfde4158171486/src/cog-tileset/claude-tileset-2d-improved.ts#L141
78
5
  //
79
6
  // TODO: return a RasterReprojector instance, given the IFD and tile of interest?
80
- export async function extractGeotiffReprojectors(tiff, sourceProjection, outputCrs = OGC_84) {
81
- const image = await tiff.getImage();
82
- // Extract geotransform from full-resolution image
83
- // Only the top-level IFD has geo keys, so we'll derive overviews from this
84
- const baseGeotransform = extractGeotransform(image);
7
+ export async function extractGeotiffReprojectors(geotiff, sourceProjection, outputCrs = "EPSG:4326") {
8
+ // @ts-expect-error - proj4 type definitions are incomplete and don't include
9
+ // support for wkt-parser output
85
10
  const converter = proj4(sourceProjection, outputCrs);
86
- const { forwardTransform, inverseTransform } = fromGeoTransform(baseGeotransform);
11
+ const { forwardTransform, inverseTransform } = fromAffine(geotiff.transform);
87
12
  return {
88
13
  forwardTransform,
89
14
  inverseTransform,
@@ -91,53 +16,11 @@ export async function extractGeotiffReprojectors(tiff, sourceProjection, outputC
91
16
  inverseReproject: (x, y) => converter.inverse([x, y], false),
92
17
  };
93
18
  }
94
- export function fromGeoTransform(geotransform) {
95
- const inverseGeotransform = invertGeoTransform(geotransform);
19
+ export function fromAffine(geotransform) {
20
+ const inverseGeotransform = affine.invert(geotransform);
96
21
  return {
97
- forwardTransform: (x, y) => applyAffine(x, y, geotransform),
98
- inverseTransform: (x, y) => applyAffine(x, y, inverseGeotransform),
22
+ forwardTransform: (x, y) => affine.apply(geotransform, x, y),
23
+ inverseTransform: (x, y) => affine.apply(inverseGeotransform, x, y),
99
24
  };
100
25
  }
101
- /**
102
- * Extract affine geotransform from a GeoTIFF image.
103
- *
104
- * The first `image` must be passed in, as only the top-level IFD contains geo
105
- * keys.
106
- *
107
- * Returns a 6-element array in Python `affine` package ordering:
108
- * [a, b, c, d, e, f] where:
109
- * - x_geo = a * col + b * row + c
110
- * - y_geo = d * col + e * row + f
111
- *
112
- * This is NOT GDAL ordering, which is [c, a, b, f, d, e].
113
- */
114
- export function extractGeotransform(image) {
115
- const origin = image.getOrigin();
116
- const resolution = image.getResolution();
117
- // origin: [x, y, z]
118
- // resolution: [x_res, y_res, z_res]
119
- // Check for rotation/skew in the file directory
120
- const fileDirectory = image.getFileDirectory();
121
- const modelTransformation = fileDirectory.ModelTransformation;
122
- let b = 0; // row rotation
123
- let d = 0; // column rotation
124
- if (modelTransformation && modelTransformation.length >= 16) {
125
- // ModelTransformation is a 4x4 matrix in row-major order
126
- // [0 1 2 3 ] [a b 0 c]
127
- // [4 5 6 7 ] = [d e 0 f]
128
- // [8 9 10 11] [0 0 1 0]
129
- // [12 13 14 15] [0 0 0 1]
130
- b = modelTransformation[1];
131
- d = modelTransformation[4];
132
- }
133
- // Return in affine package ordering: [a, b, c, d, e, f]
134
- return [
135
- resolution[0], // a: pixel width
136
- b, // b: row rotation
137
- origin[0], // c: x origin
138
- d, // d: column rotation
139
- resolution[1], // e: pixel height (often negative)
140
- origin[1],
141
- ];
142
- }
143
26
  //# sourceMappingURL=geotiff-reprojection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"geotiff-reprojection.js","sourceRoot":"","sources":["../src/geotiff-reprojection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"geotiff-reprojection.js","sourceRoot":"","sources":["../src/geotiff-reprojection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAGlD,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,mCAAmC;AACnC,+IAA+I;AAC/I,EAAE;AACF,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAAgB,EAChB,gBAAoE,EACpE,YAAsD,WAAW;IAEjE,6EAA6E;IAC7E,gCAAgC;IAChC,MAAM,SAAS,GAAG,KAAK,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE7E,OAAO;QACL,gBAAgB;QAChB,gBAAgB;QAChB,gBAAgB,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CACzC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC;QAClC,gBAAgB,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CACzC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,YAAoB;IAI7C,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACxD,OAAO;QACL,gBAAgB,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CACzC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;QAClC,gBAAgB,EAAE,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CACzC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,EAAE,CAAC,CAAC;KAC1C,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,16 +1,9 @@
1
- export type { COGLayerProps } from "./cog-layer.js";
1
+ export type { COGLayerProps, GetTileDataOptions, MinimalDataT, } from "./cog-layer.js";
2
2
  export { COGLayer } from "./cog-layer.js";
3
- export { parseCOGTileMatrixSet } from "./cog-tile-matrix-set.js";
4
- export { loadRgbImage, parseColormap } from "./geotiff/geotiff.js";
5
3
  export * as texture from "./geotiff/texture.js";
6
- export type { GeoTIFFLayerProps } from "./geotiff-layer.js";
7
- export { GeoTIFFLayer } from "./geotiff-layer.js";
8
- export { extractGeotiffReprojectors, fromGeoTransform, } from "./geotiff-reprojection.js";
9
4
  export type { MosaicLayerProps } from "./mosaic-layer/mosaic-layer.js";
10
5
  export { MosaicLayer } from "./mosaic-layer/mosaic-layer.js";
11
6
  export { type MosaicSource, MosaicTileset2D, } from "./mosaic-layer/mosaic-tileset-2d";
12
- export * as proj from "./proj.js";
13
- export declare const __TEST_EXPORTS: {
14
- metersPerUnit: (parsedCrs: import("proj4").ProjectionDefinition, crsUnit?: import("./proj.js").SupportedCrsUnit) => number;
15
- };
7
+ export type { EpsgResolver } from "./proj.js";
8
+ export { epsgResolver } from "./proj.js";
16
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EACL,KAAK,YAAY,EACjB,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC,eAAO,MAAM,cAAc;;CAAqC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAIhD,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EACL,KAAK,YAAY,EACjB,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -1,12 +1,6 @@
1
1
  export { COGLayer } from "./cog-layer.js";
2
- export { parseCOGTileMatrixSet } from "./cog-tile-matrix-set.js";
3
- export { loadRgbImage, parseColormap } from "./geotiff/geotiff.js";
4
2
  export * as texture from "./geotiff/texture.js";
5
- export { GeoTIFFLayer } from "./geotiff-layer.js";
6
- export { extractGeotiffReprojectors, fromGeoTransform, } from "./geotiff-reprojection.js";
7
3
  export { MosaicLayer } from "./mosaic-layer/mosaic-layer.js";
8
4
  export { MosaicTileset2D, } from "./mosaic-layer/mosaic-tileset-2d";
9
- export * as proj from "./proj.js";
10
- import { __TEST_EXPORTS as cogTileMatrixSetTestExports } from "./cog-tile-matrix-set.js";
11
- export const __TEST_EXPORTS = { ...cogTileMatrixSetTestExports };
5
+ export { epsgResolver } from "./proj.js";
12
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAEL,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,cAAc,IAAI,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAEzF,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,2BAA2B,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAKhD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAEL,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
package/dist/proj.d.ts CHANGED
@@ -1,24 +1,4 @@
1
- import type { ProjectionDefinition } from "proj4";
2
- import type { PROJJSONDefinition } from "proj4/dist/lib/core";
3
- export type SupportedCrsUnit = "m" | "metre" | "meter" | "meters" | "foot" | "US survey foot" | "degree";
4
- export interface ProjectionInfo {
5
- /** Proj4-compatible projection definition (PROJJSON or proj4 string) */
6
- def: string | PROJJSONDefinition;
7
- /** A parsed projection definition */
8
- parsed: ProjectionDefinition;
9
- /** Units of the coordinate system */
10
- coordinatesUnits: SupportedCrsUnit;
11
- }
12
- export type GeoKeysParser = (geoKeys: Record<string, any>) => Promise<ProjectionInfo | null>;
13
- /**
14
- * Get the Projection of a GeoTIFF
15
- *
16
- * The first `image` must be passed in, as only the top-level IFD contains geo
17
- * keys.
18
- */
19
- export declare function epsgIoGeoKeyParser(geoKeys: Record<string, any>): Promise<ProjectionInfo | null>;
20
- /**
21
- * Parse a proj4-accepted input into a ProjectionDefinition
22
- */
23
- export declare function parseCrs(crs: string | PROJJSONDefinition): ProjectionDefinition;
1
+ import type { ProjectionDefinition } from "wkt-parser";
2
+ export type EpsgResolver = (epsg: number) => Promise<ProjectionDefinition>;
3
+ export declare function epsgResolver(epsg: number): Promise<ProjectionDefinition>;
24
4
  //# sourceMappingURL=proj.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"proj.d.ts","sourceRoot":"","sources":["../src/proj.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAElD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,MAAM,gBAAgB,GACxB,GAAG,GACH,OAAO,GACP,OAAO,GACP,QAAQ,GACR,MAAM,GACN,gBAAgB,GAChB,QAAQ,CAAC;AAEb,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAC;IACjC,qCAAqC;IACrC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,qCAAqC;IACrC,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KACzB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;AAEpC;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAgBhC;AAiBD;;GAEG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAC/B,oBAAoB,CAStB"}
1
+ {"version":3,"file":"proj.d.ts","sourceRoot":"","sources":["../src/proj.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAQvD,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAE3E,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,iCAc9C"}
package/dist/proj.js CHANGED
@@ -1,46 +1,28 @@
1
- import proj4 from "proj4";
1
+ import wktParser from "wkt-parser";
2
2
  /**
3
- * Get the Projection of a GeoTIFF
4
- *
5
- * The first `image` must be passed in, as only the top-level IFD contains geo
6
- * keys.
3
+ * A global registry holding parsed projection definitions.
7
4
  */
8
- export async function epsgIoGeoKeyParser(geoKeys) {
9
- const projectionCode = geoKeys.ProjectedCSTypeGeoKey || geoKeys.GeographicTypeGeoKey || null;
10
- const sourceProjection = await getProjjson(projectionCode);
11
- if (!sourceProjection) {
12
- return null;
5
+ const PROJECTION_REGISTRY = new Map();
6
+ export async function epsgResolver(epsg) {
7
+ const key = `EPSG:${epsg}`;
8
+ // TODO: override global proj4 EPSG:4326 definition because it doesn't include
9
+ // semi major axis
10
+ const cachedProj = PROJECTION_REGISTRY.get(key);
11
+ if (cachedProj !== undefined) {
12
+ return cachedProj;
13
13
  }
14
- const parsed = parseCrs(sourceProjection);
15
- return {
16
- def: sourceProjection,
17
- parsed,
18
- coordinatesUnits: parsed.units,
19
- };
14
+ const projjson = await getProjjson(epsg);
15
+ const proj = wktParser(projjson);
16
+ PROJECTION_REGISTRY.set(key, proj);
17
+ return proj;
20
18
  }
21
19
  /** Query epsg.io for the PROJJSON corresponding to the given EPSG code. */
22
- async function getProjjson(projectionCode) {
23
- if (projectionCode === null) {
24
- return null;
20
+ async function getProjjson(epsg) {
21
+ const url = `https://epsg.io/${epsg}.json`;
22
+ const resp = await fetch(url);
23
+ if (!resp.ok) {
24
+ throw new Error(`Failed to fetch PROJJSON from ${url}`);
25
25
  }
26
- const url = `https://epsg.io/${projectionCode}.json`;
27
- const response = await fetch(url);
28
- if (!response.ok) {
29
- throw new Error(`Failed to fetch projection data from ${url}`);
30
- }
31
- const data = await response.json();
32
- return data;
33
- }
34
- /**
35
- * Parse a proj4-accepted input into a ProjectionDefinition
36
- */
37
- export function parseCrs(crs) {
38
- // If you pass proj4.defs a projjson, it doesn't parse it; it just returns the
39
- // input.
40
- //
41
- // Instead, you need to assign it to an alias and then retrieve it.
42
- const key = "__deck.gl-geotiff-internal__";
43
- proj4.defs(key, crs);
44
- return proj4.defs(key);
26
+ return await resp.json();
45
27
  }
46
28
  //# sourceMappingURL=proj.js.map
package/dist/proj.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"proj.js","sourceRoot":"","sources":["../src/proj.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAyB1B;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAA4B;IAE5B,MAAM,cAAc,GAClB,OAAO,CAAC,qBAAqB,IAAI,OAAO,CAAC,oBAAoB,IAAI,IAAI,CAAC;IAExE,MAAM,gBAAgB,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,CAAC;IAE3D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC1C,OAAO;QACL,GAAG,EAAE,gBAAgB;QACrB,MAAM;QACN,gBAAgB,EAAE,MAAM,CAAC,KAAyB;KACnD,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,KAAK,UAAU,WAAW,CAAC,cAA6B;IACtD,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,mBAAmB,cAAc,OAAO,CAAC;IACrD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,wCAAwC,GAAG,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CACtB,GAAgC;IAEhC,8EAA8E;IAC9E,SAAS;IACT,EAAE;IACF,mEAAmE;IAEnE,MAAM,GAAG,GAAG,8BAA8B,CAAC;IAC3C,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"proj.js","sourceRoot":"","sources":["../src/proj.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC;;GAEG;AACH,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAgC,CAAC;AAIpE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,MAAM,GAAG,GAAG,QAAQ,IAAI,EAAE,CAAC;IAC3B,8EAA8E;IAC9E,kBAAkB;IAClB,MAAM,UAAU,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACjC,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAEnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2EAA2E;AAC3E,KAAK,UAAU,WAAW,CAAC,IAAY;IACrC,MAAM,GAAG,GAAG,mBAAmB,IAAI,OAAO,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC"}