jupytergis-core 0.4.4__py3-none-any.whl → 0.5.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 (115) hide show
  1. jupytergis_core/_version.py +1 -1
  2. jupytergis_core/jgis_ydoc.py +13 -1
  3. jupytergis_core/schema/__init__.py +24 -0
  4. jupytergis_core/schema/interfaces/__init__.py +3 -0
  5. jupytergis_core/schema/interfaces/export/__init__.py +3 -0
  6. jupytergis_core/schema/interfaces/export/exportGeojson.py +18 -0
  7. jupytergis_core/schema/interfaces/export/exportGeotiff.py +28 -0
  8. jupytergis_core/schema/interfaces/geojson.py +502 -0
  9. jupytergis_core/schema/interfaces/geojsonsource.py +20 -0
  10. jupytergis_core/schema/interfaces/processing/__init__.py +3 -0
  11. jupytergis_core/schema/interfaces/processing/buffer.py +23 -0
  12. jupytergis_core/schema/interfaces/processing/dissolve.py +24 -0
  13. jupytergis_core/schema/interfaces/project/__init__.py +3 -0
  14. jupytergis_core/schema/interfaces/project/jgis.py +136 -0
  15. jupytergis_core/schema/interfaces/project/layers/__init__.py +3 -0
  16. jupytergis_core/schema/interfaces/project/layers/heatmapLayer.py +30 -0
  17. jupytergis_core/schema/interfaces/project/layers/hillshadeLayer.py +19 -0
  18. jupytergis_core/schema/interfaces/project/layers/imageLayer.py +19 -0
  19. jupytergis_core/schema/interfaces/project/layers/rasterlayer.py +19 -0
  20. jupytergis_core/schema/interfaces/project/layers/vectorTileLayer.py +30 -0
  21. jupytergis_core/schema/interfaces/project/layers/vectorlayer.py +64 -0
  22. jupytergis_core/schema/interfaces/project/layers/webGlLayer.py +57 -0
  23. jupytergis_core/schema/interfaces/project/sources/__init__.py +3 -0
  24. jupytergis_core/schema/interfaces/project/sources/geoTiffSource.py +27 -0
  25. jupytergis_core/schema/interfaces/project/sources/imageSource.py +29 -0
  26. jupytergis_core/schema/interfaces/project/sources/rasterDemSource.py +23 -0
  27. jupytergis_core/schema/interfaces/project/sources/rastersource.py +36 -0
  28. jupytergis_core/schema/interfaces/project/sources/shapefileSource.py +31 -0
  29. jupytergis_core/schema/interfaces/project/sources/vectortilesource.py +27 -0
  30. jupytergis_core/schema/interfaces/project/sources/videoSource.py +30 -0
  31. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/package.json +7 -5
  32. jupytergis_core-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/schemas/@jupytergis/jupytergis-core/jupytergis-settings.json +13 -0
  33. jupytergis_core-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/schemas/@jupytergis/jupytergis-core/package.json.orig +123 -0
  34. jupytergis_core-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/377.2ba30d7a93a2a2819b1b.js +1 -0
  35. jupytergis_core-0.4.4.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/729.324a42416a3ebbd3b351.js → jupytergis_core-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/729.2540a8113c71e8eb28ef.js +2 -2
  36. jupytergis_core-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/893.0bf9ee057c7e4666c364.js +1 -0
  37. jupytergis_core-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/991.13deb14ad0c10be40859.js +1 -0
  38. jupytergis_core-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/remoteEntry.6e9db18c72727800e9ea.js +1 -0
  39. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/third-party-licenses.json +6 -6
  40. {jupytergis_core-0.4.4.dist-info → jupytergis_core-0.5.0.dist-info}/METADATA +1 -1
  41. jupytergis_core-0.5.0.dist-info/RECORD +112 -0
  42. jupytergis_core-0.4.4.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/31.e9cd0d7591d75f6758de.js +0 -1
  43. jupytergis_core-0.4.4.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/713.32aef4e64952eb9ee4ea.js +0 -1
  44. jupytergis_core-0.4.4.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/991.2b2f966775f1e2f4e94e.js +0 -1
  45. jupytergis_core-0.4.4.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/remoteEntry.92b9caad6441d1ab3223.js +0 -1
  46. jupytergis_core-0.4.4.dist-info/RECORD +0 -82
  47. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/etc/jupyter/jupyter_server_config.d/jupytergis_core.json +0 -0
  48. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/026680ab0cd1523edc87.png +0 -0
  49. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/02ff7d503bbd90b21fc4.png +0 -0
  50. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/062a9554f6b4caac9713.png +0 -0
  51. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/064f37cecb8130ad66e8.png +0 -0
  52. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/08da2741746ddab81d04.png +0 -0
  53. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/0c6a0352b82839119f95.png +0 -0
  54. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/13c485bb93f5567f02fd.png +0 -0
  55. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/1474207a6b3ca1001e78.png +0 -0
  56. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/14b98240613d5256c621.png +0 -0
  57. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/154.0d16fbe1d1182d138b2c.js +0 -0
  58. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/1b97ea0f2b3af717cffa.png +0 -0
  59. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/1d440270da19a2f22fee.png +0 -0
  60. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/1ed164e010f3c0306d15.png +0 -0
  61. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/2218dfba22fc2b08e948.png +0 -0
  62. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/234.2f0fc49f516ad354aa18.js +0 -0
  63. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/27.aea9e291ba3dd16790fb.js +0 -0
  64. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/27.aea9e291ba3dd16790fb.js.LICENSE.txt +0 -0
  65. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/2ab791b60c4058e664f8.png +0 -0
  66. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/2b24b6a745c11511f055.png +0 -0
  67. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/2d676bc0a01c2cd2fccb.png +0 -0
  68. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/2f02309ea499725612ea.png +0 -0
  69. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/32c7a73662cceb5bb1d7.png +0 -0
  70. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/350eec4ce9ae4bc10bca.wasm +0 -0
  71. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/363ca7c5f78deb6fd033.png +0 -0
  72. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/376.58a6410b7089dea5b0d5.js +0 -0
  73. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/3ae0bf244442de7efc35.png +0 -0
  74. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/3d48be10ffea86eb15de.png +0 -0
  75. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/407.da5d00862f4879fe3c9c.js +0 -0
  76. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/415edc3fa381260cf31e.png +0 -0
  77. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/42cbddf5e883673bc4e2.png +0 -0
  78. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/432.df2bee6966bdd5a48317.js +0 -0
  79. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/472.b2ea9ebc35d5ad4e1fcc.js +0 -0
  80. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/527ef171d5df15dc7da5.png +0 -0
  81. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/542.477a73b8682de0e8d45e.js +0 -0
  82. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/552.3f267df0d8b2c9ef2c40.js +0 -0
  83. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/555.be80e60305924af2e139.js +0 -0
  84. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/5bb02252f243f8c7494f.png +0 -0
  85. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/5d181edc3c046e1454a1.png +0 -0
  86. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/5f32ad48aefe00e51312.png +0 -0
  87. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/618.86523276f857e0a3362e.js +0 -0
  88. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/6e4f6b4d0dfca3bd4450.png +0 -0
  89. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/71d436fb44627b6bfbd7.png +0 -0
  90. /jupytergis_core-0.4.4.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/729.324a42416a3ebbd3b351.js.LICENSE.txt → /jupytergis_core-0.5.0.data/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/729.2540a8113c71e8eb28ef.js.LICENSE.txt +0 -0
  91. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/7b225dc2d37cd3582156.png +0 -0
  92. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/803.8b9c4e2f8bed9130b6d0.js +0 -0
  93. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/803.8b9c4e2f8bed9130b6d0.js.LICENSE.txt +0 -0
  94. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/843ab141e62516b9df5c.png +0 -0
  95. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/8814e17f6b110e8f3e42.png +0 -0
  96. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/88b2ae0d29edb684eae5.png +0 -0
  97. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/971a42d174dd17b9451a.png +0 -0
  98. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/a3c609f5bff95a7a53be.png +0 -0
  99. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/a86d626c9ed2e222d190.png +0 -0
  100. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/a9e286b0c0264a9fc737.png +0 -0
  101. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/ab309078b494f850430a.png +0 -0
  102. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/b15e3989b7b90b5a8d9d.png +0 -0
  103. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/b36717fbb06f21d53b01.png +0 -0
  104. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/ba4b6e82fe5a816c40a5.png +0 -0
  105. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/bb2b310570da7a3587e9.png +0 -0
  106. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/be92bcf7bb99753b4b3d.png +0 -0
  107. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/c2ffa011d7f52a0ddf45.png +0 -0
  108. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/d83457b1b925c1718f6d.png +0 -0
  109. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/e473e1e9f20af114bbb4.data +0 -0
  110. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/f2617180c6907263a7ff.png +0 -0
  111. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/fe99a6dbf5a71d308989.png +0 -0
  112. {jupytergis_core-0.4.4.data → jupytergis_core-0.5.0.data}/data/share/jupyter/labextensions/@jupytergis/jupytergis-core/static/style.js +0 -0
  113. {jupytergis_core-0.4.4.dist-info → jupytergis_core-0.5.0.dist-info}/WHEEL +0 -0
  114. {jupytergis_core-0.4.4.dist-info → jupytergis_core-0.5.0.dist-info}/entry_points.txt +0 -0
  115. {jupytergis_core-0.4.4.dist-info → jupytergis_core-0.5.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,136 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/jgis.json
3
+ # timestamp: 2025-05-08T01:23:34+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
+
22
+
23
+ class SourceType(Enum):
24
+ RasterSource = 'RasterSource'
25
+ VectorTileSource = 'VectorTileSource'
26
+ GeoJSONSource = 'GeoJSONSource'
27
+ RasterDemSource = 'RasterDemSource'
28
+ VideoSource = 'VideoSource'
29
+ ImageSource = 'ImageSource'
30
+ ShapefileSource = 'ShapefileSource'
31
+ GeoTiffSource = 'GeoTiffSource'
32
+
33
+
34
+ class JGISSource(BaseModel):
35
+ model_config = ConfigDict(
36
+ extra='forbid',
37
+ )
38
+ name: str
39
+ type: SourceType
40
+ parameters: Optional[Dict[str, Any]] = None
41
+
42
+
43
+ class JGISSources(RootModel[Optional[Dict[str, JGISSource]]]):
44
+ root: Optional[Dict[str, JGISSource]] = None
45
+
46
+
47
+ class JGISOptions(BaseModel):
48
+ model_config = ConfigDict(
49
+ extra='forbid',
50
+ )
51
+ latitude: Optional[float] = 0
52
+ longitude: Optional[float] = 0
53
+ zoom: Optional[float] = 0
54
+ bearing: Optional[float] = 0
55
+ pitch: Optional[float] = 0
56
+ extent: Optional[List[float]] = None
57
+ projection: Optional[str] = 'EPSG:3857'
58
+ useExtent: Optional[bool] = False
59
+
60
+
61
+ class Operator(Enum):
62
+ field__ = '=='
63
+ field___1 = '!='
64
+ field_ = '>'
65
+ field__1 = '<'
66
+ field___2 = '>='
67
+ field___3 = '<='
68
+ between = 'between'
69
+
70
+
71
+ class JGISFilterItem(BaseModel):
72
+ model_config = ConfigDict(
73
+ extra='forbid',
74
+ )
75
+ operator: Operator
76
+ feature: str
77
+ value: Union[str, float]
78
+ betweenMin: Optional[float] = None
79
+ betweenMax: Optional[float] = None
80
+
81
+
82
+ class JGISFilter(BaseModel):
83
+ model_config = ConfigDict(
84
+ extra='forbid',
85
+ )
86
+ logicalOp: str
87
+ appliedFilters: List[JGISFilterItem]
88
+
89
+
90
+ class JGISLayer(BaseModel):
91
+ model_config = ConfigDict(
92
+ extra='forbid',
93
+ )
94
+ name: str
95
+ type: LayerType
96
+ visible: bool
97
+ parameters: Optional[Dict[str, Any]] = None
98
+ filters: Optional[JGISFilter] = None
99
+
100
+
101
+ class JGISLayers(RootModel[Optional[Dict[str, JGISLayer]]]):
102
+ root: Optional[Dict[str, JGISLayer]] = None
103
+
104
+
105
+ class IJGISContent(BaseModel):
106
+ model_config = ConfigDict(
107
+ extra='forbid',
108
+ )
109
+ schemaVersion: Optional[str] = '0.5.0'
110
+ layers: JGISLayers
111
+ sources: JGISSources
112
+ layerTree: Optional[JGISLayerTree] = None
113
+ options: Optional[JGISOptions] = None
114
+ metadata: Optional[Dict[constr(pattern=r'^.*$'), str]] = None
115
+
116
+
117
+ class JGISLayerGroup(BaseModel):
118
+ model_config = ConfigDict(
119
+ extra='forbid',
120
+ )
121
+ name: str
122
+ layers: List[JGISLayerItem]
123
+ visible: Optional[bool] = True
124
+ parameters: Optional[Dict[str, Any]] = None
125
+
126
+
127
+ class JGISLayerItem(RootModel[Union[str, JGISLayerGroup]]):
128
+ root: Union[str, JGISLayerGroup] = Field(..., title='IJGISLayerItem')
129
+
130
+
131
+ class JGISLayerTree(RootModel[List[JGISLayerItem]]):
132
+ root: List[JGISLayerItem] = Field(..., title='IJGISLayerTree')
133
+
134
+
135
+ IJGISContent.model_rebuild()
136
+ JGISLayerGroup.model_rebuild()
@@ -0,0 +1,3 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: schema
3
+ # timestamp: 2025-05-08T01:23:34+00:00
@@ -0,0 +1,30 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/layers/heatmapLayer.json
3
+ # timestamp: 2025-05-08T01:23:34+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-05-08T01:23:34+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-05-08T01:23:34+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-05-08T01:23:34+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,30 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/layers/vectorTileLayer.json
3
+ # timestamp: 2025-05-08T01:23:34+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 Type(Enum):
14
+ circle = 'circle'
15
+ fill = 'fill'
16
+ line = 'line'
17
+
18
+
19
+ class IVectorTileLayer(BaseModel):
20
+ model_config = ConfigDict(
21
+ extra='forbid',
22
+ )
23
+ source: str = Field(..., description='The id of the source')
24
+ type: Type = Field(..., description='The type of vector layer')
25
+ color: Optional[Dict[str, Any]] = Field(
26
+ None, description='The color of the the object'
27
+ )
28
+ opacity: Optional[confloat(ge=0.0, le=1.0, multiple_of=0.1)] = Field(
29
+ 1, description='The opacity of the the object'
30
+ )
@@ -0,0 +1,64 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/layers/vectorlayer.json
3
+ # timestamp: 2025-05-08T01:23:34+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 Type(Enum):
14
+ circle = 'circle'
15
+ fill = 'fill'
16
+ line = 'line'
17
+
18
+
19
+ class RenderType(Enum):
20
+ Single_Symbol = 'Single Symbol'
21
+ Graduated = 'Graduated'
22
+ Categorized = 'Categorized'
23
+
24
+
25
+ class Method(Enum):
26
+ color = 'color'
27
+ radius = 'radius'
28
+
29
+
30
+ class Mode(Enum):
31
+ quantile = 'quantile'
32
+ equal_interval = 'equal interval'
33
+ jenks = 'jenks'
34
+ pretty = 'pretty'
35
+ logarithmic = 'logarithmic'
36
+
37
+
38
+ class SymbologyState(BaseModel):
39
+ model_config = ConfigDict(
40
+ extra='forbid',
41
+ )
42
+ renderType: RenderType
43
+ value: Optional[str] = None
44
+ method: Optional[Method] = None
45
+ colorRamp: Optional[str] = 'cool'
46
+ nClasses: Optional[str] = '9'
47
+ mode: Optional[Mode] = 'equal interval'
48
+
49
+
50
+ class IVectorLayer(BaseModel):
51
+ model_config = ConfigDict(
52
+ extra='forbid',
53
+ )
54
+ source: str = Field(..., description='The id of the source')
55
+ type: Type = Field(..., description='The type of vector layer')
56
+ color: Optional[Dict[str, Any]] = Field(
57
+ None, description='The color of the the object'
58
+ )
59
+ opacity: Optional[confloat(ge=0.0, le=1.0, multiple_of=0.1)] = Field(
60
+ 1, description='The opacity of the the object'
61
+ )
62
+ symbologyState: Optional[SymbologyState] = Field(
63
+ None, description='The state of the symbology panel options'
64
+ )
@@ -0,0 +1,57 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/layers/webGlLayer.json
3
+ # timestamp: 2025-05-08T01:23:34+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
+ interpolation: Optional[Interpolation] = None
35
+ colorRamp: Optional[str] = 'cool'
36
+ nClasses: Optional[str] = '9'
37
+ mode: Optional[Mode] = 'equal interval'
38
+
39
+
40
+ class IWebGlLayer(BaseModel):
41
+ model_config = ConfigDict(
42
+ extra='forbid',
43
+ )
44
+ source: str = Field(..., description='The id of the source')
45
+ opacity: Optional[confloat(ge=0.0, le=1.0, multiple_of=0.1)] = Field(
46
+ 1, description='The opacity of the source'
47
+ )
48
+ color: Optional[
49
+ Union[
50
+ str,
51
+ float,
52
+ List[Union[str, float, List[Union[float, str, List[Union[float, str]]]]]],
53
+ ]
54
+ ] = Field(None, description='The color of the the object')
55
+ symbologyState: Optional[SymbologyState] = Field(
56
+ None, description='The state of the symbology panel options'
57
+ )
@@ -0,0 +1,3 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: schema
3
+ # timestamp: 2025-05-08T01:23:34+00:00
@@ -0,0 +1,27 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: project/sources/geoTiffSource.json
3
+ # timestamp: 2025-05-08T01:23:34+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-05-08T01:23:34+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-05-08T01:23:34+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-05-08T01:23:34+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-05-08T01:23:34+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-05-08T01:23:34+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-05-08T01:23:34+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.4",
3
+ "version": "0.5.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.4",
57
- "@jupytergis/schema": "^0.4.4",
57
+ "@jupytergis/base": "^0.5.0",
58
+ "@jupytergis/schema": "^0.5.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.92b9caad6441d1ab3223.js",
123
+ "load": "static/remoteEntry.6e9db18c72727800e9ea.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
+ }