@loaders.gl/services 5.0.0-alpha.3

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 (80) hide show
  1. package/LICENSE +52 -0
  2. package/README.md +51 -0
  3. package/dist/arcgis/arcgis-capability-graph.d.ts +48 -0
  4. package/dist/arcgis/arcgis-capability-graph.d.ts.map +1 -0
  5. package/dist/arcgis/arcgis-capability-graph.js +220 -0
  6. package/dist/arcgis/arcgis-capability-graph.js.map +1 -0
  7. package/dist/arcgis/arcgis-feature-server-source-loader.d.ts +94 -0
  8. package/dist/arcgis/arcgis-feature-server-source-loader.d.ts.map +1 -0
  9. package/dist/arcgis/arcgis-feature-server-source-loader.js +228 -0
  10. package/dist/arcgis/arcgis-feature-server-source-loader.js.map +1 -0
  11. package/dist/arcgis/arcgis-image-server-source-loader.d.ts +96 -0
  12. package/dist/arcgis/arcgis-image-server-source-loader.d.ts.map +1 -0
  13. package/dist/arcgis/arcgis-image-server-source-loader.js +143 -0
  14. package/dist/arcgis/arcgis-image-server-source-loader.js.map +1 -0
  15. package/dist/arcgis/arcgis-image-tile-source-loader.d.ts +71 -0
  16. package/dist/arcgis/arcgis-image-tile-source-loader.d.ts.map +1 -0
  17. package/dist/arcgis/arcgis-image-tile-source-loader.js +153 -0
  18. package/dist/arcgis/arcgis-image-tile-source-loader.js.map +1 -0
  19. package/dist/arcgis/arcgis-map-tile-source-loader.d.ts +106 -0
  20. package/dist/arcgis/arcgis-map-tile-source-loader.d.ts.map +1 -0
  21. package/dist/arcgis/arcgis-map-tile-source-loader.js +202 -0
  22. package/dist/arcgis/arcgis-map-tile-source-loader.js.map +1 -0
  23. package/dist/arcgis/arcgis-scene-aggregation.d.ts +34 -0
  24. package/dist/arcgis/arcgis-scene-aggregation.d.ts.map +1 -0
  25. package/dist/arcgis/arcgis-scene-aggregation.js +57 -0
  26. package/dist/arcgis/arcgis-scene-aggregation.js.map +1 -0
  27. package/dist/arcgis/arcgis-scene-server-source-loader.d.ts +112 -0
  28. package/dist/arcgis/arcgis-scene-server-source-loader.d.ts.map +1 -0
  29. package/dist/arcgis/arcgis-scene-server-source-loader.js +157 -0
  30. package/dist/arcgis/arcgis-scene-server-source-loader.js.map +1 -0
  31. package/dist/arcgis/arcgis-server.d.ts +15 -0
  32. package/dist/arcgis/arcgis-server.d.ts.map +1 -0
  33. package/dist/arcgis/arcgis-server.js +41 -0
  34. package/dist/arcgis/arcgis-server.js.map +1 -0
  35. package/dist/arcgis/arcgis-url-utils.d.ts +3 -0
  36. package/dist/arcgis/arcgis-url-utils.d.ts.map +1 -0
  37. package/dist/arcgis/arcgis-url-utils.js +23 -0
  38. package/dist/arcgis/arcgis-url-utils.js.map +1 -0
  39. package/dist/arcgis/arcgis-vector-tile-server-source-loader.d.ts +115 -0
  40. package/dist/arcgis/arcgis-vector-tile-server-source-loader.d.ts.map +1 -0
  41. package/dist/arcgis/arcgis-vector-tile-server-source-loader.js +156 -0
  42. package/dist/arcgis/arcgis-vector-tile-server-source-loader.js.map +1 -0
  43. package/dist/authentication.d.ts +37 -0
  44. package/dist/authentication.d.ts.map +1 -0
  45. package/dist/authentication.js +41 -0
  46. package/dist/authentication.js.map +1 -0
  47. package/dist/bundled.d.ts +2 -0
  48. package/dist/bundled.d.ts.map +1 -0
  49. package/dist/bundled.js +6 -0
  50. package/dist/bundled.js.map +1 -0
  51. package/dist/index.cjs +21614 -0
  52. package/dist/index.cjs.map +6 -0
  53. package/dist/index.d.ts +32 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +24 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/service-registry.d.ts +18 -0
  58. package/dist/service-registry.d.ts.map +1 -0
  59. package/dist/service-registry.js +29 -0
  60. package/dist/service-registry.js.map +1 -0
  61. package/dist/unbundled.d.ts +2 -0
  62. package/dist/unbundled.d.ts.map +1 -0
  63. package/dist/unbundled.js +6 -0
  64. package/dist/unbundled.js.map +1 -0
  65. package/package.json +60 -0
  66. package/src/arcgis/arcgis-capability-graph.ts +295 -0
  67. package/src/arcgis/arcgis-feature-server-source-loader.ts +342 -0
  68. package/src/arcgis/arcgis-image-server-source-loader.ts +241 -0
  69. package/src/arcgis/arcgis-image-tile-source-loader.ts +206 -0
  70. package/src/arcgis/arcgis-map-tile-source-loader.ts +286 -0
  71. package/src/arcgis/arcgis-scene-aggregation.ts +90 -0
  72. package/src/arcgis/arcgis-scene-server-source-loader.ts +258 -0
  73. package/src/arcgis/arcgis-server.ts +61 -0
  74. package/src/arcgis/arcgis-url-utils.ts +26 -0
  75. package/src/arcgis/arcgis-vector-tile-server-source-loader.ts +233 -0
  76. package/src/authentication.ts +83 -0
  77. package/src/bundled.ts +6 -0
  78. package/src/index.ts +99 -0
  79. package/src/service-registry.ts +43 -0
  80. package/src/unbundled.ts +6 -0
