jupytergis-core 0.4.5__py3-none-any.whl → 0.6.0__py3-none-any.whl

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 (124) hide show
  1. jupytergis_core/_version.py +1 -1
  2. jupytergis_core/handler.py +301 -25
  3. jupytergis_core/jgis_ydoc.py +13 -1
  4. jupytergis_core/schema/__init__.py +24 -0
  5. jupytergis_core/schema/interfaces/__init__.py +3 -0
  6. jupytergis_core/schema/interfaces/export/__init__.py +3 -0
  7. jupytergis_core/schema/interfaces/export/exportGeoJson.py +18 -0
  8. jupytergis_core/schema/interfaces/export/exportGeoTiff.py +28 -0
  9. jupytergis_core/schema/interfaces/geoJsonSource.py +20 -0
  10. jupytergis_core/schema/interfaces/geojson.py +502 -0
  11. jupytergis_core/schema/interfaces/processing/__init__.py +3 -0
  12. jupytergis_core/schema/interfaces/processing/boundingBoxes.py +14 -0
  13. jupytergis_core/schema/interfaces/processing/buffer.py +23 -0
  14. jupytergis_core/schema/interfaces/processing/centroids.py +14 -0
  15. jupytergis_core/schema/interfaces/processing/concaveHull.py +21 -0
  16. jupytergis_core/schema/interfaces/processing/convexHull.py +14 -0
  17. jupytergis_core/schema/interfaces/processing/dissolve.py +24 -0
  18. jupytergis_core/schema/interfaces/project/__init__.py +3 -0
  19. jupytergis_core/schema/interfaces/project/jgis.py +137 -0
  20. jupytergis_core/schema/interfaces/project/layers/__init__.py +3 -0
  21. jupytergis_core/schema/interfaces/project/layers/heatmapLayer.py +30 -0
  22. jupytergis_core/schema/interfaces/project/layers/hillshadeLayer.py +19 -0
  23. jupytergis_core/schema/interfaces/project/layers/imageLayer.py +19 -0
  24. jupytergis_core/schema/interfaces/project/layers/rasterLayer.py +19 -0
  25. jupytergis_core/schema/interfaces/project/layers/stacLayer.py +19 -0
  26. jupytergis_core/schema/interfaces/project/layers/vectorLayer.py +57 -0
  27. jupytergis_core/schema/interfaces/project/layers/vectorTileLayer.py +22 -0
  28. jupytergis_core/schema/interfaces/project/layers/webGlLayer.py +58 -0
  29. jupytergis_core/schema/interfaces/project/sources/__init__.py +3 -0
  30. jupytergis_core/schema/interfaces/project/sources/geoTiffSource.py +27 -0
  31. jupytergis_core/schema/interfaces/project/sources/imageSource.py +29 -0
  32. jupytergis_core/schema/interfaces/project/sources/rasterDemSource.py +23 -0
  33. jupytergis_core/schema/interfaces/project/sources/rasterSource.py +36 -0
  34. jupytergis_core/schema/interfaces/project/sources/shapefileSource.py +31 -0
  35. jupytergis_core/schema/interfaces/project/sources/vectorTileSource.py +27 -0
  36. jupytergis_core/schema/interfaces/project/sources/videoSource.py +30 -0
  37. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/package.json +7 -5
  38. jupytergis_core-0.6.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/schemas/@jupytergis/jupytergis-core/jupytergis-settings.json +13 -0
  39. jupytergis_core-0.6.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/schemas/@jupytergis/jupytergis-core/package.json.orig +123 -0
  40. jupytergis_core-0.4.5.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/27.aea9e291ba3dd16790fb.js → jupytergis_core-0.6.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/27.6ee794baeb00791424c2.js +2 -2
  41. jupytergis_core-0.6.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/397.a6fa5a4d29479f45b270.js +1 -0
  42. jupytergis_core-0.6.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/432.48d67c4273f9195419e3.js +1 -0
  43. jupytergis_core-0.6.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/552.0936beb209d3ea5a1229.js +1 -0
  44. jupytergis_core-0.6.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/634.2747a436e7df0c53f51b.js +8 -0
  45. jupytergis_core-0.4.5.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/729.6eae404678a803e58788.js.LICENSE.txt → jupytergis_core-0.6.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/634.2747a436e7df0c53f51b.js.LICENSE.txt +50 -0
  46. jupytergis_core-0.6.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/671.b8a4f9c5fd02e51ec026.js +1 -0
  47. jupytergis_core-0.6.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/803.5f3759c98814aa602705.js +8 -0
  48. jupytergis_core-0.4.5.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/991.443bcba88f6a112c4b9e.js → jupytergis_core-0.6.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/991.35a1ef3613255bda4218.js +1 -1
  49. jupytergis_core-0.6.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/remoteEntry.0d09a4d6aa378d4b27c2.js +1 -0
  50. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/third-party-licenses.json +303 -9
  51. {jupytergis_core-0.4.5.dist-info → jupytergis_core-0.6.0.dist-info}/METADATA +1 -1
  52. jupytergis_core-0.6.0.dist-info/RECORD +117 -0
  53. jupytergis_core-0.4.5.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/31.ab2fa4c30bddf5b8e6b6.js +0 -1
  54. jupytergis_core-0.4.5.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/432.df2bee6966bdd5a48317.js +0 -1
  55. jupytergis_core-0.4.5.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/552.3f267df0d8b2c9ef2c40.js +0 -1
  56. jupytergis_core-0.4.5.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/656.c0f842aa97967d6d91f2.js +0 -1
  57. jupytergis_core-0.4.5.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/729.6eae404678a803e58788.js +0 -8
  58. jupytergis_core-0.4.5.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/803.8b9c4e2f8bed9130b6d0.js +0 -8
  59. jupytergis_core-0.4.5.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/remoteEntry.2155bee6ff3895543404.js +0 -1
  60. jupytergis_core-0.4.5.dist-info/RECORD +0 -82
  61. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/etc/jupyter/jupyter_server_config.d/jupytergis_core.json +0 -0
  62. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/026680ab0cd1523edc87.png +0 -0
  63. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/02ff7d503bbd90b21fc4.png +0 -0
  64. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/062a9554f6b4caac9713.png +0 -0
  65. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/064f37cecb8130ad66e8.png +0 -0
  66. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/08da2741746ddab81d04.png +0 -0
  67. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/0c6a0352b82839119f95.png +0 -0
  68. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/13c485bb93f5567f02fd.png +0 -0
  69. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/1474207a6b3ca1001e78.png +0 -0
  70. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/14b98240613d5256c621.png +0 -0
  71. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/154.0d16fbe1d1182d138b2c.js +0 -0
  72. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/1b97ea0f2b3af717cffa.png +0 -0
  73. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/1d440270da19a2f22fee.png +0 -0
  74. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/1ed164e010f3c0306d15.png +0 -0
  75. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/2218dfba22fc2b08e948.png +0 -0
  76. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/234.2f0fc49f516ad354aa18.js +0 -0
  77. /jupytergis_core-0.4.5.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/27.aea9e291ba3dd16790fb.js.LICENSE.txt → /jupytergis_core-0.6.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/27.6ee794baeb00791424c2.js.LICENSE.txt +0 -0
  78. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/2ab791b60c4058e664f8.png +0 -0
  79. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/2b24b6a745c11511f055.png +0 -0
  80. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/2d676bc0a01c2cd2fccb.png +0 -0
  81. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/2f02309ea499725612ea.png +0 -0
  82. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/32c7a73662cceb5bb1d7.png +0 -0
  83. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/350eec4ce9ae4bc10bca.wasm +0 -0
  84. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/363ca7c5f78deb6fd033.png +0 -0
  85. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/376.58a6410b7089dea5b0d5.js +0 -0
  86. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/3ae0bf244442de7efc35.png +0 -0
  87. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/3d48be10ffea86eb15de.png +0 -0
  88. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/407.da5d00862f4879fe3c9c.js +0 -0
  89. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/415edc3fa381260cf31e.png +0 -0
  90. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/42cbddf5e883673bc4e2.png +0 -0
  91. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/472.b2ea9ebc35d5ad4e1fcc.js +0 -0
  92. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/527ef171d5df15dc7da5.png +0 -0
  93. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/542.477a73b8682de0e8d45e.js +0 -0
  94. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/555.be80e60305924af2e139.js +0 -0
  95. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/5bb02252f243f8c7494f.png +0 -0
  96. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/5d181edc3c046e1454a1.png +0 -0
  97. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/5f32ad48aefe00e51312.png +0 -0
  98. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/618.86523276f857e0a3362e.js +0 -0
  99. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/6e4f6b4d0dfca3bd4450.png +0 -0
  100. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/71d436fb44627b6bfbd7.png +0 -0
  101. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/7b225dc2d37cd3582156.png +0 -0
  102. /jupytergis_core-0.4.5.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/803.8b9c4e2f8bed9130b6d0.js.LICENSE.txt → /jupytergis_core-0.6.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/803.5f3759c98814aa602705.js.LICENSE.txt +0 -0
  103. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/843ab141e62516b9df5c.png +0 -0
  104. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/8814e17f6b110e8f3e42.png +0 -0
  105. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/88b2ae0d29edb684eae5.png +0 -0
  106. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/971a42d174dd17b9451a.png +0 -0
  107. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/a3c609f5bff95a7a53be.png +0 -0
  108. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/a86d626c9ed2e222d190.png +0 -0
  109. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/a9e286b0c0264a9fc737.png +0 -0
  110. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/ab309078b494f850430a.png +0 -0
  111. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/b15e3989b7b90b5a8d9d.png +0 -0
  112. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/b36717fbb06f21d53b01.png +0 -0
  113. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/ba4b6e82fe5a816c40a5.png +0 -0
  114. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/bb2b310570da7a3587e9.png +0 -0
  115. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/be92bcf7bb99753b4b3d.png +0 -0
  116. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/c2ffa011d7f52a0ddf45.png +0 -0
  117. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/d83457b1b925c1718f6d.png +0 -0
  118. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/e473e1e9f20af114bbb4.data +0 -0
  119. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/f2617180c6907263a7ff.png +0 -0
  120. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/fe99a6dbf5a71d308989.png +0 -0
  121. {jupytergis_core-0.4.5.data → jupytergis_core-0.6.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/style.js +0 -0
  122. {jupytergis_core-0.4.5.dist-info → jupytergis_core-0.6.0.dist-info}/WHEEL +0 -0
  123. {jupytergis_core-0.4.5.dist-info → jupytergis_core-0.6.0.dist-info}/entry_points.txt +0 -0
  124. {jupytergis_core-0.4.5.dist-info → jupytergis_core-0.6.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,137 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/jgis.json
3
+ # timestamp: 2025-07-02T15:20:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+ from typing import Any, Dict, List, Optional, Union
9
+
10
+ from pydantic import BaseModel, ConfigDict, Field, RootModel, constr
11
+
12
+
13
+ class LayerType(Enum):
14
+ RasterLayer = 'RasterLayer'
15
+ VectorLayer = 'VectorLayer'
16
+ VectorTileLayer = 'VectorTileLayer'
17
+ HillshadeLayer = 'HillshadeLayer'
18
+ WebGlLayer = 'WebGlLayer'
19
+ ImageLayer = 'ImageLayer'
20
+ HeatmapLayer = 'HeatmapLayer'
21
+ StacLayer = 'StacLayer'
22
+
23
+
24
+ class SourceType(Enum):
25
+ RasterSource = 'RasterSource'
26
+ VectorTileSource = 'VectorTileSource'
27
+ GeoJSONSource = 'GeoJSONSource'
28
+ RasterDemSource = 'RasterDemSource'
29
+ VideoSource = 'VideoSource'
30
+ ImageSource = 'ImageSource'
31
+ ShapefileSource = 'ShapefileSource'
32
+ GeoTiffSource = 'GeoTiffSource'
33
+
34
+
35
+ class JGISSource(BaseModel):
36
+ model_config = ConfigDict(
37
+ extra='forbid',
38
+ )
39
+ name: str
40
+ type: SourceType
41
+ parameters: Optional[Dict[str, Any]] = None
42
+
43
+
44
+ class JGISSources(RootModel[Optional[Dict[str, JGISSource]]]):
45
+ root: Optional[Dict[str, JGISSource]] = None
46
+
47
+
48
+ class JGISOptions(BaseModel):
49
+ model_config = ConfigDict(
50
+ extra='forbid',
51
+ )
52
+ latitude: Optional[float] = 0
53
+ longitude: Optional[float] = 0
54
+ zoom: Optional[float] = 0
55
+ bearing: Optional[float] = 0
56
+ pitch: Optional[float] = 0
57
+ extent: Optional[List[float]] = None
58
+ projection: Optional[str] = 'EPSG:3857'
59
+ useExtent: Optional[bool] = False
60
+
61
+
62
+ class Operator(Enum):
63
+ field__ = '=='
64
+ field___1 = '!='
65
+ field_ = '>'
66
+ field__1 = '<'
67
+ field___2 = '>='
68
+ field___3 = '<='
69
+ between = 'between'
70
+
71
+
72
+ class JGISFilterItem(BaseModel):
73
+ model_config = ConfigDict(
74
+ extra='forbid',
75
+ )
76
+ operator: Operator
77
+ feature: str
78
+ value: Union[str, float]
79
+ betweenMin: Optional[float] = None
80
+ betweenMax: Optional[float] = None
81
+
82
+
83
+ class JGISFilter(BaseModel):
84
+ model_config = ConfigDict(
85
+ extra='forbid',
86
+ )
87
+ logicalOp: str
88
+ appliedFilters: List[JGISFilterItem]
89
+
90
+
91
+ class JGISLayer(BaseModel):
92
+ model_config = ConfigDict(
93
+ extra='forbid',
94
+ )
95
+ name: str
96
+ type: LayerType
97
+ visible: bool
98
+ parameters: Optional[Dict[str, Any]] = None
99
+ filters: Optional[JGISFilter] = None
100
+
101
+
102
+ class JGISLayers(RootModel[Optional[Dict[str, JGISLayer]]]):
103
+ root: Optional[Dict[str, JGISLayer]] = None
104
+
105
+
106
+ class IJGISContent(BaseModel):
107
+ model_config = ConfigDict(
108
+ extra='forbid',
109
+ )
110
+ schemaVersion: Optional[str] = '0.5.0'
111
+ layers: JGISLayers
112
+ sources: JGISSources
113
+ layerTree: Optional[JGISLayerTree] = None
114
+ options: Optional[JGISOptions] = None
115
+ metadata: Optional[Dict[constr(pattern=r'^.*$'), str]] = None
116
+
117
+
118
+ class JGISLayerGroup(BaseModel):
119
+ model_config = ConfigDict(
120
+ extra='forbid',
121
+ )
122
+ name: str
123
+ layers: List[JGISLayerItem]
124
+ visible: Optional[bool] = True
125
+ parameters: Optional[Dict[str, Any]] = None
126
+
127
+
128
+ class JGISLayerItem(RootModel[Union[str, JGISLayerGroup]]):
129
+ root: Union[str, JGISLayerGroup] = Field(..., title='IJGISLayerItem')
130
+
131
+
132
+ class JGISLayerTree(RootModel[List[JGISLayerItem]]):
133
+ root: List[JGISLayerItem] = Field(..., title='IJGISLayerTree')
134
+
135
+
136
+ IJGISContent.model_rebuild()
137
+ JGISLayerGroup.model_rebuild()
@@ -0,0 +1,3 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: schema
3
+ # timestamp: 2025-07-02T15:20:59+00:00
@@ -0,0 +1,30 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/layers/heatmapLayer.json
3
+ # timestamp: 2025-07-02T15:20:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import List, Optional
8
+
9
+ from pydantic import BaseModel, ConfigDict, Field, confloat
10
+
11
+
12
+ class SymbologyState(BaseModel):
13
+ renderType: str
14
+ colorRamp: Optional[str] = 'cool'
15
+
16
+
17
+ class IHeatmapLayer(BaseModel):
18
+ model_config = ConfigDict(
19
+ extra='forbid',
20
+ )
21
+ source: str = Field(..., description='The id of the source')
22
+ opacity: Optional[confloat(ge=0.0, le=1.0, multiple_of=0.1)] = Field(
23
+ 1, description='The opacity of the source'
24
+ )
25
+ radius: float = Field(..., description='Radius size in pixels')
26
+ blur: float = Field(..., description='Blur size in pixels')
27
+ color: Optional[List[str]] = ['#00f', '#0ff', '#0f0', '#ff0', '#f00']
28
+ symbologyState: Optional[SymbologyState] = Field(
29
+ None, description='The state of the symbology panel options'
30
+ )
@@ -0,0 +1,19 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/layers/hillshadeLayer.json
3
+ # timestamp: 2025-07-02T15:20:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Optional
8
+
9
+ from pydantic import BaseModel, ConfigDict, Field
10
+
11
+
12
+ class IHillshadeLayer(BaseModel):
13
+ model_config = ConfigDict(
14
+ extra='forbid',
15
+ )
16
+ source: str = Field(..., description='The id of the source')
17
+ shadowColor: Optional[str] = Field(
18
+ '#473B24', description='The color of the the shadows'
19
+ )
@@ -0,0 +1,19 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/layers/imageLayer.json
3
+ # timestamp: 2025-07-02T15:20:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Optional
8
+
9
+ from pydantic import BaseModel, ConfigDict, Field, confloat
10
+
11
+
12
+ class IImageLayer(BaseModel):
13
+ model_config = ConfigDict(
14
+ extra='forbid',
15
+ )
16
+ source: str = Field(..., description='The id of the source')
17
+ opacity: Optional[confloat(ge=0.0, le=1.0, multiple_of=0.1)] = Field(
18
+ 1, description='The opacity of the source'
19
+ )
@@ -0,0 +1,19 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/layers/rasterLayer.json
3
+ # timestamp: 2025-07-02T15:20:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Optional
8
+
9
+ from pydantic import BaseModel, ConfigDict, Field, confloat
10
+
11
+
12
+ class IRasterLayer(BaseModel):
13
+ model_config = ConfigDict(
14
+ extra='forbid',
15
+ )
16
+ source: str = Field(..., description='The id of the source')
17
+ opacity: Optional[confloat(ge=0.0, le=1.0, multiple_of=0.1)] = Field(
18
+ 1, description='The opacity of the source'
19
+ )
@@ -0,0 +1,19 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/layers/stacLayer.json
3
+ # timestamp: 2025-07-02T15:20:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Any, Dict, Optional
8
+
9
+ from pydantic import BaseModel, ConfigDict, Field, confloat
10
+
11
+
12
+ class IStacLayer(BaseModel):
13
+ model_config = ConfigDict(
14
+ extra='forbid',
15
+ )
16
+ data: Dict[str, Any] = Field(..., description='The data of the source')
17
+ opacity: Optional[confloat(ge=0.0, le=1.0, multiple_of=0.1)] = Field(
18
+ 1, description='The opacity of the source'
19
+ )
@@ -0,0 +1,57 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/layers/vectorLayer.json
3
+ # timestamp: 2025-07-02T15:20:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+ from typing import Any, Dict, Optional
9
+
10
+ from pydantic import BaseModel, ConfigDict, Field, confloat
11
+
12
+
13
+ class RenderType(Enum):
14
+ Single_Symbol = 'Single Symbol'
15
+ Graduated = 'Graduated'
16
+ Categorized = 'Categorized'
17
+
18
+
19
+ class Method(Enum):
20
+ color = 'color'
21
+ radius = 'radius'
22
+
23
+
24
+ class Mode(Enum):
25
+ quantile = 'quantile'
26
+ equal_interval = 'equal interval'
27
+ jenks = 'jenks'
28
+ pretty = 'pretty'
29
+ logarithmic = 'logarithmic'
30
+
31
+
32
+ class SymbologyState(BaseModel):
33
+ model_config = ConfigDict(
34
+ extra='forbid',
35
+ )
36
+ renderType: RenderType
37
+ value: Optional[str] = None
38
+ method: Optional[Method] = None
39
+ colorRamp: Optional[str] = 'cool'
40
+ nClasses: Optional[str] = '9'
41
+ mode: Optional[Mode] = 'equal interval'
42
+
43
+
44
+ class IVectorLayer(BaseModel):
45
+ model_config = ConfigDict(
46
+ extra='forbid',
47
+ )
48
+ source: str = Field(..., description='The id of the source')
49
+ color: Optional[Dict[str, Any]] = Field(
50
+ None, description='The color of the the object'
51
+ )
52
+ opacity: Optional[confloat(ge=0.0, le=1.0, multiple_of=0.1)] = Field(
53
+ 1, description='The opacity of the the object'
54
+ )
55
+ symbologyState: Optional[SymbologyState] = Field(
56
+ None, description='The state of the symbology panel options'
57
+ )
@@ -0,0 +1,22 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/layers/vectorTileLayer.json
3
+ # timestamp: 2025-07-02T15:20:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Any, Dict, Optional
8
+
9
+ from pydantic import BaseModel, ConfigDict, Field, confloat
10
+
11
+
12
+ class IVectorTileLayer(BaseModel):
13
+ model_config = ConfigDict(
14
+ extra='forbid',
15
+ )
16
+ source: str = Field(..., description='The id of the source')
17
+ color: Optional[Dict[str, Any]] = Field(
18
+ None, description='The color of the the object'
19
+ )
20
+ opacity: Optional[confloat(ge=0.0, le=1.0, multiple_of=0.1)] = Field(
21
+ 1, description='The opacity of the the object'
22
+ )
@@ -0,0 +1,58 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/layers/webGlLayer.json
3
+ # timestamp: 2025-07-02T15:20:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+ from typing import List, Optional, Union
9
+
10
+ from pydantic import BaseModel, ConfigDict, Field, confloat
11
+
12
+
13
+ class Interpolation(Enum):
14
+ discrete = 'discrete'
15
+ linear = 'linear'
16
+ exact = 'exact'
17
+
18
+
19
+ class Mode(Enum):
20
+ continuous = 'continuous'
21
+ equal_interval = 'equal interval'
22
+ quantile = 'quantile'
23
+
24
+
25
+ class SymbologyState(BaseModel):
26
+ model_config = ConfigDict(
27
+ extra='forbid',
28
+ )
29
+ renderType: str
30
+ band: Optional[float] = None
31
+ redBand: Optional[float] = None
32
+ greenBand: Optional[float] = None
33
+ blueBand: Optional[float] = None
34
+ alphaBand: Optional[float] = None
35
+ interpolation: Optional[Interpolation] = None
36
+ colorRamp: Optional[str] = 'cool'
37
+ nClasses: Optional[str] = '9'
38
+ mode: Optional[Mode] = 'equal interval'
39
+
40
+
41
+ class IWebGlLayer(BaseModel):
42
+ model_config = ConfigDict(
43
+ extra='forbid',
44
+ )
45
+ source: str = Field(..., description='The id of the source')
46
+ opacity: Optional[confloat(ge=0.0, le=1.0, multiple_of=0.1)] = Field(
47
+ 1, description='The opacity of the source'
48
+ )
49
+ color: Optional[
50
+ Union[
51
+ str,
52
+ float,
53
+ List[Union[str, float, List[Union[float, str, List[Union[float, str]]]]]],
54
+ ]
55
+ ] = Field(None, description='The color of the the object')
56
+ symbologyState: Optional[SymbologyState] = Field(
57
+ None, description='The state of the symbology panel options'
58
+ )
@@ -0,0 +1,3 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: schema
3
+ # timestamp: 2025-07-02T15:20:59+00:00
@@ -0,0 +1,27 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/sources/geoTiffSource.json
3
+ # timestamp: 2025-07-02T15:20:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import List, Optional
8
+
9
+ from pydantic import BaseModel, ConfigDict, Field
10
+
11
+
12
+ class Url(BaseModel):
13
+ url: Optional[str] = None
14
+ min: Optional[float] = None
15
+ max: Optional[float] = None
16
+
17
+
18
+ class IGeoTiffSource(BaseModel):
19
+ model_config = ConfigDict(
20
+ extra='forbid',
21
+ )
22
+ urls: List[Url] = Field(..., description='URLs', min_length=1)
23
+ normalize: Optional[bool] = True
24
+ wrapX: Optional[bool] = False
25
+ interpolate: Optional[bool] = Field(
26
+ False, description='Interpolate between grid cells when overzooming?'
27
+ )
@@ -0,0 +1,29 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/sources/imageSource.json
3
+ # timestamp: 2025-07-02T15:20:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import List, Optional
8
+
9
+ from pydantic import BaseModel, ConfigDict, Field, RootModel
10
+
11
+
12
+ class Coordinate(RootModel[List[float]]):
13
+ root: List[float]
14
+
15
+
16
+ class IImageSource(BaseModel):
17
+ model_config = ConfigDict(
18
+ extra='forbid',
19
+ )
20
+ path: str = Field(..., description='Path that points to an image')
21
+ coordinates: List[Coordinate] = Field(
22
+ ...,
23
+ description='Corners of image specified in longitude, latitude pairs',
24
+ max_length=4,
25
+ min_length=4,
26
+ )
27
+ interpolate: Optional[bool] = Field(
28
+ False, description='Interpolate between grid cells when overzooming?'
29
+ )
@@ -0,0 +1,23 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/sources/rasterDemSource.json
3
+ # timestamp: 2025-07-02T15:20:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Dict, Optional
8
+
9
+ from pydantic import BaseModel, ConfigDict, Field
10
+
11
+
12
+ class IRasterDemSource(BaseModel):
13
+ model_config = ConfigDict(
14
+ extra='forbid',
15
+ )
16
+ url: str = Field(..., description='The url to the tile provider')
17
+ attribution: Optional[str] = Field(
18
+ None, description='The attribution for the raster-dem source'
19
+ )
20
+ urlParameters: Optional[Dict[str, str]] = None
21
+ interpolate: Optional[bool] = Field(
22
+ False, description='Interpolate between grid cells when overzooming?'
23
+ )
@@ -0,0 +1,36 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/sources/rasterSource.json
3
+ # timestamp: 2025-07-02T15:20:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Dict, List, Optional
8
+
9
+ from pydantic import BaseModel, ConfigDict, Field, confloat
10
+
11
+
12
+ class IRasterSource(BaseModel):
13
+ model_config = ConfigDict(
14
+ extra='forbid',
15
+ )
16
+ url: str = Field(..., description='The url to the tile provider')
17
+ minZoom: confloat(ge=0.0, le=24.0) = Field(
18
+ ..., description='The minimum zoom level for the raster source'
19
+ )
20
+ maxZoom: confloat(ge=0.0, le=24.0) = Field(
21
+ ..., description='The maximum zoom level for the raster source'
22
+ )
23
+ attribution: Optional[str] = Field(
24
+ '', description='The attribution for the raster source'
25
+ )
26
+ htmlAttribution: Optional[str] = Field(
27
+ '', description='The html attribution for the raster source'
28
+ )
29
+ provider: Optional[str] = Field('', description='The map provider')
30
+ bounds: Optional[List[List[float]]] = Field(
31
+ [], description='The bounds of the source'
32
+ )
33
+ urlParameters: Optional[Dict[str, str]] = {}
34
+ interpolate: Optional[bool] = Field(
35
+ False, description='Interpolate between grid cells when overzooming?'
36
+ )
@@ -0,0 +1,31 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/sources/shapefileSource.json
3
+ # timestamp: 2025-07-02T15:20:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Dict, Optional
8
+
9
+ from pydantic import BaseModel, ConfigDict, Field
10
+
11
+
12
+ class IShapefileSource(BaseModel):
13
+ model_config = ConfigDict(
14
+ extra='forbid',
15
+ )
16
+ path: str = Field(
17
+ ..., description='The path to the shapefile (.shp, .zip, or folder URL).'
18
+ )
19
+ attribution: Optional[str] = Field(
20
+ '', description='The attribution for the shapefile source.'
21
+ )
22
+ projection: Optional[str] = Field(
23
+ 'WGS84', description='The projection information for the shapefile (optional).'
24
+ )
25
+ encoding: Optional[str] = Field(
26
+ 'UTF-8', description="The encoding used for the shapefile's DBF (optional)."
27
+ )
28
+ additionalFiles: Optional[Dict[str, str]] = Field(
29
+ {},
30
+ description='Additional files associated with the shapefile (e.g., .dbf, .prj, .cpg).',
31
+ )
@@ -0,0 +1,27 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/sources/vectorTileSource.json
3
+ # timestamp: 2025-07-02T15:20:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Dict, Optional
8
+
9
+ from pydantic import BaseModel, ConfigDict, Field, confloat
10
+
11
+
12
+ class IVectorTileSource(BaseModel):
13
+ model_config = ConfigDict(
14
+ extra='forbid',
15
+ )
16
+ url: str = Field(..., description='The url to the tile provider')
17
+ minZoom: confloat(ge=0.0, le=24.0) = Field(
18
+ ..., description='The minimum zoom level for the vector source'
19
+ )
20
+ maxZoom: confloat(ge=0.0, le=24.0) = Field(
21
+ ..., description='The maximum zoom level for the vector source'
22
+ )
23
+ attribution: Optional[str] = Field(
24
+ None, description='The attribution for the vector source'
25
+ )
26
+ provider: Optional[str] = Field(None, description='The map provider')
27
+ urlParameters: Optional[Dict[str, str]] = None
@@ -0,0 +1,30 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/sources/videoSource.json
3
+ # timestamp: 2025-07-02T15:20:59+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import List
8
+
9
+ from pydantic import BaseModel, ConfigDict, Field, RootModel
10
+
11
+
12
+ class Coordinate(RootModel[List[float]]):
13
+ root: List[float]
14
+
15
+
16
+ class IVideoSource(BaseModel):
17
+ model_config = ConfigDict(
18
+ extra='forbid',
19
+ )
20
+ urls: List[str] = Field(
21
+ ...,
22
+ description='URLs to video content in order of preferred format',
23
+ min_length=1,
24
+ )
25
+ coordinates: List[Coordinate] = Field(
26
+ ...,
27
+ description='Corners of video specified in longitude, latitude pairs',
28
+ max_length=4,
29
+ min_length=4,
30
+ )
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jupytergis/jupytergis-core",
3
- "version": "0.4.5",
3
+ "version": "0.6.0",
4
4
  "description": "JupyterGIS core extension",
5
5
  "keywords": [
6
6
  "jupyter",
@@ -15,7 +15,8 @@
15
15
  "author": "JupyterGIS contributors",
16
16
  "files": [
17
17
  "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}",
18
- "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}"
18
+ "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}",
19
+ "schema/**/*.{json,js,ts}"
19
20
  ],
20
21
  "main": "lib/index.js",
21
22
  "types": "lib/index.d.ts",
@@ -53,8 +54,8 @@
53
54
  },
54
55
  "dependencies": {
55
56
  "@jupyter/collaborative-drive": "^3.0.0",
56
- "@jupytergis/base": "^0.4.5",
57
- "@jupytergis/schema": "^0.4.5",
57
+ "@jupytergis/base": "^0.6.0",
58
+ "@jupytergis/schema": "^0.6.0",
58
59
  "@jupyterlab/application": "^4.3.0",
59
60
  "@jupyterlab/apputils": "^4.3.0",
60
61
  "@jupyterlab/docregistry": "^4.3.0",
@@ -91,6 +92,7 @@
91
92
  "access": "public"
92
93
  },
93
94
  "jupyterlab": {
95
+ "schemaDir": "schema",
94
96
  "discovery": {
95
97
  "server": {
96
98
  "managers": [
@@ -118,7 +120,7 @@
118
120
  }
119
121
  },
120
122
  "_build": {
121
- "load": "static/remoteEntry.2155bee6ff3895543404.js",
123
+ "load": "static/remoteEntry.0d09a4d6aa378d4b27c2.js",
122
124
  "extension": "./extension",
123
125
  "style": "./style"
124
126
  }
@@ -0,0 +1,13 @@
1
+ {
2
+ "title": "JupyterGIS Settings",
3
+ "description": "Settings for the JupyterGIS extension.",
4
+ "type": "object",
5
+ "properties": {
6
+ "proxyUrl": {
7
+ "type": "string",
8
+ "title": "Proxy URL",
9
+ "description": "The proxy URL to use for external requests.",
10
+ "default": "https://corsproxy.io"
11
+ }
12
+ }
13
+ }