geokernel-electron 1.1.37 → 1.1.39

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.
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "geokernel-electron",
3
- "version": "1.1.37",
3
+ "version": "1.1.39",
4
4
  "description": "Electron bindings for the GeoKernel GIS SDK.",
5
5
  "main": "src/index.js",
6
6
  "type": "commonjs",
@@ -294,6 +294,8 @@ const SIGNATURES = Object.freeze({
294
294
  "GeoKernelWindow_GetSelectedLayerIndex": ["int", ["void_p"]],
295
295
  "GeoKernelWindow_IsVisible": ["bool", ["void_p"]],
296
296
  "GeoKernelWindow_SetCentralViewer": ["void_p", ["void_p"]],
297
+ "GeoKernelWindow_SetCentralTextPanel": ["bool", ["void_p", "wchar_p"]],
298
+ "GeoKernelWindow_SetCentralText": ["bool", ["void_p", "wchar_p"]],
297
299
  "GeoKernelWindow_SetControlValue": ["bool", ["void_p", "int", "double", "wchar_p"]],
298
300
  "GeoKernelWindow_SetLegendItemsJson": ["bool", ["void_p", "wchar_p"]],
299
301
  "GeoKernelWindow_SetLegendTitle": ["bool", ["void_p", "wchar_p"]],
package/src/types.js CHANGED
@@ -56,6 +56,14 @@ const ShapeType = Object.freeze({
56
56
  MULTI_POINT_Z: 18,
57
57
  });
58
58
 
59
+ const AttributeType = Object.freeze({
60
+ STRING: 0,
61
+ INTEGER: 1,
62
+ DOUBLE: 2,
63
+ BOOLEAN: 3,
64
+ DATE_TIME: 4,
65
+ });
66
+
59
67
  const SpatialIndexType = Object.freeze({
60
68
  LINEAR: 0,
61
69
  RTREE: 1,
@@ -135,6 +143,7 @@ function routeSummary(value) {
135
143
  }
136
144
 
137
145
  module.exports = {
146
+ AttributeType,
138
147
  ClassificationMethod,
139
148
  ColorRampMode,
140
149
  MeasureMode,
package/src/viewer.js CHANGED
@@ -246,6 +246,22 @@ class ViewerWindow {
246
246
  this.library.function("GeoKernelWindow_SetStatusText")(this.windowHandle, text ?? "");
247
247
  }
248
248
 
249
+ setCentralTextPanel(text = "") {
250
+ const ok = this.library.function("GeoKernelWindow_SetCentralTextPanel")(
251
+ this.windowHandle,
252
+ text,
253
+ );
254
+ if (!ok) throw new Error("GeoKernelWindow_SetCentralTextPanel failed.");
255
+ }
256
+
257
+ setCentralText(text) {
258
+ const ok = this.library.function("GeoKernelWindow_SetCentralText")(
259
+ this.windowHandle,
260
+ text,
261
+ );
262
+ if (!ok) throw new Error("GeoKernelWindow_SetCentralText failed.");
263
+ }
264
+
249
265
  addLogPanel(title = "Event log") {
250
266
  const ok = this.library.function("GeoKernelWindow_AddLogPanel")(this.windowHandle, title);
251
267
  if (!ok) throw new Error("GeoKernelWindow_AddLogPanel failed.");
@@ -340,6 +356,10 @@ class ViewerWindow {
340
356
  );
341
357
  }
342
358
 
359
+ xyzLayerDiagnostics(index) {
360
+ return this._readJson("GeoKernelViewer_GetXyzLayerDiagnosticsJson", {}, Number(index));
361
+ }
362
+
343
363
  addWmsLayer(options) {
344
364
  return this._call(
345
365
  "GeoKernelViewer_AddWmsLayer",
@@ -400,16 +420,128 @@ class ViewerWindow {
400
420
  commitEditLayer(index) { return this._call("GeoKernelViewer_CommitEditLayer", Number(index)); }
401
421
  rollbackEditLayer(index) { return this._call("GeoKernelViewer_RollbackEditLayer", Number(index)); }
402
422
  isLayerEditing(index) { return this._call("GeoKernelViewer_IsLayerEditing", Number(index)); }
423
+ canEditLayer(index) { return this._call("GeoKernelViewer_CanEditLayer", Number(index)); }
403
424
  setActiveEditLayerIndex(index) { return this._call("GeoKernelViewer_SetActiveEditLayerIndex", Number(index)); }
404
- addPointToEditLayer(index, x, y) { return this._call("GeoKernelViewer_AddPointToEditLayer", Number(index), Number(x), Number(y)); }
405
- addPolylineToEditLayer(index, points) {
425
+ addLayerAttributeDefinition(index, name, type, length = 0, decimalCount = 0) {
426
+ return this._call(
427
+ "GeoKernelViewer_AddLayerAttributeDefinition",
428
+ Number(index),
429
+ name,
430
+ Number(type),
431
+ Number(length),
432
+ Number(decimalCount),
433
+ );
434
+ }
435
+ addPointToEditLayer(index, x, y, attributes) {
436
+ if (attributes === undefined) {
437
+ return this._call("GeoKernelViewer_AddPointToEditLayer", Number(index), Number(x), Number(y));
438
+ }
439
+ return this._call(
440
+ "GeoKernelViewer_AddPointToEditLayerWithAttributes",
441
+ Number(index),
442
+ Number(x),
443
+ Number(y),
444
+ jsonText(attributes),
445
+ );
446
+ }
447
+ addPolylineToEditLayer(index, points, attributes) {
406
448
  const xy = xyArray(points);
449
+ if (attributes !== undefined) {
450
+ return this._call(
451
+ "GeoKernelViewer_AddPolylineToEditLayerWithAttributes",
452
+ Number(index),
453
+ xy,
454
+ xy.length / 2,
455
+ jsonText(attributes),
456
+ );
457
+ }
407
458
  return this._call("GeoKernelViewer_AddPolylineToEditLayer", Number(index), xy, xy.length / 2);
408
459
  }
409
- addPolygonToEditLayer(index, points) {
460
+ addPolygonToEditLayer(index, points, attributes) {
410
461
  const xy = xyArray(points);
462
+ if (attributes !== undefined) {
463
+ return this._call(
464
+ "GeoKernelViewer_AddPolygonToEditLayerWithAttributes",
465
+ Number(index),
466
+ xy,
467
+ xy.length / 2,
468
+ jsonText(attributes),
469
+ );
470
+ }
411
471
  return this._call("GeoKernelViewer_AddPolygonToEditLayer", Number(index), xy, xy.length / 2);
412
472
  }
473
+ deleteShapeFromEditLayer(index, shapeId) {
474
+ return this._call("GeoKernelViewer_DeleteShapeFromEditLayer", Number(index), Number(shapeId));
475
+ }
476
+ deleteSelectedFeaturesFromEditLayer() {
477
+ return this._call("GeoKernelViewer_DeleteSelectedFeaturesFromEditLayer");
478
+ }
479
+ canMoveSelectedFeatures() {
480
+ return this._call("GeoKernelViewer_CanMoveSelectedFeatures");
481
+ }
482
+ canEditSelectedFeatures() {
483
+ return this._call("GeoKernelViewer_CanEditSelectedFeatures");
484
+ }
485
+ canEditSelectedVertices() {
486
+ return this._call("GeoKernelViewer_CanEditSelectedVertices");
487
+ }
488
+ deleteSelectedVertexFromEditLayer() {
489
+ return this._call("GeoKernelViewer_DeleteSelectedVertexFromEditLayer");
490
+ }
491
+ insertSelectedFeatureVertexInEditLayer(partIndex, insertIndex, worldX, worldY) {
492
+ return this._call(
493
+ "GeoKernelViewer_InsertSelectedFeatureVertexInEditLayer",
494
+ Number(partIndex),
495
+ Number(insertIndex),
496
+ Number(worldX),
497
+ Number(worldY),
498
+ );
499
+ }
500
+ deleteSelectedFeatureVertexInEditLayer(partIndex, vertexIndex) {
501
+ return this._call(
502
+ "GeoKernelViewer_DeleteSelectedFeatureVertexInEditLayer",
503
+ Number(partIndex),
504
+ Number(vertexIndex),
505
+ );
506
+ }
507
+ canUndoEditLayer(index) {
508
+ return this._call("GeoKernelViewer_CanUndoEditLayer", Number(index));
509
+ }
510
+ canRedoEditLayer(index) {
511
+ return this._call("GeoKernelViewer_CanRedoEditLayer", Number(index));
512
+ }
513
+ undoEditLayer(index) {
514
+ return this._call("GeoKernelViewer_UndoEditLayer", Number(index));
515
+ }
516
+ redoEditLayer(index) {
517
+ return this._call("GeoKernelViewer_RedoEditLayer", Number(index));
518
+ }
519
+ setShapeAttributesInEditLayer(index, shapeId, attributes) {
520
+ return this._call(
521
+ "GeoKernelViewer_SetShapeAttributesInEditLayerJson",
522
+ Number(index),
523
+ Number(shapeId),
524
+ jsonText(attributes),
525
+ );
526
+ }
527
+ editSnappingEnabled() {
528
+ return this._call("GeoKernelViewer_GetEditSnappingEnabled");
529
+ }
530
+ setEditSnappingEnabled(enabled) {
531
+ this._call("GeoKernelViewer_SetEditSnappingEnabled", Boolean(enabled));
532
+ }
533
+ editSnappingTolerancePixels() {
534
+ return this._call("GeoKernelViewer_GetEditSnappingTolerancePixels");
535
+ }
536
+ setEditSnappingTolerancePixels(tolerance) {
537
+ this._call("GeoKernelViewer_SetEditSnappingTolerancePixels", Number(tolerance));
538
+ }
539
+ isLayerDirty(index) {
540
+ return this._call("GeoKernelViewer_IsLayerDirty", Number(index));
541
+ }
542
+ moveSelectedFeaturesInEditLayer(deltaX, deltaY) {
543
+ return this._call("GeoKernelViewer_MoveSelectedFeaturesInEditLayer", Number(deltaX), Number(deltaY));
544
+ }
413
545
 
414
546
  addPointLayer(name, points, style) {
415
547
  const xy = xyArray(points);
@@ -623,6 +755,49 @@ class ViewerWindow {
623
755
  this._call("GeoKernelViewer_SetViewExtent", extentObject(value));
624
756
  }
625
757
 
758
+ setCoordinateSystemPreset(preset) {
759
+ return this._call("GeoKernelViewer_SetCoordinateSystemPreset", String(preset));
760
+ }
761
+
762
+ setLayerCoordinateSystemPreset(index, preset) {
763
+ return this._call(
764
+ "GeoKernelViewer_SetLayerCoordinateSystemPreset",
765
+ Number(index),
766
+ String(preset),
767
+ );
768
+ }
769
+
770
+ transformPoint(sourceEpsg, targetEpsg, x, y) {
771
+ const transformedX = [0];
772
+ const transformedY = [0];
773
+ const ok = this.library.function("GeoKernelViewer_TransformPoint")(
774
+ Number(sourceEpsg),
775
+ Number(targetEpsg),
776
+ Number(x),
777
+ Number(y),
778
+ transformedX,
779
+ transformedY,
780
+ );
781
+ return ok ? point(transformedX[0], transformedY[0]) : null;
782
+ }
783
+
784
+ coordinateSystemFromAuthority(authority, code) {
785
+ return this._readStaticJson(
786
+ "GeoKernelViewer_CoordinateSystemFromAuthorityJson",
787
+ {},
788
+ String(authority),
789
+ Number(code),
790
+ );
791
+ }
792
+
793
+ coordinateSystemFromEpsg(code) {
794
+ return this._readStaticJson(
795
+ "GeoKernelViewer_CoordinateSystemFromEpsgJson",
796
+ {},
797
+ Number(code),
798
+ );
799
+ }
800
+
626
801
  worldToScreen(x, y) {
627
802
  const screenX = [0];
628
803
  const screenY = [0];
@@ -697,6 +872,68 @@ class ViewerWindow {
697
872
  return this._readJson("GeoKernelViewer_GetLayerFeatureAttributesJson", {}, Number(index), Number(rowIndex));
698
873
  }
699
874
 
875
+ hitTestTopFeatureAt(screenX, screenY, pixelTolerance = 8) {
876
+ return this._readJson(
877
+ "GeoKernelViewer_HitTestTopFeatureAtJson",
878
+ null,
879
+ Number(screenX),
880
+ Number(screenY),
881
+ Number(pixelTolerance),
882
+ );
883
+ }
884
+
885
+ hitTestFeaturesAt(screenX, screenY, pixelTolerance = 8) {
886
+ return this._readJson(
887
+ "GeoKernelViewer_HitTestFeaturesAtJson",
888
+ [],
889
+ Number(screenX),
890
+ Number(screenY),
891
+ Number(pixelTolerance),
892
+ );
893
+ }
894
+
895
+ hitTestFeatures(worldX, worldY, worldTolerance) {
896
+ return this._readJson(
897
+ "GeoKernelViewer_HitTestFeaturesJson",
898
+ [],
899
+ Number(worldX),
900
+ Number(worldY),
901
+ Number(worldTolerance),
902
+ );
903
+ }
904
+
905
+ hitTestFeaturesInScreenRect(left, top, right, bottom) {
906
+ return this._readJson(
907
+ "GeoKernelViewer_HitTestFeaturesInScreenRectJson",
908
+ [],
909
+ Number(left),
910
+ Number(top),
911
+ Number(right),
912
+ Number(bottom),
913
+ );
914
+ }
915
+
916
+ selectFeaturesInScreenRect(left, top, right, bottom, selectionMode = 0) {
917
+ const x = Math.min(Number(left), Number(right));
918
+ const y = Math.min(Number(top), Number(bottom));
919
+ const width = Math.abs(Number(right) - Number(left)) + 1;
920
+ const height = Math.abs(Number(bottom) - Number(top)) + 1;
921
+ return this._call("GeoKernelViewer_SelectFeaturesInScreenRect", x, y, width, height, Number(selectionMode));
922
+ }
923
+
924
+ selectFeatureHit(hit, worldTolerance) {
925
+ if (!hit?.worldPoint) return false;
926
+ return this._call(
927
+ "GeoKernelViewer_SelectFeatureHit",
928
+ Number(hit.worldPoint.x),
929
+ Number(hit.worldPoint.y),
930
+ Number(worldTolerance),
931
+ Number(hit.layerIndex),
932
+ Number(hit.shapeId),
933
+ Number(hit.featureId),
934
+ );
935
+ }
936
+
700
937
  layerProjectedExtent(index) {
701
938
  const value = {};
702
939
  const ok = this._call("GeoKernelViewer_GetLayerProjectedExtent", Number(index), value);
@@ -719,6 +956,10 @@ class ViewerWindow {
719
956
  return this._call("GeoKernelViewer_RemoveLayerByName", name);
720
957
  }
721
958
 
959
+ saveLayerAsShapefile(index, outputPath) {
960
+ return this._call("GeoKernelViewer_SaveLayerAsShapefile", Number(index), outputPath);
961
+ }
962
+
722
963
  setLayerName(index, name) {
723
964
  return this._call("GeoKernelViewer_SetLayerName", Number(index), name);
724
965
  }
@@ -748,10 +989,30 @@ class ViewerWindow {
748
989
  this._call("GeoKernelViewer_ClearSelectedFeatures");
749
990
  }
750
991
 
992
+ selectTopFeatureAt(screenX, screenY, pixelTolerance = 8) {
993
+ return this._call("GeoKernelViewer_SelectTopFeatureAt", Number(screenX), Number(screenY), Number(pixelTolerance));
994
+ }
995
+
996
+ addTopFeatureToSelectionAt(screenX, screenY, pixelTolerance = 8) {
997
+ return this._call("GeoKernelViewer_AddTopFeatureToSelectionAt", Number(screenX), Number(screenY), Number(pixelTolerance));
998
+ }
999
+
1000
+ toggleTopFeatureSelectionAt(screenX, screenY, pixelTolerance = 8) {
1001
+ return this._call("GeoKernelViewer_ToggleTopFeatureSelectionAt", Number(screenX), Number(screenY), Number(pixelTolerance));
1002
+ }
1003
+
1004
+ selectedFeatures() {
1005
+ return this._readJson("GeoKernelViewer_GetSelectedFeaturesJson", []);
1006
+ }
1007
+
751
1008
  selectedFeatureCount() {
752
1009
  return this._call("GeoKernelViewer_GetSelectedFeatureCount");
753
1010
  }
754
1011
 
1012
+ zoomToSelectedFeatures() {
1013
+ return this._call("GeoKernelViewer_ZoomToSelectedFeatures");
1014
+ }
1015
+
755
1016
  clearLayers() {
756
1017
  this._call("GeoKernelViewer_ClearLayers");
757
1018
  }
@@ -844,6 +1105,21 @@ class ViewerWindow {
844
1105
  return parseJson(readWideJson(this.library.function(name), this.viewerHandle, ...args), fallback);
845
1106
  }
846
1107
 
1108
+ _readStaticJson(name, fallback, ...args) {
1109
+ const fn = this.library.function(name);
1110
+ let bufferLength = 4096;
1111
+ for (let attempt = 0; attempt < 4; attempt += 1) {
1112
+ const out = ["\0".repeat(bufferLength)];
1113
+ const length = fn(...args, out, bufferLength);
1114
+ if (length < 0) throw new Error(`${name} failed with result ${length}.`);
1115
+ const nullIndex = out[0].indexOf("\0");
1116
+ const text = nullIndex >= 0 ? out[0].slice(0, nullIndex) : out[0];
1117
+ if (length < bufferLength - 1) return parseJson(text, fallback);
1118
+ bufferLength = Math.max(bufferLength * 2, length + 1);
1119
+ }
1120
+ throw new Error(`${name} output exceeded the supported buffer size.`);
1121
+ }
1122
+
847
1123
  _requireViewer() {
848
1124
  if (!this.viewerHandle) {
849
1125
  throw new Error("GeoKernel viewer is closed.");