@@ -0,0 +1,228 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { convertFeaturesToWKBArrowTable, convertGeojsonToBinaryFeatureCollection } from '@loaders.gl/gis';
5
+ import { DataSource } from '@loaders.gl/loader-utils';
6
+ import { buildArcGISResourceURL } from "./arcgis-url-utils.js";
7
+ /**
8
+ * @see https://developers.arcgis.com/rest/services-reference/enterprise/feature-service.htm
9
+ */
10
+ export const ArcGISFeatureServerSourceLoader = {
11
+ dataType: null,
12
+ batchType: null,
13
+ name: 'ArcGISFeatureServer',
14
+ id: 'arcgis-feature-server',
15
+ module: 'services',
16
+ version: '0.0.0',
17
+ extensions: [],
18
+ mimeTypes: [],
19
+ type: 'arcgis-feature-server',
20
+ fromUrl: true,
21
+ fromBlob: false,
22
+ options: {
23
+ url: undefined,
24
+ 'arcgis-feature-server': {}
25
+ },
26
+ defaultOptions: {
27
+ url: undefined,
28
+ 'arcgis-feature-server': {}
29
+ },
30
+ testURL: (url) => url.toLowerCase().includes('featureserver'),
31
+ createDataSource: (url, options, coreApi) => new ArcGISVectorSource(url, options, coreApi)
32
+ };
33
+ /**
34
+ * ArcGIS FeatureServer
35
+ * Note - exports a big API, that could be exposed here if there is a use case
36
+ * @see https://developers.arcgis.com/rest/services-reference/enterprise/feature-service.htm
37
+ */
38
+ export class ArcGISVectorSource extends DataSource {
39
+ /** Cached ArcGIS FeatureServer metadata request. */
40
+ formatSpecificMetadata = null;
41
+ constructor(url, options, coreApi) {
42
+ super(url, options, ArcGISFeatureServerSourceLoader.defaultOptions, coreApi);
43
+ }
44
+ /** Returns a schema inferred from ArcGIS FeatureServer metadata fields. */
45
+ async getSchema() {
46
+ const metadata = await this.getFormatSpecificMetadata();
47
+ return parseArcGISFeatureServerSchema(metadata);
48
+ }
49
+ /** Returns normalized VectorSource metadata. */
50
+ async getMetadata(options = {}) {
51
+ // Wait for raw metadata to load
52
+ const formatSpecificMetadata = await this.getFormatSpecificMetadata();
53
+ const metadata = parseArcGISFeatureServerMetadata(formatSpecificMetadata);
54
+ // Only add the big blob of source metadata if explicitly requested
55
+ if (options.formatSpecificMetadata) {
56
+ metadata.formatSpecificMetadata = formatSpecificMetadata;
57
+ }
58
+ return metadata;
59
+ }
60
+ /** Requests features from the ArcGIS FeatureServer query endpoint. */
61
+ async getFeatures(parameters) {
62
+ const url = this.getFeaturesURL(parameters);
63
+ const response = await this.fetch(url, parameters.signal ? { signal: parameters.signal } : undefined);
64
+ await this.checkResponse(response);
65
+ const geoJsonTable = parseGeoJSONTable(await response.json());
66
+ const format = parameters.format || 'arrow';
67
+ switch (format) {
68
+ case 'binary':
69
+ return convertGeojsonToBinaryFeatureCollection(geoJsonTable.features);
70
+ case 'geojson':
71
+ return geoJsonTable;
72
+ case 'arrow':
73
+ default:
74
+ return convertFeaturesToWKBArrowTable(geoJsonTable.features);
75
+ }
76
+ }
77
+ /** Requests the raw ArcGIS FeatureServer metadata document. */
78
+ async _getFormatSpecificMetadata() {
79
+ // PJSON is formatted by a bit slower than JSON
80
+ const url = this.metadataURL();
81
+ const response = await this.fetch(url);
82
+ await this.checkResponse(response);
83
+ return await response.json();
84
+ }
85
+ /** Loads and caches the raw ArcGIS FeatureServer metadata. */
86
+ async getFormatSpecificMetadata() {
87
+ this.formatSpecificMetadata ||= this._getFormatSpecificMetadata();
88
+ return await this.formatSpecificMetadata;
89
+ }
90
+ /** Builds a metadata URL for the ArcGIS FeatureServer endpoint. */
91
+ metadataURL(options) {
92
+ return this.getUrl('', { f: 'pjson', ...options?.parameters });
93
+ }
94
+ /** Builds a query URL from generic vector source parameters. */
95
+ getFeaturesURL(parameters) {
96
+ const defaultParameters = this.options['arcgis-feature-server']?.queryParameters || {};
97
+ const spatialReference = normalizeArcGISSpatialReference(parameters.crs) || 4326;
98
+ const queryParameters = {
99
+ returnGeometry: true,
100
+ where: '1=1',
101
+ outFields: '*',
102
+ outSR: spatialReference,
103
+ inSR: spatialReference,
104
+ f: 'geojson',
105
+ ...defaultParameters
106
+ };
107
+ if (parameters.boundingBox) {
108
+ queryParameters.geometry = [
109
+ parameters.boundingBox[0][0],
110
+ parameters.boundingBox[0][1],
111
+ parameters.boundingBox[1][0],
112
+ parameters.boundingBox[1][1]
113
+ ].join(',');
114
+ queryParameters.geometryType = 'esriGeometryEnvelope';
115
+ queryParameters.spatialRel ||= 'esriSpatialRelIntersects';
116
+ }
117
+ const layer = Array.isArray(parameters.layers) ? parameters.layers[0] : parameters.layers;
118
+ const isLayerEndpoint = /\/FeatureServer\/\d+\/?(?:\?|$)/i.test(this.url);
119
+ const resourcePath = isLayerEndpoint || !layer ? 'query' : `${layer}/query`;
120
+ return this.getUrl(resourcePath, queryParameters);
121
+ }
122
+ /** Builds an ArcGIS FeatureServer URL. */
123
+ getUrl(path, options, extra) {
124
+ return buildArcGISResourceURL(this.url, path, { ...options, ...extra });
125
+ }
126
+ /** Checks an ArcGIS FeatureServer response. */
127
+ async checkResponse(response) {
128
+ if (!response.ok) {
129
+ throw new Error(response.statusText || `ArcGIS FeatureServer request failed: ${response.status}`);
130
+ }
131
+ }
132
+ }
133
+ function parseArcGISFeatureServerMetadata(json) {
134
+ const layers = [];
135
+ for (const layer of json.layers || []) {
136
+ const extent = layer.extent;
137
+ const spatialReference = layer.spatialReference || extent?.spatialReference;
138
+ layers.push({
139
+ name: layer.id === undefined ? layer.name : String(layer.id),
140
+ title: layer.name,
141
+ crs: getArcGISCoordinateReferenceSystems(spatialReference),
142
+ boundingBox: normalizeArcGISExtent(extent)
143
+ });
144
+ }
145
+ if (!layers.length && (json.id !== undefined || json.name)) {
146
+ const extent = json.extent;
147
+ layers.push({
148
+ name: json.id === undefined ? json.name : String(json.id),
149
+ title: json.name,
150
+ crs: getArcGISCoordinateReferenceSystems(json.spatialReference || extent?.spatialReference),
151
+ boundingBox: normalizeArcGISExtent(extent)
152
+ });
153
+ }
154
+ return {
155
+ // version: json.currentVersion || '',
156
+ title: json.serviceDescription || '',
157
+ name: json.serviceDescription || '',
158
+ abstract: json.description || '',
159
+ keywords: [],
160
+ // attrribution: json.copyrightText || ''.
161
+ // crs: 'EPSG:4326',
162
+ layers
163
+ };
164
+ }
165
+ /** Normalizes an ArcGIS spatial reference to a one-element CRS list. */
166
+ function getArcGISCoordinateReferenceSystems(spatialReference) {
167
+ const wellKnownIdentifier = spatialReference?.latestWkid || spatialReference?.wkid;
168
+ return wellKnownIdentifier ? [`EPSG:${wellKnownIdentifier}`] : undefined;
169
+ }
170
+ /** Normalizes an ArcGIS extent to the loaders.gl two-corner shape. */
171
+ function normalizeArcGISExtent(extent) {
172
+ return extent && [extent.xmin, extent.ymin, extent.xmax, extent.ymax].every(Number.isFinite)
173
+ ? [
174
+ [extent.xmin, extent.ymin],
175
+ [extent.xmax, extent.ymax]
176
+ ]
177
+ : undefined;
178
+ }
179
+ /** Normalizes EPSG-prefixed CRS strings to ArcGIS WKID values. */
180
+ function normalizeArcGISSpatialReference(spatialReference) {
181
+ if (typeof spatialReference === 'string') {
182
+ const match = /^EPSG:(\d+)$/i.exec(spatialReference);
183
+ if (match) {
184
+ return match[1];
185
+ }
186
+ }
187
+ return spatialReference;
188
+ }
189
+ /** Builds a schema from ArcGIS FeatureServer metadata fields. */
190
+ function parseArcGISFeatureServerSchema(json) {
191
+ const fields = Array.isArray(json.fields)
192
+ ? json.fields.map((field) => ({
193
+ name: field.name,
194
+ type: getSchemaTypeFromArcGISFieldType(field.type),
195
+ nullable: field.nullable
196
+ }))
197
+ : [];
198
+ return { metadata: {}, fields };
199
+ }
200
+ /** Maps common ArcGIS field types to loaders.gl schema type strings. */
201
+ function getSchemaTypeFromArcGISFieldType(type) {
202
+ switch (type) {
203
+ case 'esriFieldTypeDouble':
204
+ return 'float64';
205
+ case 'esriFieldTypeSingle':
206
+ return 'float32';
207
+ case 'esriFieldTypeInteger':
208
+ case 'esriFieldTypeSmallInteger':
209
+ case 'esriFieldTypeOID':
210
+ return 'int32';
211
+ case 'esriFieldTypeDate':
212
+ return 'timestamp-millisecond';
213
+ default:
214
+ return 'utf8';
215
+ }
216
+ }
217
+ /** Parses a GeoJSON FeatureCollection into the loaders.gl GeoJSON table shape. */
218
+ function parseGeoJSONTable(json) {
219
+ if (json?.type === 'FeatureCollection' && Array.isArray(json.features)) {
220
+ return {
221
+ shape: 'geojson-table',
222
+ type: 'FeatureCollection',
223
+ features: json.features
224
+ };
225
+ }
226
+ throw new Error('ArcGIS FeatureServer query did not return a GeoJSON FeatureCollection');
227
+ }
228
+ //# sourceMappingURL=arcgis-feature-server-source-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arcgis-feature-server-source-loader.js","sourceRoot":"","sources":["../../src/arcgis/arcgis-feature-server-source-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import type { ImageType } from '@loaders.gl/images';
2
+ import type { CoreAPI, DataSourceOptions, ImageSourceMetadata, GetImageParameters } from '@loaders.gl/loader-utils';
3
+ import { DataSource, ImageSource } from '@loaders.gl/loader-utils';
4
+ import type { LERCData } from '@loaders.gl/lerc';
5
+ /** Options for the ArcGIS ImageServer source. */
6
+ export type ArcGISImageSourceLoaderProps = DataSourceOptions & {
7
+ 'arcgis-image-server'?: {
8
+ /** Default ArcGIS exportImage request parameters. */
9
+ exportImageParameters?: Partial<ArcGISExportImageParameters>;
10
+ };
11
+ };
12
+ /** Parameters for ArcGIS ImageServer exportImage requests. */
13
+ export type ArcGISExportImageParameters = {
14
+ /** Bounding box of the requested image. */
15
+ bbox: [number, number, number, number];
16
+ /** Spatial reference of the supplied bbox. */
17
+ bboxSR?: string | number;
18
+ /** Pixel width of returned image. */
19
+ width: number;
20
+ /** Pixel height of returned image. */
21
+ height: number;
22
+ /** Spatial reference of the returned image. */
23
+ imageSR?: string | number;
24
+ /** Requested image format. */
25
+ format?: 'jpgpng' | 'png' | 'png8' | 'png24' | 'jpg' | 'bmp' | 'gif' | 'tiff' | 'png32' | 'lerc';
26
+ /** Requested pixel type. */
27
+ pixelType?: 'U1' | 'U2' | 'U4' | 'U8' | 'S8' | 'U16' | 'S16' | 'U32' | 'S32' | 'F32' | 'F64';
28
+ /** NoData pixel value. */
29
+ noData?: string | number;
30
+ /** NoData interpretation mode. */
31
+ noDataInterpretation?: 'esriNoDataMatchAny' | 'esriNoDataMatchAll';
32
+ /** Resampling interpolation. */
33
+ interpolation?: string;
34
+ /** Compression type. */
35
+ compression?: string;
36
+ /** Compression quality. */
37
+ compressionQuality?: number;
38
+ /** Band ids to export. */
39
+ bandIds?: string | number[];
40
+ /** Mosaic rule JSON string or object. */
41
+ mosaicRule?: string | Record<string, unknown>;
42
+ /** Rendering rule JSON string or object. */
43
+ renderingRule?: string | Record<string, unknown>;
44
+ /** ArcGIS response format. */
45
+ f?: 'image' | 'json' | 'pjson';
46
+ };
47
+ export declare const ArcGISImageServerSourceLoader: {
48
+ readonly dataType: ArcGISImageSource;
49
+ readonly batchType: never;
50
+ readonly name: "ArcGISImageServer";
51
+ readonly id: "arcgis-image-server";
52
+ readonly module: "services";
53
+ readonly version: "0.0.0";
54
+ readonly extensions: [];
55
+ readonly mimeTypes: [];
56
+ readonly type: "arcgis-image-server";
57
+ readonly fromUrl: true;
58
+ readonly fromBlob: false;
59
+ readonly options: {
60
+ readonly 'arcgis-image-server': {};
61
+ };
62
+ readonly defaultOptions: {
63
+ readonly 'arcgis-image-server': {};
64
+ };
65
+ readonly testURL: (url: string) => boolean;
66
+ readonly createDataSource: (url: string, props: ArcGISImageSourceLoaderProps, coreApi?: CoreAPI) => ArcGISImageSource;
67
+ };
68
+ /**
69
+ * ArcGIS ImageServer
70
+ * Note - exports a big API, that could be exposed here if there is a use case
71
+ * @see https://developers.arcgis.com/rest/services-reference/enterprise/image-service.htm
72
+ */
73
+ export declare class ArcGISImageSource extends DataSource<string, ArcGISImageSourceLoaderProps> implements ImageSource {
74
+ constructor(url: string, props: ArcGISImageSourceLoaderProps, coreApi?: CoreAPI);
75
+ /** Returns normalized ImageSource metadata. */
76
+ getMetadata(): Promise<ImageSourceMetadata>;
77
+ /** Requests an image from generic ImageSource parameters. */
78
+ getImage(parameters: GetImageParameters): Promise<ImageType>;
79
+ /** Requests the ArcGIS ImageServer metadata document. */
80
+ metadata(): Promise<unknown>;
81
+ /** Requests an exported image from the ArcGIS ImageServer endpoint. */
82
+ exportImage(options: ArcGISExportImageParameters, signal?: AbortSignal): Promise<ImageType>;
83
+ /** Requests an analytical LERC raster from the ArcGIS ImageServer endpoint. */
84
+ exportRaster(options: ArcGISExportImageParameters, signal?: AbortSignal): Promise<LERCData>;
85
+ /** Builds a metadata URL for the ArcGIS ImageServer endpoint. */
86
+ metadataURL(options?: {
87
+ parameters?: Record<string, unknown>;
88
+ }): string;
89
+ /** Builds an exportImage URL for the ArcGIS ImageServer endpoint. */
90
+ exportImageURL(options: ArcGISExportImageParameters): string;
91
+ /** Builds an ArcGIS ImageServer URL. */
92
+ protected getUrl(path: string, options: Record<string, unknown>, extra?: Record<string, unknown>): string;
93
+ /** Checks an ArcGIS ImageServer response. */
94
+ protected checkResponse(response: Response): Promise<void>;
95
+ }
96
+ //# sourceMappingURL=arcgis-image-server-source-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arcgis-image-server-source-loader.d.ts","sourceRoot":"","sources":["../../src/arcgis/arcgis-image-server-source-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EACV,OAAO,EAEP,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAC,UAAU,EAAE,WAAW,EAAC,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAI/C,iDAAiD;AACjD,MAAM,MAAM,4BAA4B,GAAG,iBAAiB,GAAG;IAC7D,qBAAqB,CAAC,EAAE;QACtB,qDAAqD;QACrD,qBAAqB,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC;KAC9D,CAAC;CACH,CAAC;AAEF,8DAA8D;AAC9D,MAAM,MAAM,2BAA2B,GAAG;IACxC,2CAA2C;IAC3C,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,8BAA8B;IAC9B,MAAM,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACjG,4BAA4B;IAC5B,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IAC7F,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,kCAAkC;IAClC,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,oBAAoB,CAAC;IACnE,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0BAA0B;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,8BAA8B;IAC9B,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,6BAA6B;uBACX,iBAAiB;wBAC3B,KAAK;;;;;;;;;;;;;;;;4BAuBT,MAAM,KAAG,OAAO;qCAExB,MAAM,SACJ,4BAA4B,YACzB,OAAO,KAChB,iBAAiB;CAC8B,CAAC;AAErD;;;;GAIG;AACH,qBAAa,iBACX,SAAQ,UAAU,CAAC,MAAM,EAAE,4BAA4B,CACvD,YAAW,WAAW;gBAEV,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,4BAA4B,EAAE,OAAO,CAAC,EAAE,OAAO;IAI/E,+CAA+C;IACzC,WAAW,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAIjD,6DAA6D;IACvD,QAAQ,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC;IAclE,yDAAyD;IACnD,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAMlC,uEAAuE;IACjE,WAAW,CACf,OAAO,EAAE,2BAA2B,EACpC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,CAAC;IAOrB,+EAA+E;IACzE,YAAY,CAChB,OAAO,EAAE,2BAA2B,EACpC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,QAAQ,CAAC;IAapB,iEAAiE;IACjE,WAAW,CAAC,OAAO,CAAC,EAAE;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAC,GAAG,MAAM;IAIrE,qEAAqE;IACrE,cAAc,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM;IAW5D,wCAAwC;IACxC,SAAS,CAAC,MAAM,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM;IAIT,6CAA6C;cAC7B,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAOjE"}
@@ -0,0 +1,143 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { ImageLoader } from '@loaders.gl/images';
5
+ import { DataSource } from '@loaders.gl/loader-utils';
6
+ import { LERCLoader } from '@loaders.gl/lerc';
7
+ import { buildArcGISResourceURL } from "./arcgis-url-utils.js";
8
+ export const ArcGISImageServerSourceLoader = {
9
+ dataType: null,
10
+ batchType: null,
11
+ name: 'ArcGISImageServer',
12
+ id: 'arcgis-image-server',
13
+ module: 'services',
14
+ version: '0.0.0',
15
+ extensions: [],
16
+ mimeTypes: [],
17
+ type: 'arcgis-image-server',
18
+ fromUrl: true,
19
+ fromBlob: false,
20
+ options: {
21
+ 'arcgis-image-server': {
22
+ // TODO - add options here
23
+ }
24
+ },
25
+ defaultOptions: {
26
+ 'arcgis-image-server': {
27
+ // TODO - add options here
28
+ }
29
+ },
30
+ testURL: (url) => url.toLowerCase().includes('imageserver'),
31
+ createDataSource: (url, props, coreApi) => new ArcGISImageSource(url, props, coreApi)
32
+ };
33
+ /**
34
+ * ArcGIS ImageServer
35
+ * Note - exports a big API, that could be exposed here if there is a use case
36
+ * @see https://developers.arcgis.com/rest/services-reference/enterprise/image-service.htm
37
+ */
38
+ export class ArcGISImageSource extends DataSource {
39
+ constructor(url, props, coreApi) {
40
+ super(url, props, ArcGISImageServerSourceLoader.defaultOptions, coreApi);
41
+ }
42
+ /** Returns normalized ImageSource metadata. */
43
+ async getMetadata() {
44
+ return normalizeArcGISImageServerMetadata(await this.metadata());
45
+ }
46
+ /** Requests an image from generic ImageSource parameters. */
47
+ async getImage(parameters) {
48
+ const { boundingBox, bbox, width, height, crs, format, signal } = parameters;
49
+ const spatialReference = normalizeArcGISSpatialReference(crs) || '4326';
50
+ const imageParameters = {
51
+ bbox: boundingBox ? [...boundingBox[0], ...boundingBox[1]] : bbox,
52
+ bboxSR: spatialReference,
53
+ imageSR: spatialReference,
54
+ width,
55
+ height,
56
+ format: format === 'image/png' ? 'png' : undefined
57
+ };
58
+ return await this.exportImage(imageParameters, signal);
59
+ }
60
+ /** Requests the ArcGIS ImageServer metadata document. */
61
+ async metadata() {
62
+ const response = await this.fetch(this.metadataURL());
63
+ await this.checkResponse(response);
64
+ return await response.json();
65
+ }
66
+ /** Requests an exported image from the ArcGIS ImageServer endpoint. */
67
+ async exportImage(options, signal) {
68
+ const response = await this.fetch(this.exportImageURL(options), signal ? { signal } : undefined);
69
+ await this.checkResponse(response);
70
+ const arrayBuffer = await response.arrayBuffer();
71
+ return (await this.coreApi.parse(arrayBuffer, ImageLoader, this.loadOptions));
72
+ }
73
+ /** Requests an analytical LERC raster from the ArcGIS ImageServer endpoint. */
74
+ async exportRaster(options, signal) {
75
+ const response = await this.fetch(this.exportImageURL({ ...options, format: 'lerc' }), signal ? { signal } : undefined);
76
+ await this.checkResponse(response);
77
+ return (await this.coreApi.parse(await response.arrayBuffer(), LERCLoader, this.loadOptions));
78
+ }
79
+ /** Builds a metadata URL for the ArcGIS ImageServer endpoint. */
80
+ metadataURL(options) {
81
+ return this.getUrl('', { f: 'pjson', ...options?.parameters });
82
+ }
83
+ /** Builds an exportImage URL for the ArcGIS ImageServer endpoint. */
84
+ exportImageURL(options) {
85
+ const defaultParameters = this.options['arcgis-image-server']?.exportImageParameters || {};
86
+ const { width, height, ...parameters } = { ...defaultParameters, ...options };
87
+ return this.getUrl('exportImage', {
88
+ ...parameters,
89
+ bbox: parameters.bbox,
90
+ size: [width, height],
91
+ f: parameters.f || 'image'
92
+ });
93
+ }
94
+ /** Builds an ArcGIS ImageServer URL. */
95
+ getUrl(path, options, extra) {
96
+ return buildArcGISResourceURL(this.url, path, { ...options, ...extra });
97
+ }
98
+ /** Checks an ArcGIS ImageServer response. */
99
+ async checkResponse(response) {
100
+ if (!response.ok) {
101
+ throw new Error(response.statusText || `ArcGIS ImageServer request failed: ${response.status}`);
102
+ }
103
+ }
104
+ }
105
+ /** Normalizes EPSG-prefixed CRS strings to ArcGIS WKID values. */
106
+ function normalizeArcGISSpatialReference(spatialReference) {
107
+ if (typeof spatialReference === 'string') {
108
+ const match = /^EPSG:(\d+)$/i.exec(spatialReference);
109
+ if (match) {
110
+ return match[1];
111
+ }
112
+ }
113
+ return spatialReference;
114
+ }
115
+ /** Normalizes ArcGIS ImageServer metadata to the generic ImageSource metadata shape. */
116
+ function normalizeArcGISImageServerMetadata(metadata) {
117
+ const arcgisMetadata = metadata;
118
+ const extent = arcgisMetadata.fullExtent || arcgisMetadata.extent;
119
+ const spatialReference = arcgisMetadata.spatialReference || extent?.spatialReference;
120
+ const wellKnownIdentifier = spatialReference?.latestWkid || spatialReference?.wkid;
121
+ const boundingBox = extent && [extent.xmin, extent.ymin, extent.xmax, extent.ymax].every(Number.isFinite)
122
+ ? [
123
+ [extent.xmin, extent.ymin],
124
+ [extent.xmax, extent.ymax]
125
+ ]
126
+ : undefined;
127
+ const name = arcgisMetadata.name || arcgisMetadata.serviceDescription || '';
128
+ return {
129
+ name,
130
+ title: name,
131
+ abstract: arcgisMetadata.description || arcgisMetadata.serviceDescription || '',
132
+ keywords: Array.isArray(arcgisMetadata.keywords) ? arcgisMetadata.keywords : [],
133
+ layers: [
134
+ {
135
+ name,
136
+ title: name,
137
+ crs: wellKnownIdentifier ? [`EPSG:${wellKnownIdentifier}`] : undefined,
138
+ boundingBox
139
+ }
140
+ ]
141
+ };
142
+ }
143
+ //# sourceMappingURL=arcgis-image-server-source-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arcgis-image-server-source-loader.js","sourceRoot":"","sources":["../../src/arcgis/arcgis-image-server-source-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import type { ImageType } from '@loaders.gl/images';
2
+ import type { CoreAPI, DataSourceOptions, GetTileDataParameters, GetTileParameters, TileSource, TileSourceMetadata } from '@loaders.gl/loader-utils';
3
+ import { DataSource } from '@loaders.gl/loader-utils';
4
+ import type { LERCData } from '@loaders.gl/lerc';
5
+ /** Options for the ArcGIS ImageServer tile source. */
6
+ export type ArcGISImageTileSourceLoaderOptions = DataSourceOptions & {
7
+ 'arcgis-image-server-tiles'?: {
8
+ /** Tile size used for exportImage requests. */
9
+ tileSize?: number;
10
+ /** Optional service URL pool for simple request distribution. */
11
+ urls?: string[];
12
+ /** Additional exportImage parameters. */
13
+ parameters?: Record<string, string | number | boolean>;
14
+ /** Response format, using LERC for analytical raster tiles. */
15
+ format?: 'png32' | 'lerc';
16
+ };
17
+ };
18
+ /** A tile source that renders ArcGIS ImageServer exports as deck.gl tiles. */
19
+ export declare class ArcGISImageTileSource extends DataSource<string, ArcGISImageTileSourceLoaderOptions> implements TileSource {
20
+ /** MIME type represented by the tile response. */
21
+ readonly mimeType: string;
22
+ /** Cached ImageServer metadata. */
23
+ private _metadata;
24
+ /** In-flight metadata request shared by concurrent callers. */
25
+ private _metadataPromise;
26
+ /** Parameters applied to subsequent export requests. */
27
+ private _runtimeParameters;
28
+ /** Creates an ArcGIS ImageServer tile source. */
29
+ constructor(url: string, options?: ArcGISImageTileSourceLoaderOptions, coreApi?: CoreAPI);
30
+ /** Returns normalized ImageServer metadata. */
31
+ getMetadata(): Promise<TileSourceMetadata>;
32
+ /** Fetches one ImageServer export tile. */
33
+ getTile(parameters: GetTileParameters, signal?: AbortSignal): Promise<ImageType | LERCData | null>;
34
+ /** Fetches a tile using the deck.gl-compatible request shape. */
35
+ getTileData(parameters: GetTileDataParameters): Promise<ImageType | LERCData | null>;
36
+ /** Updates parameters applied to subsequent ImageServer export requests. */
37
+ updateParameters(parameters: Record<string, string | number | boolean>): void;
38
+ /** Builds an ImageServer exportImage URL for one web-mercator tile. */
39
+ getTileURL(parameters: GetTileParameters, tileSize?: number): string;
40
+ /** Fetches the ImageServer metadata document. */
41
+ private _loadMetadata;
42
+ /** Returns cached metadata and shares a single request among concurrent callers. */
43
+ private _getMetadata;
44
+ /** Selects a service endpoint for a tile using a stable URL-pool mapping. */
45
+ private getServiceURL;
46
+ /** Returns the response format after applying configured and runtime overrides. */
47
+ private _getResponseFormat;
48
+ }
49
+ /** Source loader for ArcGIS ImageServer export tiles. */
50
+ export declare const ArcGISImageTileSourceLoader: {
51
+ readonly dataType: ArcGISImageTileSource;
52
+ readonly batchType: never;
53
+ readonly name: "ArcGIS ImageServer tiles";
54
+ readonly id: "arcgis-image-server-tiles";
55
+ readonly module: "services";
56
+ readonly version: "0.0.0";
57
+ readonly extensions: [];
58
+ readonly mimeTypes: [];
59
+ readonly type: "arcgis-image-server-tiles";
60
+ readonly fromUrl: true;
61
+ readonly fromBlob: false;
62
+ readonly options: {
63
+ readonly 'arcgis-image-server-tiles': {};
64
+ };
65
+ readonly defaultOptions: {
66
+ readonly 'arcgis-image-server-tiles': {};
67
+ };
68
+ readonly testURL: (url: string) => boolean;
69
+ readonly createDataSource: (url: string, options?: ArcGISImageTileSourceLoaderOptions, coreApi?: CoreAPI) => ArcGISImageTileSource;
70
+ };
71
+ //# sourceMappingURL=arcgis-image-tile-source-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arcgis-image-tile-source-loader.d.ts","sourceRoot":"","sources":["../../src/arcgis/arcgis-image-tile-source-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EACV,OAAO,EACP,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EAEjB,UAAU,EACV,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAC,UAAU,EAAC,MAAM,0BAA0B,CAAC;AACpD,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAG/C,sDAAsD;AACtD,MAAM,MAAM,kCAAkC,GAAG,iBAAiB,GAAG;IACnE,2BAA2B,CAAC,EAAE;QAC5B,+CAA+C;QAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,iEAAiE;QACjE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,yCAAyC;QACzC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;QACvD,+DAA+D;QAC/D,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;KAC3B,CAAC;CACH,CAAC;AAEF,8EAA8E;AAC9E,qBAAa,qBACX,SAAQ,UAAU,CAAC,MAAM,EAAE,kCAAkC,CAC7D,YAAW,UAAU;IAErB,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,mCAAmC;IACnC,OAAO,CAAC,SAAS,CAAoB;IACrC,+DAA+D;IAC/D,OAAO,CAAC,gBAAgB,CAA6B;IACrD,wDAAwD;IACxD,OAAO,CAAC,kBAAkB,CAAiD;IAE3E,iDAAiD;gBACrC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,kCAAuC,EAAE,OAAO,CAAC,EAAE,OAAO;IAM5F,+CAA+C;IACzC,WAAW,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAuBhD,2CAA2C;IACrC,OAAO,CACX,UAAU,EAAE,iBAAiB,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC;IAevC,iEAAiE;IAC3D,WAAW,CAAC,UAAU,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC;IAI1F,4EAA4E;IAC5E,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI;IAI7E,uEAAuE;IACvE,UAAU,CAAC,UAAU,EAAE,iBAAiB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAuBpE,iDAAiD;YACnC,aAAa;IAU3B,oFAAoF;YACtE,YAAY;IAc1B,6EAA6E;IAC7E,OAAO,CAAC,aAAa;IAKrB,mFAAmF;IACnF,OAAO,CAAC,kBAAkB;CAK3B;AAED,yDAAyD;AACzD,eAAO,MAAM,2BAA2B;uBACT,qBAAqB;wBAC/B,KAAK;;;;;;;;;;;;;;;;4BAYT,MAAM,KAAG,OAAO;qCAExB,MAAM,YACF,kCAAkC,YACjC,OAAO;CAEmC,CAAC"}