geoai 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -19
- package/README.md +77 -3
- package/geoai.js +167 -2
- package/index.d.ts +92 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,24 +7,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.0.5] - 2026-07-15
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- WMS map provider with OGC GetMap support (EPSG:3857 bbox, WMS 1.1.1 / 1.3.0)
|
|
14
|
+
- `examples/06-wms-quickstart` — NRW orthophotos (`nw_dop_rgb`), draw-to-detect, NRW geocoder
|
|
15
|
+
- Interactive TMS and WMS providers in `live-examples-nextjs` task demos
|
|
16
|
+
- WMS documentation (`wms.mdx`), map-providers table update, and 17 WMS tests (including pipeline inference)
|
|
17
|
+
- Project roadmap (`_docs4devs/ROADMAP.md`) for use-case guides and quantization pipeline backlog
|
|
18
|
+
|
|
10
19
|
### Changed
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
|
|
20
|
+
- `live-examples-nextjs` pins `geoai` to local `build/` for WMS/TMS provider development
|
|
21
|
+
|
|
22
|
+
## [1.0.4] - 2026-07-11
|
|
14
23
|
|
|
15
24
|
### Added
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
- Result layer type selector for better visualization control
|
|
25
|
+
- TMS map provider with `{z}/{x}/{y}` URL templates and WebMercator/TMS tile schemes
|
|
26
|
+
- `examples/05-tms-quickstart` and TMS / serving-raster-tiles documentation
|
|
19
27
|
|
|
20
28
|
### Fixed
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
29
|
+
- `dts-bundle-generator` config for ESM package type (`build:types` in CI)
|
|
30
|
+
- CI test stability: Geobase tile mocks, ONNX cache cleanup, and zero-shot test isolation
|
|
31
|
+
- Test gist uploads no longer log errors when GitHub credentials are missing or invalid
|
|
24
32
|
|
|
25
|
-
###
|
|
26
|
-
-
|
|
27
|
-
|
|
33
|
+
### Changed
|
|
34
|
+
- Gist uploads in tests are opt-in via `GEOAI_SAVE_GISTS=1`
|
|
35
|
+
|
|
36
|
+
## [1.0.3] - 2025-08-28
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
- Landuse classification vectorisation bug fix
|
|
28
40
|
|
|
29
41
|
## [1.0.0-rc.1] - 2024-01-XX
|
|
30
42
|
|
|
@@ -125,12 +137,6 @@ To migrate from the old package:
|
|
|
125
137
|
|
|
126
138
|
## [1.0.1] - 2025-08-28
|
|
127
139
|
|
|
128
|
-
###
|
|
140
|
+
### Changed
|
|
129
141
|
- Removed OpenCV.js dependency across all AI models for improved performance and reduced bundle size.
|
|
130
142
|
|
|
131
|
-
|
|
132
|
-
## [1.0.3] - 2025-08-28
|
|
133
|
-
|
|
134
|
-
### Release Candidate
|
|
135
|
-
- Landuse classification vectorisation bug fix
|
|
136
|
-
|
package/README.md
CHANGED
|
@@ -40,12 +40,12 @@ You can also use GeoAI directly in the browser via CDN:
|
|
|
40
40
|
|
|
41
41
|
#### Unpkg CDN
|
|
42
42
|
```html
|
|
43
|
-
<script src="https://unpkg.com/geoai@1.0.
|
|
43
|
+
<script src="https://unpkg.com/geoai@1.0.5/geoai.js"></script>
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
#### jsDelivr CDN
|
|
47
47
|
```html
|
|
48
|
-
<script src="https://cdn.jsdelivr.net/npm/geoai@1.0.
|
|
48
|
+
<script src="https://cdn.jsdelivr.net/npm/geoai@1.0.5/geoai.min.js"></script>
|
|
49
49
|
```
|
|
50
50
|
|
|
51
51
|
When using CDN, the library is available globally as `geoai`.
|
|
@@ -133,7 +133,7 @@ function MyComponent() {
|
|
|
133
133
|
## Features
|
|
134
134
|
|
|
135
135
|
- **Multiple AI Tasks**: Object detection, segmentation, classification, and more
|
|
136
|
-
- **Map Provider Support**: Geobase, Mapbox, ESRI, and Google Maps
|
|
136
|
+
- **Map Provider Support**: Geobase, Mapbox, ESRI, TMS, and Google Maps
|
|
137
137
|
- **React Integration**: Hooks for easy React integration
|
|
138
138
|
- **TypeScript Support**: Full TypeScript definitions
|
|
139
139
|
- **Web Worker Support**: Run AI models in background threads
|
|
@@ -158,10 +158,84 @@ function MyComponent() {
|
|
|
158
158
|
|
|
159
159
|
For more see the [supported tasks](https://docs.geobase.app/geoai/supported-tasks)
|
|
160
160
|
|
|
161
|
+
## Map Providers
|
|
162
|
+
|
|
163
|
+
GeoAI.js supports multiple map tile providers:
|
|
164
|
+
|
|
165
|
+
### TMS (Tile Map Service)
|
|
166
|
+
TMS is a tile-based map specification that uses a bottom-left origin coordinate system. Perfect for custom tile servers and OpenAerialMap.
|
|
167
|
+
|
|
168
|
+
```javascript
|
|
169
|
+
// Option 1: Using URL template with placeholders (recommended)
|
|
170
|
+
const pipeline = await geoai.pipeline([{ task: "object-detection" }], {
|
|
171
|
+
provider: "tms",
|
|
172
|
+
baseUrl: "https://tile.example.com/tiles/{z}/{x}/{y}.png",
|
|
173
|
+
apiKey: "your-api-key", // optional
|
|
174
|
+
tileSize: 256, // optional, defaults to 256
|
|
175
|
+
attribution: "Custom TMS Provider", // optional
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
// Option 2: Using base URL (legacy format, still supported)
|
|
179
|
+
const pipeline = await geoai.pipeline([{ task: "object-detection" }], {
|
|
180
|
+
provider: "tms",
|
|
181
|
+
baseUrl: "https://tile.example.com/tiles",
|
|
182
|
+
extension: "png", // optional, defaults to "png"
|
|
183
|
+
apiKey: "your-api-key", // optional
|
|
184
|
+
tileSize: 256, // optional, defaults to 256
|
|
185
|
+
attribution: "Custom TMS Provider", // optional
|
|
186
|
+
});
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### ESRI
|
|
190
|
+
ESRI World Imagery - no API key required.
|
|
191
|
+
|
|
192
|
+
```javascript
|
|
193
|
+
const pipeline = await geoai.pipeline([{ task: "object-detection" }], {
|
|
194
|
+
provider: "esri",
|
|
195
|
+
});
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Mapbox
|
|
199
|
+
Requires a Mapbox API key.
|
|
200
|
+
|
|
201
|
+
```javascript
|
|
202
|
+
const pipeline = await geoai.pipeline([{ task: "object-detection" }], {
|
|
203
|
+
provider: "mapbox",
|
|
204
|
+
apiKey: "your-mapbox-api-key",
|
|
205
|
+
style: "mapbox://styles/mapbox/satellite-v9",
|
|
206
|
+
});
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Geobase
|
|
210
|
+
Requires Geobase project credentials.
|
|
211
|
+
|
|
212
|
+
```javascript
|
|
213
|
+
const pipeline = await geoai.pipeline([{ task: "object-detection" }], {
|
|
214
|
+
provider: "geobase",
|
|
215
|
+
projectRef: "your-project-ref",
|
|
216
|
+
apikey: "your-api-key",
|
|
217
|
+
cogImagery: "https://path-to-your-cog.tif",
|
|
218
|
+
});
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## Talk
|
|
222
|
+
|
|
223
|
+
**[Bringing Earth Observation AI to the Browser with WebGPU](talks/lightning-talk-webgpu-geoai.md)** — lightning talk at Big Data from Space 2025 (Decision Labs).
|
|
224
|
+
|
|
225
|
+
<div align="center">
|
|
226
|
+
<a href="https://geobase-docs.s3.amazonaws.com/geobase-ai-assets/talks/lightning-talk-webgpu-geoai.pdf">
|
|
227
|
+
<img src="https://geobase-docs.s3.amazonaws.com/geobase-ai-assets/talks/geoaijs.png" alt="GeoAI.js talk preview" width="480">
|
|
228
|
+
</a>
|
|
229
|
+
</div>
|
|
230
|
+
|
|
231
|
+
- [Slides (PDF)](https://geobase-docs.s3.amazonaws.com/geobase-ai-assets/talks/lightning-talk-webgpu-geoai.pdf)
|
|
232
|
+
- [Slide source (Marp)](talks/lightning-talk-webgpu-geoai.md)
|
|
233
|
+
|
|
161
234
|
## Links
|
|
162
235
|
|
|
163
236
|
- **Documentation**: [docs.geobase.app/geoai](https://docs.geobase.app/geoai) - Comprehensive documentation, examples, and API reference
|
|
164
237
|
- **Live Examples**: [docs.geobase.app/geoai-live](https://docs.geobase.app/geoai-live) - Interactive examples and demos
|
|
238
|
+
- **Roadmap**: [_docs4devs/ROADMAP.md](_docs4devs/ROADMAP.md) - Planned docs, quantization pipeline, and related backlog
|
|
165
239
|
- **Community**: [GitHub Discussions](https://github.com/decision-labs/geoai.js/discussions) - Ask questions, share ideas, and connect with other developers
|
|
166
240
|
- **Code**: [GitHub Repository](https://github.com/decision-labs/geoai.js) - Source code and contributions
|
|
167
241
|
- **Issues**: [GitHub Issues](https://github.com/decision-labs/geoai.js/issues) - Report bugs and request features
|
package/geoai.js
CHANGED
|
@@ -390,7 +390,7 @@ const postProcessYoloOutput = (model_outputs, pixel_values, rawImage, id2label)
|
|
|
390
390
|
return model_output;
|
|
391
391
|
};
|
|
392
392
|
const parametersChanged = (instance, model_id, providerParams, modelParams) => {
|
|
393
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
393
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
394
394
|
if (instance.model_id !== model_id) {
|
|
395
395
|
return true;
|
|
396
396
|
}
|
|
@@ -415,6 +415,16 @@ const parametersChanged = (instance, model_id, providerParams, modelParams) => {
|
|
|
415
415
|
return true;
|
|
416
416
|
}
|
|
417
417
|
break;
|
|
418
|
+
case "tms":
|
|
419
|
+
if (((_h = instance.providerParams) == null ? void 0 : _h.baseUrl) !== (providerParams == null ? void 0 : providerParams.baseUrl)) {
|
|
420
|
+
return true;
|
|
421
|
+
}
|
|
422
|
+
break;
|
|
423
|
+
case "wms":
|
|
424
|
+
if (((_i = instance.providerParams) == null ? void 0 : _i.baseUrl) !== (providerParams == null ? void 0 : providerParams.baseUrl) || ((_j = instance.providerParams) == null ? void 0 : _j.layers) !== (providerParams == null ? void 0 : providerParams.layers) || ((_k = instance.providerParams) == null ? void 0 : _k.version) !== (providerParams == null ? void 0 : providerParams.version) || ((_l = instance.providerParams) == null ? void 0 : _l.crs) !== (providerParams == null ? void 0 : providerParams.crs)) {
|
|
425
|
+
return true;
|
|
426
|
+
}
|
|
427
|
+
break;
|
|
418
428
|
}
|
|
419
429
|
if (modelParams) {
|
|
420
430
|
const instanceModelParams = instance.modelParams || {};
|
|
@@ -984,6 +994,7 @@ var ErrorType = /* @__PURE__ */ ((ErrorType2) => {
|
|
|
984
994
|
ErrorType2["MaximumTileCountExceeded"] = "MaximumTileCountExceeded";
|
|
985
995
|
ErrorType2["UnknownTask"] = "UnknownTask";
|
|
986
996
|
ErrorType2["MissingInputField"] = "MissingInputField";
|
|
997
|
+
ErrorType2["ImageLoadFailed"] = "ImageLoadFailed";
|
|
987
998
|
return ErrorType2;
|
|
988
999
|
})(ErrorType || {});
|
|
989
1000
|
const ErrorCodes = {
|
|
@@ -998,7 +1009,11 @@ const ErrorCodes = {
|
|
|
998
1009
|
[
|
|
999
1010
|
"MissingInputField"
|
|
1000
1011
|
/* MissingInputField */
|
|
1001
|
-
]: 1003
|
|
1012
|
+
]: 1003,
|
|
1013
|
+
[
|
|
1014
|
+
"ImageLoadFailed"
|
|
1015
|
+
/* ImageLoadFailed */
|
|
1016
|
+
]: 1004
|
|
1002
1017
|
// Add more error codes here as needed
|
|
1003
1018
|
};
|
|
1004
1019
|
class GeobaseError extends Error {
|
|
@@ -1241,6 +1256,130 @@ class Esri extends MapSource {
|
|
|
1241
1256
|
return `${instance.serviceUrl}/${instance.serviceName}/MapServer/tile/${z}/${y}/${x}`;
|
|
1242
1257
|
}
|
|
1243
1258
|
}
|
|
1259
|
+
class Tms extends MapSource {
|
|
1260
|
+
constructor(config) {
|
|
1261
|
+
super();
|
|
1262
|
+
__publicField(this, "baseUrl");
|
|
1263
|
+
__publicField(this, "extension");
|
|
1264
|
+
__publicField(this, "apiKey");
|
|
1265
|
+
__publicField(this, "attribution");
|
|
1266
|
+
__publicField(this, "tileSize");
|
|
1267
|
+
__publicField(this, "headers");
|
|
1268
|
+
__publicField(this, "scheme");
|
|
1269
|
+
this.baseUrl = config.baseUrl;
|
|
1270
|
+
this.extension = config.extension || "png";
|
|
1271
|
+
this.apiKey = config.apiKey;
|
|
1272
|
+
this.attribution = config.attribution || "TMS Provider";
|
|
1273
|
+
this.tileSize = config.tileSize || 256;
|
|
1274
|
+
this.headers = config.headers;
|
|
1275
|
+
this.scheme = config.scheme || "WebMercator";
|
|
1276
|
+
}
|
|
1277
|
+
getTileUrlFromTileCoords(tileCoords, instance) {
|
|
1278
|
+
const [x, originalY, z] = tileCoords;
|
|
1279
|
+
const y = instance.scheme === "TMS" ? Math.pow(2, z) - 1 - originalY : originalY;
|
|
1280
|
+
let url;
|
|
1281
|
+
if (instance.baseUrl.includes("{x}") || instance.baseUrl.includes("{y}") || instance.baseUrl.includes("{z}")) {
|
|
1282
|
+
url = instance.baseUrl.replaceAll("{z}", z.toString()).replaceAll("{x}", x.toString()).replaceAll("{y}", y.toString());
|
|
1283
|
+
} else {
|
|
1284
|
+
url = `${instance.baseUrl}/${z}/${x}/${y}.${instance.extension}`;
|
|
1285
|
+
}
|
|
1286
|
+
if (instance.apiKey) {
|
|
1287
|
+
url += `?apikey=${instance.apiKey}`;
|
|
1288
|
+
}
|
|
1289
|
+
return url;
|
|
1290
|
+
}
|
|
1291
|
+
}
|
|
1292
|
+
function formatWmsBbox(bbox2, crs, version) {
|
|
1293
|
+
const [minX, minY, maxX, maxY] = bbox2;
|
|
1294
|
+
if (version === "1.3.0" && crs === "EPSG:4326") {
|
|
1295
|
+
return `${minY},${minX},${maxY},${maxX}`;
|
|
1296
|
+
}
|
|
1297
|
+
return `${minX},${minY},${maxX},${maxY}`;
|
|
1298
|
+
}
|
|
1299
|
+
function getTileBbox(tileCoords, crs, tileSize) {
|
|
1300
|
+
const [x, y, z] = tileCoords;
|
|
1301
|
+
if (crs === "EPSG:3857") {
|
|
1302
|
+
const toMeters = pixelsToMeters;
|
|
1303
|
+
const min = toMeters([x * tileSize, y * tileSize, z], tileSize);
|
|
1304
|
+
const max = toMeters([(x + 1) * tileSize, (y + 1) * tileSize, z], tileSize);
|
|
1305
|
+
return [
|
|
1306
|
+
Math.min(min[0], max[0]),
|
|
1307
|
+
Math.min(min[1], max[1]),
|
|
1308
|
+
Math.max(min[0], max[0]),
|
|
1309
|
+
Math.max(min[1], max[1])
|
|
1310
|
+
];
|
|
1311
|
+
}
|
|
1312
|
+
return tileToBBox(tileCoords);
|
|
1313
|
+
}
|
|
1314
|
+
function buildWmsGetMapUrl(config, tileCoords) {
|
|
1315
|
+
const version = config.version ?? "1.1.1";
|
|
1316
|
+
const crs = config.crs ?? "EPSG:3857";
|
|
1317
|
+
const tileSize = config.tileSize ?? 256;
|
|
1318
|
+
const bbox2 = getTileBbox(tileCoords, crs, tileSize);
|
|
1319
|
+
const bboxParam = formatWmsBbox(bbox2, crs, version);
|
|
1320
|
+
const params = {
|
|
1321
|
+
SERVICE: "WMS",
|
|
1322
|
+
REQUEST: "GetMap",
|
|
1323
|
+
VERSION: version,
|
|
1324
|
+
LAYERS: config.layers,
|
|
1325
|
+
STYLES: config.styles ?? "",
|
|
1326
|
+
FORMAT: config.format ?? "image/png",
|
|
1327
|
+
WIDTH: tileSize.toString(),
|
|
1328
|
+
HEIGHT: tileSize.toString(),
|
|
1329
|
+
BBOX: bboxParam,
|
|
1330
|
+
...version === "1.3.0" ? { CRS: crs } : { SRS: crs },
|
|
1331
|
+
...config.transparent ? { TRANSPARENT: "TRUE" } : {},
|
|
1332
|
+
...config.extraParams ?? {}
|
|
1333
|
+
};
|
|
1334
|
+
const url = new URL(config.baseUrl);
|
|
1335
|
+
for (const [key, value] of Object.entries(params)) {
|
|
1336
|
+
url.searchParams.set(key, value);
|
|
1337
|
+
}
|
|
1338
|
+
return url.toString();
|
|
1339
|
+
}
|
|
1340
|
+
class Wms extends MapSource {
|
|
1341
|
+
constructor(config) {
|
|
1342
|
+
super();
|
|
1343
|
+
__publicField(this, "baseUrl");
|
|
1344
|
+
__publicField(this, "layers");
|
|
1345
|
+
__publicField(this, "version");
|
|
1346
|
+
__publicField(this, "crs");
|
|
1347
|
+
__publicField(this, "format");
|
|
1348
|
+
__publicField(this, "styles");
|
|
1349
|
+
__publicField(this, "transparent");
|
|
1350
|
+
__publicField(this, "attribution");
|
|
1351
|
+
__publicField(this, "tileSize");
|
|
1352
|
+
__publicField(this, "headers");
|
|
1353
|
+
__publicField(this, "extraParams");
|
|
1354
|
+
this.baseUrl = config.baseUrl;
|
|
1355
|
+
this.layers = config.layers;
|
|
1356
|
+
this.version = config.version ?? "1.1.1";
|
|
1357
|
+
this.crs = config.crs ?? "EPSG:3857";
|
|
1358
|
+
this.format = config.format ?? "image/png";
|
|
1359
|
+
this.styles = config.styles ?? "";
|
|
1360
|
+
this.transparent = config.transparent ?? false;
|
|
1361
|
+
this.attribution = config.attribution ?? "WMS Provider";
|
|
1362
|
+
this.tileSize = config.tileSize ?? 256;
|
|
1363
|
+
this.headers = config.headers;
|
|
1364
|
+
this.extraParams = config.extraParams;
|
|
1365
|
+
}
|
|
1366
|
+
getTileUrlFromTileCoords(tileCoords, instance) {
|
|
1367
|
+
return buildWmsGetMapUrl(
|
|
1368
|
+
{
|
|
1369
|
+
baseUrl: instance.baseUrl,
|
|
1370
|
+
layers: instance.layers,
|
|
1371
|
+
version: instance.version,
|
|
1372
|
+
crs: instance.crs,
|
|
1373
|
+
format: instance.format,
|
|
1374
|
+
styles: instance.styles,
|
|
1375
|
+
transparent: instance.transparent,
|
|
1376
|
+
tileSize: instance.tileSize,
|
|
1377
|
+
extraParams: instance.extraParams
|
|
1378
|
+
},
|
|
1379
|
+
tileCoords
|
|
1380
|
+
);
|
|
1381
|
+
}
|
|
1382
|
+
}
|
|
1244
1383
|
class BaseModel {
|
|
1245
1384
|
constructor(model_id, providerParams, modelParams) {
|
|
1246
1385
|
__publicField(this, "providerParams");
|
|
@@ -1284,6 +1423,32 @@ class BaseModel {
|
|
|
1284
1423
|
attribution: this.providerParams.attribution
|
|
1285
1424
|
});
|
|
1286
1425
|
break;
|
|
1426
|
+
case "tms":
|
|
1427
|
+
this.dataProvider = new Tms({
|
|
1428
|
+
baseUrl: this.providerParams.baseUrl,
|
|
1429
|
+
extension: this.providerParams.extension,
|
|
1430
|
+
apiKey: this.providerParams.apiKey,
|
|
1431
|
+
attribution: this.providerParams.attribution,
|
|
1432
|
+
tileSize: this.providerParams.tileSize,
|
|
1433
|
+
headers: this.providerParams.headers,
|
|
1434
|
+
scheme: this.providerParams.scheme
|
|
1435
|
+
});
|
|
1436
|
+
break;
|
|
1437
|
+
case "wms":
|
|
1438
|
+
this.dataProvider = new Wms({
|
|
1439
|
+
baseUrl: this.providerParams.baseUrl,
|
|
1440
|
+
layers: this.providerParams.layers,
|
|
1441
|
+
version: this.providerParams.version,
|
|
1442
|
+
crs: this.providerParams.crs,
|
|
1443
|
+
format: this.providerParams.format,
|
|
1444
|
+
styles: this.providerParams.styles,
|
|
1445
|
+
transparent: this.providerParams.transparent,
|
|
1446
|
+
attribution: this.providerParams.attribution,
|
|
1447
|
+
tileSize: this.providerParams.tileSize,
|
|
1448
|
+
headers: this.providerParams.headers,
|
|
1449
|
+
extraParams: this.providerParams.extraParams
|
|
1450
|
+
});
|
|
1451
|
+
break;
|
|
1287
1452
|
case "sentinel":
|
|
1288
1453
|
throw new Error("Sentinel provider not implemented yet");
|
|
1289
1454
|
default:
|
package/index.d.ts
CHANGED
|
@@ -132,10 +132,76 @@ declare class Esri extends MapSource {
|
|
|
132
132
|
number
|
|
133
133
|
], instance: Esri): string;
|
|
134
134
|
}
|
|
135
|
+
export interface TmsConfig {
|
|
136
|
+
baseUrl: string;
|
|
137
|
+
extension?: string;
|
|
138
|
+
apiKey?: string;
|
|
139
|
+
attribution?: string;
|
|
140
|
+
tileSize?: number;
|
|
141
|
+
headers?: Record<string, string>;
|
|
142
|
+
/**
|
|
143
|
+
* Tile scheme to use.
|
|
144
|
+
* - 'WebMercator': Web Mercator/XYZ (top-left origin, Y increases downward) - default for most modern services including Cesium
|
|
145
|
+
* - 'TMS': TMS standard (bottom-left origin, Y increases upward) - traditional TMS
|
|
146
|
+
* @default 'WebMercator'
|
|
147
|
+
*/
|
|
148
|
+
scheme?: "WebMercator" | "TMS";
|
|
149
|
+
}
|
|
150
|
+
declare class Tms extends MapSource {
|
|
151
|
+
baseUrl: string;
|
|
152
|
+
extension: string;
|
|
153
|
+
apiKey?: string;
|
|
154
|
+
attribution: string;
|
|
155
|
+
tileSize: number;
|
|
156
|
+
headers?: Record<string, string>;
|
|
157
|
+
scheme: "WebMercator" | "TMS";
|
|
158
|
+
constructor(config: TmsConfig);
|
|
159
|
+
protected getTileUrlFromTileCoords(tileCoords: [
|
|
160
|
+
number,
|
|
161
|
+
number,
|
|
162
|
+
number
|
|
163
|
+
], instance: Tms): string;
|
|
164
|
+
}
|
|
165
|
+
export type WmsVersion = "1.1.1" | "1.3.0";
|
|
166
|
+
export type WmsCrs = "EPSG:3857" | "EPSG:4326";
|
|
167
|
+
export interface WmsGetMapConfig {
|
|
168
|
+
baseUrl: string;
|
|
169
|
+
layers: string;
|
|
170
|
+
version?: WmsVersion;
|
|
171
|
+
crs?: WmsCrs;
|
|
172
|
+
format?: string;
|
|
173
|
+
styles?: string;
|
|
174
|
+
transparent?: boolean;
|
|
175
|
+
tileSize?: number;
|
|
176
|
+
attribution?: string;
|
|
177
|
+
headers?: Record<string, string>;
|
|
178
|
+
extraParams?: Record<string, string>;
|
|
179
|
+
}
|
|
180
|
+
export interface WmsConfig extends WmsGetMapConfig {
|
|
181
|
+
}
|
|
182
|
+
declare class Wms extends MapSource {
|
|
183
|
+
baseUrl: string;
|
|
184
|
+
layers: string;
|
|
185
|
+
version: WmsVersion;
|
|
186
|
+
crs: WmsCrs;
|
|
187
|
+
format: string;
|
|
188
|
+
styles: string;
|
|
189
|
+
transparent: boolean;
|
|
190
|
+
attribution: string;
|
|
191
|
+
tileSize: number;
|
|
192
|
+
headers?: Record<string, string>;
|
|
193
|
+
extraParams?: Record<string, string>;
|
|
194
|
+
constructor(config: WmsConfig);
|
|
195
|
+
protected getTileUrlFromTileCoords(tileCoords: [
|
|
196
|
+
number,
|
|
197
|
+
number,
|
|
198
|
+
number
|
|
199
|
+
], instance: Wms): string;
|
|
200
|
+
}
|
|
135
201
|
declare abstract class BaseModel {
|
|
136
202
|
protected static instance: BaseModel | null;
|
|
137
203
|
protected providerParams: ProviderParams;
|
|
138
|
-
protected dataProvider: Mapbox | Geobase | Esri | undefined;
|
|
204
|
+
protected dataProvider: Mapbox | Geobase | Esri | Tms | Wms | undefined;
|
|
139
205
|
protected model_id: string;
|
|
140
206
|
protected initialized: boolean;
|
|
141
207
|
protected modelParams?: PretrainedModelOptions;
|
|
@@ -430,6 +496,30 @@ export type EsriParams = {
|
|
|
430
496
|
tileSize?: number;
|
|
431
497
|
attribution?: string;
|
|
432
498
|
};
|
|
499
|
+
export type TmsParams = {
|
|
500
|
+
provider: "tms";
|
|
501
|
+
baseUrl: string;
|
|
502
|
+
extension?: string;
|
|
503
|
+
apiKey?: string;
|
|
504
|
+
attribution?: string;
|
|
505
|
+
tileSize?: number;
|
|
506
|
+
headers?: Record<string, string>;
|
|
507
|
+
scheme?: "WebMercator" | "TMS";
|
|
508
|
+
};
|
|
509
|
+
export type WmsParams = {
|
|
510
|
+
provider: "wms";
|
|
511
|
+
baseUrl: string;
|
|
512
|
+
layers: string;
|
|
513
|
+
version?: "1.1.1" | "1.3.0";
|
|
514
|
+
crs?: "EPSG:3857" | "EPSG:4326";
|
|
515
|
+
format?: string;
|
|
516
|
+
styles?: string;
|
|
517
|
+
transparent?: boolean;
|
|
518
|
+
attribution?: string;
|
|
519
|
+
tileSize?: number;
|
|
520
|
+
headers?: Record<string, string>;
|
|
521
|
+
extraParams?: Record<string, string>;
|
|
522
|
+
};
|
|
433
523
|
export interface InferenceInputs {
|
|
434
524
|
polygon: GeoJSON.Feature;
|
|
435
525
|
classLabel?: string;
|
|
@@ -448,7 +538,7 @@ export interface InferenceParams {
|
|
|
448
538
|
postProcessingParams?: PostProcessingParams;
|
|
449
539
|
mapSourceParams?: MapSourceParams;
|
|
450
540
|
}
|
|
451
|
-
export type ProviderParams = MapboxParams | SentinelParams | GeobaseParams | EsriParams;
|
|
541
|
+
export type ProviderParams = MapboxParams | SentinelParams | GeobaseParams | EsriParams | TmsParams | WmsParams;
|
|
452
542
|
export type HuggingFaceModelTask = "mask-generation" | "zero-shot-object-detection" | "zero-shot-image-classification" | "object-detection" | "oriented-object-detection" | "image-feature-extraction";
|
|
453
543
|
export type GeobaseAiModelTask = "damage-assessment" | "vegetation-classification" | "land-cover-classification" | "land-use-classification" | "land-cover-change-detection" | "land-use-change-detection" | "solar-panel-detection" | "ship-detection" | "car-detection" | "wetland-segmentation" | "building-detection" | "oil-storage-tank-detection" | "building-footprint-segmentation";
|
|
454
544
|
export type ModelInstance = MaskGeneration | ZeroShotObjectDetection | ObjectDetection | OrientedObjectDetection | LandCoverClassification | SolarPanelDetection | ShipDetection | CarDetection | WetLandSegmentation | BuildingDetection | OilStorageTankDetection | BuildingFootPrintSegmentation | ImageFeatureExtraction;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "geoai",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "A JavaScript library for running Geo AI models in frontend applications",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"geoai",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"publish:build": "cd build && npm publish --access public --ignore-scripts",
|
|
58
58
|
"publish:pkg": "pnpm prepublish:prep && pnpm publish:build",
|
|
59
59
|
"build:core": "tsc && vite build",
|
|
60
|
-
"build:types": "dts-bundle-generator --config ./dts-bundle-generator.config.
|
|
60
|
+
"build:types": "dts-bundle-generator --config ./dts-bundle-generator.config.cjs",
|
|
61
61
|
"build:package": "copyfiles ./package.json build",
|
|
62
62
|
"build:examples": "pnpm build && cp -r ./build ./examples/codepen-geobase",
|
|
63
63
|
"test": "vitest",
|