geokernel-electron 1.1.37 → 1.1.38
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/bin/linux-x64/libGeoKernel.Viewer.so +0 -0
- package/bin/win32-x64/GeoKernel.Core.dll +0 -0
- package/bin/win32-x64/GeoKernel.Formats.dll +0 -0
- package/bin/win32-x64/GeoKernel.Viewer.dll +0 -0
- package/package.json +1 -1
- package/src/native-signatures.js +2 -0
- package/src/types.js +9 -0
- package/src/viewer.js +271 -3
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
package/src/native-signatures.js
CHANGED
|
@@ -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.");
|
|
@@ -400,16 +416,128 @@ class ViewerWindow {
|
|
|
400
416
|
commitEditLayer(index) { return this._call("GeoKernelViewer_CommitEditLayer", Number(index)); }
|
|
401
417
|
rollbackEditLayer(index) { return this._call("GeoKernelViewer_RollbackEditLayer", Number(index)); }
|
|
402
418
|
isLayerEditing(index) { return this._call("GeoKernelViewer_IsLayerEditing", Number(index)); }
|
|
419
|
+
canEditLayer(index) { return this._call("GeoKernelViewer_CanEditLayer", Number(index)); }
|
|
403
420
|
setActiveEditLayerIndex(index) { return this._call("GeoKernelViewer_SetActiveEditLayerIndex", Number(index)); }
|
|
404
|
-
|
|
405
|
-
|
|
421
|
+
addLayerAttributeDefinition(index, name, type, length = 0, decimalCount = 0) {
|
|
422
|
+
return this._call(
|
|
423
|
+
"GeoKernelViewer_AddLayerAttributeDefinition",
|
|
424
|
+
Number(index),
|
|
425
|
+
name,
|
|
426
|
+
Number(type),
|
|
427
|
+
Number(length),
|
|
428
|
+
Number(decimalCount),
|
|
429
|
+
);
|
|
430
|
+
}
|
|
431
|
+
addPointToEditLayer(index, x, y, attributes) {
|
|
432
|
+
if (attributes === undefined) {
|
|
433
|
+
return this._call("GeoKernelViewer_AddPointToEditLayer", Number(index), Number(x), Number(y));
|
|
434
|
+
}
|
|
435
|
+
return this._call(
|
|
436
|
+
"GeoKernelViewer_AddPointToEditLayerWithAttributes",
|
|
437
|
+
Number(index),
|
|
438
|
+
Number(x),
|
|
439
|
+
Number(y),
|
|
440
|
+
jsonText(attributes),
|
|
441
|
+
);
|
|
442
|
+
}
|
|
443
|
+
addPolylineToEditLayer(index, points, attributes) {
|
|
406
444
|
const xy = xyArray(points);
|
|
445
|
+
if (attributes !== undefined) {
|
|
446
|
+
return this._call(
|
|
447
|
+
"GeoKernelViewer_AddPolylineToEditLayerWithAttributes",
|
|
448
|
+
Number(index),
|
|
449
|
+
xy,
|
|
450
|
+
xy.length / 2,
|
|
451
|
+
jsonText(attributes),
|
|
452
|
+
);
|
|
453
|
+
}
|
|
407
454
|
return this._call("GeoKernelViewer_AddPolylineToEditLayer", Number(index), xy, xy.length / 2);
|
|
408
455
|
}
|
|
409
|
-
addPolygonToEditLayer(index, points) {
|
|
456
|
+
addPolygonToEditLayer(index, points, attributes) {
|
|
410
457
|
const xy = xyArray(points);
|
|
458
|
+
if (attributes !== undefined) {
|
|
459
|
+
return this._call(
|
|
460
|
+
"GeoKernelViewer_AddPolygonToEditLayerWithAttributes",
|
|
461
|
+
Number(index),
|
|
462
|
+
xy,
|
|
463
|
+
xy.length / 2,
|
|
464
|
+
jsonText(attributes),
|
|
465
|
+
);
|
|
466
|
+
}
|
|
411
467
|
return this._call("GeoKernelViewer_AddPolygonToEditLayer", Number(index), xy, xy.length / 2);
|
|
412
468
|
}
|
|
469
|
+
deleteShapeFromEditLayer(index, shapeId) {
|
|
470
|
+
return this._call("GeoKernelViewer_DeleteShapeFromEditLayer", Number(index), Number(shapeId));
|
|
471
|
+
}
|
|
472
|
+
deleteSelectedFeaturesFromEditLayer() {
|
|
473
|
+
return this._call("GeoKernelViewer_DeleteSelectedFeaturesFromEditLayer");
|
|
474
|
+
}
|
|
475
|
+
canMoveSelectedFeatures() {
|
|
476
|
+
return this._call("GeoKernelViewer_CanMoveSelectedFeatures");
|
|
477
|
+
}
|
|
478
|
+
canEditSelectedFeatures() {
|
|
479
|
+
return this._call("GeoKernelViewer_CanEditSelectedFeatures");
|
|
480
|
+
}
|
|
481
|
+
canEditSelectedVertices() {
|
|
482
|
+
return this._call("GeoKernelViewer_CanEditSelectedVertices");
|
|
483
|
+
}
|
|
484
|
+
deleteSelectedVertexFromEditLayer() {
|
|
485
|
+
return this._call("GeoKernelViewer_DeleteSelectedVertexFromEditLayer");
|
|
486
|
+
}
|
|
487
|
+
insertSelectedFeatureVertexInEditLayer(partIndex, insertIndex, worldX, worldY) {
|
|
488
|
+
return this._call(
|
|
489
|
+
"GeoKernelViewer_InsertSelectedFeatureVertexInEditLayer",
|
|
490
|
+
Number(partIndex),
|
|
491
|
+
Number(insertIndex),
|
|
492
|
+
Number(worldX),
|
|
493
|
+
Number(worldY),
|
|
494
|
+
);
|
|
495
|
+
}
|
|
496
|
+
deleteSelectedFeatureVertexInEditLayer(partIndex, vertexIndex) {
|
|
497
|
+
return this._call(
|
|
498
|
+
"GeoKernelViewer_DeleteSelectedFeatureVertexInEditLayer",
|
|
499
|
+
Number(partIndex),
|
|
500
|
+
Number(vertexIndex),
|
|
501
|
+
);
|
|
502
|
+
}
|
|
503
|
+
canUndoEditLayer(index) {
|
|
504
|
+
return this._call("GeoKernelViewer_CanUndoEditLayer", Number(index));
|
|
505
|
+
}
|
|
506
|
+
canRedoEditLayer(index) {
|
|
507
|
+
return this._call("GeoKernelViewer_CanRedoEditLayer", Number(index));
|
|
508
|
+
}
|
|
509
|
+
undoEditLayer(index) {
|
|
510
|
+
return this._call("GeoKernelViewer_UndoEditLayer", Number(index));
|
|
511
|
+
}
|
|
512
|
+
redoEditLayer(index) {
|
|
513
|
+
return this._call("GeoKernelViewer_RedoEditLayer", Number(index));
|
|
514
|
+
}
|
|
515
|
+
setShapeAttributesInEditLayer(index, shapeId, attributes) {
|
|
516
|
+
return this._call(
|
|
517
|
+
"GeoKernelViewer_SetShapeAttributesInEditLayerJson",
|
|
518
|
+
Number(index),
|
|
519
|
+
Number(shapeId),
|
|
520
|
+
jsonText(attributes),
|
|
521
|
+
);
|
|
522
|
+
}
|
|
523
|
+
editSnappingEnabled() {
|
|
524
|
+
return this._call("GeoKernelViewer_GetEditSnappingEnabled");
|
|
525
|
+
}
|
|
526
|
+
setEditSnappingEnabled(enabled) {
|
|
527
|
+
this._call("GeoKernelViewer_SetEditSnappingEnabled", Boolean(enabled));
|
|
528
|
+
}
|
|
529
|
+
editSnappingTolerancePixels() {
|
|
530
|
+
return this._call("GeoKernelViewer_GetEditSnappingTolerancePixels");
|
|
531
|
+
}
|
|
532
|
+
setEditSnappingTolerancePixels(tolerance) {
|
|
533
|
+
this._call("GeoKernelViewer_SetEditSnappingTolerancePixels", Number(tolerance));
|
|
534
|
+
}
|
|
535
|
+
isLayerDirty(index) {
|
|
536
|
+
return this._call("GeoKernelViewer_IsLayerDirty", Number(index));
|
|
537
|
+
}
|
|
538
|
+
moveSelectedFeaturesInEditLayer(deltaX, deltaY) {
|
|
539
|
+
return this._call("GeoKernelViewer_MoveSelectedFeaturesInEditLayer", Number(deltaX), Number(deltaY));
|
|
540
|
+
}
|
|
413
541
|
|
|
414
542
|
addPointLayer(name, points, style) {
|
|
415
543
|
const xy = xyArray(points);
|
|
@@ -623,6 +751,49 @@ class ViewerWindow {
|
|
|
623
751
|
this._call("GeoKernelViewer_SetViewExtent", extentObject(value));
|
|
624
752
|
}
|
|
625
753
|
|
|
754
|
+
setCoordinateSystemPreset(preset) {
|
|
755
|
+
return this._call("GeoKernelViewer_SetCoordinateSystemPreset", String(preset));
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
setLayerCoordinateSystemPreset(index, preset) {
|
|
759
|
+
return this._call(
|
|
760
|
+
"GeoKernelViewer_SetLayerCoordinateSystemPreset",
|
|
761
|
+
Number(index),
|
|
762
|
+
String(preset),
|
|
763
|
+
);
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
transformPoint(sourceEpsg, targetEpsg, x, y) {
|
|
767
|
+
const transformedX = [0];
|
|
768
|
+
const transformedY = [0];
|
|
769
|
+
const ok = this.library.function("GeoKernelViewer_TransformPoint")(
|
|
770
|
+
Number(sourceEpsg),
|
|
771
|
+
Number(targetEpsg),
|
|
772
|
+
Number(x),
|
|
773
|
+
Number(y),
|
|
774
|
+
transformedX,
|
|
775
|
+
transformedY,
|
|
776
|
+
);
|
|
777
|
+
return ok ? point(transformedX[0], transformedY[0]) : null;
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
coordinateSystemFromAuthority(authority, code) {
|
|
781
|
+
return this._readStaticJson(
|
|
782
|
+
"GeoKernelViewer_CoordinateSystemFromAuthorityJson",
|
|
783
|
+
{},
|
|
784
|
+
String(authority),
|
|
785
|
+
Number(code),
|
|
786
|
+
);
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
coordinateSystemFromEpsg(code) {
|
|
790
|
+
return this._readStaticJson(
|
|
791
|
+
"GeoKernelViewer_CoordinateSystemFromEpsgJson",
|
|
792
|
+
{},
|
|
793
|
+
Number(code),
|
|
794
|
+
);
|
|
795
|
+
}
|
|
796
|
+
|
|
626
797
|
worldToScreen(x, y) {
|
|
627
798
|
const screenX = [0];
|
|
628
799
|
const screenY = [0];
|
|
@@ -697,6 +868,68 @@ class ViewerWindow {
|
|
|
697
868
|
return this._readJson("GeoKernelViewer_GetLayerFeatureAttributesJson", {}, Number(index), Number(rowIndex));
|
|
698
869
|
}
|
|
699
870
|
|
|
871
|
+
hitTestTopFeatureAt(screenX, screenY, pixelTolerance = 8) {
|
|
872
|
+
return this._readJson(
|
|
873
|
+
"GeoKernelViewer_HitTestTopFeatureAtJson",
|
|
874
|
+
null,
|
|
875
|
+
Number(screenX),
|
|
876
|
+
Number(screenY),
|
|
877
|
+
Number(pixelTolerance),
|
|
878
|
+
);
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
hitTestFeaturesAt(screenX, screenY, pixelTolerance = 8) {
|
|
882
|
+
return this._readJson(
|
|
883
|
+
"GeoKernelViewer_HitTestFeaturesAtJson",
|
|
884
|
+
[],
|
|
885
|
+
Number(screenX),
|
|
886
|
+
Number(screenY),
|
|
887
|
+
Number(pixelTolerance),
|
|
888
|
+
);
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
hitTestFeatures(worldX, worldY, worldTolerance) {
|
|
892
|
+
return this._readJson(
|
|
893
|
+
"GeoKernelViewer_HitTestFeaturesJson",
|
|
894
|
+
[],
|
|
895
|
+
Number(worldX),
|
|
896
|
+
Number(worldY),
|
|
897
|
+
Number(worldTolerance),
|
|
898
|
+
);
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
hitTestFeaturesInScreenRect(left, top, right, bottom) {
|
|
902
|
+
return this._readJson(
|
|
903
|
+
"GeoKernelViewer_HitTestFeaturesInScreenRectJson",
|
|
904
|
+
[],
|
|
905
|
+
Number(left),
|
|
906
|
+
Number(top),
|
|
907
|
+
Number(right),
|
|
908
|
+
Number(bottom),
|
|
909
|
+
);
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
selectFeaturesInScreenRect(left, top, right, bottom, selectionMode = 0) {
|
|
913
|
+
const x = Math.min(Number(left), Number(right));
|
|
914
|
+
const y = Math.min(Number(top), Number(bottom));
|
|
915
|
+
const width = Math.abs(Number(right) - Number(left)) + 1;
|
|
916
|
+
const height = Math.abs(Number(bottom) - Number(top)) + 1;
|
|
917
|
+
return this._call("GeoKernelViewer_SelectFeaturesInScreenRect", x, y, width, height, Number(selectionMode));
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
selectFeatureHit(hit, worldTolerance) {
|
|
921
|
+
if (!hit?.worldPoint) return false;
|
|
922
|
+
return this._call(
|
|
923
|
+
"GeoKernelViewer_SelectFeatureHit",
|
|
924
|
+
Number(hit.worldPoint.x),
|
|
925
|
+
Number(hit.worldPoint.y),
|
|
926
|
+
Number(worldTolerance),
|
|
927
|
+
Number(hit.layerIndex),
|
|
928
|
+
Number(hit.shapeId),
|
|
929
|
+
Number(hit.featureId),
|
|
930
|
+
);
|
|
931
|
+
}
|
|
932
|
+
|
|
700
933
|
layerProjectedExtent(index) {
|
|
701
934
|
const value = {};
|
|
702
935
|
const ok = this._call("GeoKernelViewer_GetLayerProjectedExtent", Number(index), value);
|
|
@@ -748,10 +981,30 @@ class ViewerWindow {
|
|
|
748
981
|
this._call("GeoKernelViewer_ClearSelectedFeatures");
|
|
749
982
|
}
|
|
750
983
|
|
|
984
|
+
selectTopFeatureAt(screenX, screenY, pixelTolerance = 8) {
|
|
985
|
+
return this._call("GeoKernelViewer_SelectTopFeatureAt", Number(screenX), Number(screenY), Number(pixelTolerance));
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
addTopFeatureToSelectionAt(screenX, screenY, pixelTolerance = 8) {
|
|
989
|
+
return this._call("GeoKernelViewer_AddTopFeatureToSelectionAt", Number(screenX), Number(screenY), Number(pixelTolerance));
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
toggleTopFeatureSelectionAt(screenX, screenY, pixelTolerance = 8) {
|
|
993
|
+
return this._call("GeoKernelViewer_ToggleTopFeatureSelectionAt", Number(screenX), Number(screenY), Number(pixelTolerance));
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
selectedFeatures() {
|
|
997
|
+
return this._readJson("GeoKernelViewer_GetSelectedFeaturesJson", []);
|
|
998
|
+
}
|
|
999
|
+
|
|
751
1000
|
selectedFeatureCount() {
|
|
752
1001
|
return this._call("GeoKernelViewer_GetSelectedFeatureCount");
|
|
753
1002
|
}
|
|
754
1003
|
|
|
1004
|
+
zoomToSelectedFeatures() {
|
|
1005
|
+
return this._call("GeoKernelViewer_ZoomToSelectedFeatures");
|
|
1006
|
+
}
|
|
1007
|
+
|
|
755
1008
|
clearLayers() {
|
|
756
1009
|
this._call("GeoKernelViewer_ClearLayers");
|
|
757
1010
|
}
|
|
@@ -844,6 +1097,21 @@ class ViewerWindow {
|
|
|
844
1097
|
return parseJson(readWideJson(this.library.function(name), this.viewerHandle, ...args), fallback);
|
|
845
1098
|
}
|
|
846
1099
|
|
|
1100
|
+
_readStaticJson(name, fallback, ...args) {
|
|
1101
|
+
const fn = this.library.function(name);
|
|
1102
|
+
let bufferLength = 4096;
|
|
1103
|
+
for (let attempt = 0; attempt < 4; attempt += 1) {
|
|
1104
|
+
const out = ["\0".repeat(bufferLength)];
|
|
1105
|
+
const length = fn(...args, out, bufferLength);
|
|
1106
|
+
if (length < 0) throw new Error(`${name} failed with result ${length}.`);
|
|
1107
|
+
const nullIndex = out[0].indexOf("\0");
|
|
1108
|
+
const text = nullIndex >= 0 ? out[0].slice(0, nullIndex) : out[0];
|
|
1109
|
+
if (length < bufferLength - 1) return parseJson(text, fallback);
|
|
1110
|
+
bufferLength = Math.max(bufferLength * 2, length + 1);
|
|
1111
|
+
}
|
|
1112
|
+
throw new Error(`${name} output exceeded the supported buffer size.`);
|
|
1113
|
+
}
|
|
1114
|
+
|
|
847
1115
|
_requireViewer() {
|
|
848
1116
|
if (!this.viewerHandle) {
|
|
849
1117
|
throw new Error("GeoKernel viewer is closed.");
|