itowns 2.44.3-next.3 → 2.44.3-next.31

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 (95) hide show
  1. package/CODING.md +1 -1
  2. package/CONTRIBUTORS.md +1 -0
  3. package/dist/debug.js +1 -1
  4. package/dist/debug.js.map +1 -1
  5. package/dist/itowns.js +1 -1
  6. package/dist/itowns.js.LICENSE.txt +0 -2
  7. package/dist/itowns.js.map +1 -1
  8. package/dist/itowns_widgets.js +1 -1
  9. package/dist/itowns_widgets.js.map +1 -1
  10. package/examples/3dtiles_loader.html +109 -45
  11. package/examples/config.json +3 -10
  12. package/examples/entwine_3d_loader.html +3 -1
  13. package/examples/entwine_simple_loader.html +1 -1
  14. package/examples/images/itowns_logo.svg +123 -0
  15. package/examples/js/plugins/COGParser.js +1 -1
  16. package/examples/jsm/OGC3DTilesHelper.js +1 -1
  17. package/examples/layers/JSONLayers/GeoidMNT.json +3 -1
  18. package/examples/source_file_geojson_3d.html +0 -1
  19. package/examples/source_file_kml_raster_usgs.html +0 -1
  20. package/examples/source_stream_wfs_raster.html +0 -7
  21. package/examples/vector_tile_mapbox_raster.html +91 -0
  22. package/lib/Controls/GlobeControls.js +45 -28
  23. package/lib/Controls/StateControl.js +5 -2
  24. package/lib/Converter/Feature2Mesh.js +10 -4
  25. package/lib/Converter/Feature2Texture.js +6 -1
  26. package/lib/Converter/convertToTile.js +3 -8
  27. package/lib/Converter/textureConverter.js +3 -4
  28. package/lib/Core/Deprecated/Undeprecator.js +0 -1
  29. package/lib/Core/Feature.js +1 -2
  30. package/lib/Core/Geographic/Coordinates.js +143 -132
  31. package/lib/Core/Geographic/Crs.js +140 -145
  32. package/lib/Core/Geographic/Extent.js +72 -267
  33. package/lib/Core/Geographic/GeoidGrid.js +1 -1
  34. package/lib/Core/Math/Ellipsoid.js +62 -21
  35. package/lib/Core/Prefab/Globe/Atmosphere.js +4 -8
  36. package/lib/Core/Prefab/Globe/GlobeLayer.js +22 -15
  37. package/lib/Core/Prefab/Globe/GlobeTileBuilder.js +111 -0
  38. package/lib/Core/Prefab/GlobeView.js +2 -7
  39. package/lib/Core/Prefab/Planar/PlanarLayer.js +17 -11
  40. package/lib/Core/Prefab/Planar/PlanarTileBuilder.js +43 -43
  41. package/lib/Core/Prefab/TileBuilder.js +27 -32
  42. package/lib/Core/Prefab/computeBufferTileGeometry.js +189 -130
  43. package/lib/Core/Style.js +60 -42
  44. package/lib/Core/Tile/Tile.js +219 -0
  45. package/lib/Core/Tile/TileGrid.js +43 -0
  46. package/lib/Core/TileGeometry.js +112 -28
  47. package/lib/Core/TileMesh.js +3 -3
  48. package/lib/Core/View.js +15 -8
  49. package/lib/Layer/C3DTilesLayer.js +20 -16
  50. package/lib/Layer/ColorLayer.js +35 -9
  51. package/lib/Layer/CopcLayer.js +5 -0
  52. package/lib/Layer/ElevationLayer.js +39 -7
  53. package/lib/Layer/EntwinePointTileLayer.js +12 -5
  54. package/lib/Layer/FeatureGeometryLayer.js +20 -6
  55. package/lib/Layer/GeometryLayer.js +42 -11
  56. package/lib/Layer/LabelLayer.js +45 -27
  57. package/lib/Layer/Layer.js +83 -57
  58. package/lib/Layer/OGC3DTilesLayer.js +81 -30
  59. package/lib/Layer/OrientedImageLayer.js +11 -5
  60. package/lib/Layer/PointCloudLayer.js +74 -30
  61. package/lib/Layer/Potree2Layer.js +7 -2
  62. package/lib/Layer/PotreeLayer.js +8 -3
  63. package/lib/Layer/RasterLayer.js +12 -2
  64. package/lib/Layer/TiledGeometryLayer.js +69 -13
  65. package/lib/Main.js +2 -2
  66. package/lib/Parser/GeoJsonParser.js +1 -1
  67. package/lib/Parser/VectorTileParser.js +42 -29
  68. package/lib/Parser/XbilParser.js +14 -2
  69. package/lib/Provider/Fetcher.js +5 -1
  70. package/lib/Provider/URLBuilder.js +22 -11
  71. package/lib/Renderer/Camera.js +1 -1
  72. package/lib/Renderer/Label2DRenderer.js +9 -7
  73. package/lib/Renderer/OBB.js +11 -13
  74. package/lib/Renderer/PointsMaterial.js +1 -1
  75. package/lib/Renderer/RasterTile.js +1 -2
  76. package/lib/Renderer/SphereHelper.js +0 -6
  77. package/lib/Source/CopcSource.js +13 -2
  78. package/lib/Source/EntwinePointTileSource.js +14 -4
  79. package/lib/Source/FileSource.js +1 -4
  80. package/lib/Source/Source.js +1 -4
  81. package/lib/Source/TMSSource.js +10 -9
  82. package/lib/Source/VectorTilesSource.js +32 -22
  83. package/lib/Source/WFSSource.js +15 -10
  84. package/lib/Source/WMSSource.js +56 -18
  85. package/lib/Source/WMTSSource.js +13 -7
  86. package/lib/Utils/CameraUtils.js +1 -1
  87. package/lib/Utils/gui/C3DTilesStyle.js +2 -3
  88. package/lib/Utils/placeObjectOnGround.js +0 -1
  89. package/package.json +13 -6
  90. package/examples/3dtiles_25d.html +0 -120
  91. package/examples/3dtiles_basic.html +0 -94
  92. package/examples/3dtiles_batch_table.html +0 -86
  93. package/examples/3dtiles_ion.html +0 -126
  94. package/examples/3dtiles_pointcloud.html +0 -95
  95. package/lib/Core/Prefab/Globe/BuilderEllipsoidTile.js +0 -110
@@ -11,7 +11,15 @@
11
11
  <style type="text/css">
12
12
  #description {
13
13
  z-index: 2;
14
- right: 10px;
14
+ left: 10px;
15
+ }
16
+
17
+ #featureInfoText {
18
+ font-size: small;
19
+ }
20
+
21
+ #description .marg {
22
+ margin: 10px;
15
23
  }
16
24
  </style>
17
25
 
@@ -21,12 +29,17 @@
21
29
  <div id="viewerDiv"></div>
22
30
  <div id="description">Specify the URL of a tileset to load:
23
31
  <input type="text" id="url" />
24
- <button onclick="setURL(document.getElementById('url').value)">
25
- Load
26
- </button>
32
+ <button onclick="readURL()">Load</button>
33
+ <div class="marg">
34
+ <button onClick="loadLyon()">Load Lyon 1 (Mesh)</button>
35
+ <button onClick="loadSete()">Load Sete (Point Cloud)</button>
36
+ <button onClick="loadLille()">Load Lille (Mesh)</button>
37
+ <div id="share"></div>
38
+ </div>
27
39
  <hr />
40
+ <p id="featureInfoText" class="marg"><em>Display feature information by clicking on it</em></p>
28
41
  <p><b>Feature Information:</b></p>
29
- <div id="featureInfo"></div>
42
+ <div id="featureInfo" class="marg"></div>
30
43
  </div>
31
44
 
32
45
  <script src="js/GUI/GuiTools.js"></script>
@@ -41,10 +54,11 @@
41
54
  "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.165.0/examples/jsm/"
42
55
  }
43
56
  }
44
- </script>
57
+ </script>
45
58
 
46
59
  <script type="module">
47
60
  import { AmbientLight } from 'three';
61
+ import { MeshoptDecoder } from 'three/addons/libs/meshopt_decoder.module.js';
48
62
  import {
49
63
  zoomToLayer,
50
64
  fillHTMLWithPickingInfo,
@@ -52,28 +66,17 @@
52
66
 
53
67
  const {
54
68
  TMSSource, WMTSSource, OGC3DTilesSource,
55
- ColorLayer, ElevationLayer, OGC3DTilesLayer,
69
+ ColorLayer, ElevationLayer, OGC3DTilesLayer, PNTS_SIZE_MODE,
56
70
  GlobeView, Coordinates, Fetcher,
57
71
  } = itowns;
58
72
 
59
- const uri = new URL(location);
60
- const state = {
61
- // URL to tileset JSON
62
- tileset: uri.searchParams.get('tileset'),
63
- // Cesium ION /
64
- assetId: uri.searchParams.get('assetId'),
65
- };
66
-
67
- function setURL(url) {
68
- if (!url) return;
73
+ window.layer = null; // 3D Tiles layer
69
74
 
70
- uri.searchParams.set('tileset', url);
71
- history.pushState(null, '', `?${uri.searchParams.toString()}`);
75
+ const uri = new URL(location);
72
76
 
73
- location.reload();
74
- }
77
+ window.gui = new dat.GUI();
75
78
 
76
- // ---- CREATE A GlobeView FOR SUPPORTING DATA VISUALIZATION ----
79
+ // ---- Create a GlobeView ----
77
80
 
78
81
  // Define camera initial position
79
82
  const placement = {
@@ -85,45 +88,89 @@
85
88
  const viewerDiv = document.getElementById('viewerDiv');
86
89
 
87
90
  // Create a GlobeView
88
- const view = new GlobeView(viewerDiv, placement, {});
91
+ const view = new GlobeView(viewerDiv, placement, {
92
+ controls: {
93
+ minDistance: 100,
94
+ }
95
+ });
96
+
97
+ // Enable various compression support for 3D Tiles tileset:
98
+ // - `KHR_draco_mesh_compression` mesh compression extension
99
+ // - `KHR_texture_basisu` texture compression extension
100
+ // - `EXT_meshopt_compression` data compression extension
101
+ itowns.enableDracoLoader('./libs/draco/');
102
+ itowns.enableKtx2Loader('./lib/basis/', view.renderer);
103
+ itowns.enableMeshoptDecoder(MeshoptDecoder);
89
104
 
90
105
  // Add ambient light to globally illuminates all objects
91
- const light = new AmbientLight(0x404040, 15);
106
+ const light = new AmbientLight(0x404040, 40);
92
107
  view.scene.add(light);
93
108
 
94
109
  // Setup loading screen
95
110
  setupLoadingScreen(viewerDiv, view);
96
111
 
97
- // Setup debug menu
98
- const menuGlobe = new GuiTools('menuDiv', view, 300);
99
- debug.createTileDebugUI(menuGlobe.gui, view, view.tileLayer);
100
-
101
-
102
- // ---- ADD A BASEMAP ----
112
+ // ---- Add a basemap ----
103
113
 
104
114
  // Add one imagery layer to the scene. This layer's properties are
105
115
  // defined in a json file, but it cou ld be defined as a plain js
106
116
  // object. See `Layer` documentation for more info.
107
117
  Fetcher.json('./layers/JSONLayers/OPENSM.json').then((config) => {
108
- const layer = new ColorLayer('Ortho', {
118
+ const colorLayer = new ColorLayer('Ortho', {
109
119
  ...config,
110
120
  source: new TMSSource(config.source),
111
121
  });
112
- view.addLayer(layer).then(menuGlobe.addLayerGUI.bind(menuGlobe));
122
+ view.addLayer(colorLayer);
113
123
  });
114
124
 
115
- // ---- ADD 3D TILES TILESET ----
125
+ // ---- Add 3D terrain ----
116
126
 
117
- // Enable various compression support for 3D Tiles tileset:
118
- // - `KHR_draco_mesh_compression` mesh compression extension
119
- // - `KHR_texture_basisu` texture compresion extension
120
- itowns.enableDracoLoader('./libs/draco/');
121
- itowns.enableKtx2Loader('./lib/basis/', view.renderer);
127
+ // Add two elevation layers: world terrain and a more precise terrain for france
128
+ // These will deform iTowns globe geometry to represent terrain elevation.
129
+ function addElevationLayerFromConfig(config) {
130
+ config.source = new itowns.WMTSSource(config.source);
131
+ var elevationLayer = new itowns.ElevationLayer(config.id, config);
132
+ view.addLayer(elevationLayer);
133
+ }
134
+ itowns.Fetcher.json('./layers/JSONLayers/IGN_MNT_HIGHRES.json').then(addElevationLayerFromConfig);
135
+ itowns.Fetcher.json('./layers/JSONLayers/WORLD_DTM.json').then(addElevationLayerFromConfig);
136
+
137
+ // ---------- 3D Tiles loading
138
+
139
+ function readURL() {
140
+ const url = document.getElementById('url').value;
141
+
142
+ if (url) {
143
+ setUrl(url);
144
+ }
145
+ }
146
+
147
+ function setUrl(url) {
148
+ if (!url) return;
149
+
150
+ const input_url = document.getElementById('url');
151
+ if (!input_url) return;
152
+
153
+ uri.searchParams.set('copc', url);
154
+ history.replaceState(null, null, `?${uri.searchParams.toString()}`);
155
+
156
+ input_url.value = url;
157
+ load(url);
158
+ }
122
159
 
123
- if (state.tileset) {
124
- const source = new OGC3DTilesSource({ url: state.tileset });
125
- const layer = new OGC3DTilesLayer('3DTiles', {
160
+
161
+ function load(url) {
162
+ const source = new OGC3DTilesSource({ url });
163
+
164
+ if (window.layer) {
165
+ gui.removeFolder('Layer 3DTiles');
166
+ view.removeLayer('3DTiles');
167
+ view.notifyChange();
168
+ window.layer.delete();
169
+ }
170
+
171
+ window.layer = new OGC3DTilesLayer('3DTiles', {
126
172
  source,
173
+ pntsSizeMode: PNTS_SIZE_MODE.ATTENUATED,
127
174
  });
128
175
 
129
176
  // Add an event for picking the 3D Tiles layer and displaying
@@ -131,20 +178,37 @@
131
178
  const pickingArgs = {
132
179
  htmlDiv: document.getElementById('featureInfo'),
133
180
  view,
134
- layer,
181
+ layer: window.layer,
135
182
  };
136
183
 
137
184
  // Add the layer to our view
138
- view.addLayer(layer).then((layer) => {
185
+ view.addLayer(window.layer).then((layer) => {
139
186
  zoomToLayer(view, layer);
140
187
  window.addEventListener('click',
141
188
  (event) => fillHTMLWithPickingInfo(event, pickingArgs), false);
142
189
  });
143
190
 
144
- debug.createOGC3DTilesDebugUI(menuGlobe.gui, view, layer);
191
+ window.layer.whenReady
192
+ .then(() => debug.createOGC3DTilesDebugUI(gui, view, window.layer));
193
+ }
194
+
195
+ function loadLyon() {
196
+ setUrl("https://raw.githubusercontent.com/iTowns/iTowns2-sample-data/refs/heads/master/3DTiles/lyon1-4978/tileset.json");
145
197
  }
146
198
 
147
- window.setURL = setURL;
199
+ function loadSete() {
200
+ setUrl("https://raw.githubusercontent.com/iTowns/iTowns2-sample-data/master/pointclouds/pnts-sete-2021-0756_6256/tileset.json");
201
+ }
202
+
203
+ function loadLille() {
204
+ setUrl("https://webimaging.lillemetropole.fr/externe/maillage/2020_mel_5cm/tileset.json");
205
+ }
206
+
207
+ window.readURL = readURL;
208
+ window.loadLyon = loadLyon;
209
+ window.loadSete = loadSete;
210
+ window.loadLille = loadLille;
211
+
148
212
  </script>
149
213
  </body>
150
214
  </html>
@@ -14,16 +14,8 @@
14
14
  "geoid_geoidLayer": "Display geoid heights"
15
15
  },
16
16
 
17
- "3d Tiles": {
18
- "3dtiles_basic": "on 3D map",
19
- "3dtiles_25d": "On 2.5D map",
20
- "3dtiles_batch_table": "Batch table Hierarchy extension",
21
- "3dtiles_ion": "From Cesium ion",
22
- "3dtiles_pointcloud": "Pointcloud classification"
23
- },
24
-
25
- "3D Tiles (new)": {
26
- "3dtiles_loader": "3D Tiles tileset loader"
17
+ "3D Tiles": {
18
+ "3dtiles_loader": "3D Tiles loader"
27
19
  },
28
20
 
29
21
  "Pointcloud": {
@@ -39,6 +31,7 @@
39
31
  "Vector tiles": {
40
32
  "vector_tile_raster_3d": "Raster on 3D map",
41
33
  "vector_tile_raster_2d": "Raster on 2D map",
34
+ "vector_tile_mapbox_raster": "Mapbox Vector Tiles to raster",
42
35
  "vector_tile_3d_mesh": "Vector tile to 3d objects",
43
36
  "vector_tile_3d_mesh_mapbox": "Mapbox Vector tile to 3d objects",
44
37
  "vector_tile_dragndrop": "Drag and drop a style"
@@ -87,8 +87,10 @@
87
87
  eptSource = new itowns.EntwinePointTileSource({ url });
88
88
 
89
89
  if (eptLayer) {
90
- view.removeLayer('ept');
90
+ debugGui.removeFolder(eptLayer.debugUI);
91
+ view.removeLayer('Entwine Point Tile');
91
92
  view.notifyChange();
93
+ eptLayer.delete();
92
94
  }
93
95
 
94
96
  eptLayer = new itowns.EntwinePointTileLayer('Entwine Point Tile', {
@@ -88,7 +88,7 @@
88
88
  eptSource = new itowns.EntwinePointTileSource({ url });
89
89
 
90
90
  if (eptLayer) {
91
- debugGUI.removeFolder(eptLayer.debugUI);
91
+ debugGui.removeFolder(eptLayer.debugUI);
92
92
  view.removeLayer('Entwine Point Tile');
93
93
  view.notifyChange();
94
94
  eptLayer.delete();
@@ -0,0 +1,123 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg
3
+ width="2123.8423"
4
+ height="504"
5
+ viewBox="0 0 2123.8423 504"
6
+ version="1.1"
7
+ id="svg91"
8
+ sodipodi:docname="logo.svg"
9
+ inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
10
+ inkscape:label="layer_i"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
13
+ xmlns:xlink="http://www.w3.org/1999/xlink"
14
+ xmlns="http://www.w3.org/2000/svg"
15
+ xmlns:svg="http://www.w3.org/2000/svg">
16
+ <sodipodi:namedview
17
+ id="namedview93"
18
+ pagecolor="#ffffff"
19
+ bordercolor="#666666"
20
+ borderopacity="1.0"
21
+ inkscape:pageshadow="2"
22
+ inkscape:pageopacity="0.0"
23
+ inkscape:pagecheckerboard="0"
24
+ showgrid="false"
25
+ inkscape:zoom="0.21100549"
26
+ inkscape:cx="1390.9591"
27
+ inkscape:cy="1049.7357"
28
+ inkscape:window-width="1850"
29
+ inkscape:window-height="1016"
30
+ inkscape:window-x="70"
31
+ inkscape:window-y="1107"
32
+ inkscape:window-maximized="1"
33
+ inkscape:current-layer="svg91"
34
+ showguides="true"
35
+ inkscape:guide-bbox="true">
36
+ <sodipodi:guide
37
+ position="303,12"
38
+ orientation="0,-1"
39
+ id="guide149742" />
40
+ <sodipodi:guide
41
+ position="922.7708,353.293"
42
+ orientation="0,-1"
43
+ id="guide161704" />
44
+ <sodipodi:guide
45
+ position="1076.0872,118.0449"
46
+ orientation="0,-1"
47
+ id="guide161710" />
48
+ <sodipodi:guide
49
+ position="1172.7675,246.6387"
50
+ orientation="0,-1"
51
+ id="guide161712" />
52
+ </sodipodi:namedview>
53
+ <defs
54
+ id="defs85">
55
+ <linearGradient
56
+ inkscape:collect="always"
57
+ id="linearGradient124706">
58
+ <stop
59
+ style="stop-color:#7ea8c5;stop-opacity:1"
60
+ offset="0"
61
+ id="stop124702" />
62
+ <stop
63
+ style="stop-color:#404e73;stop-opacity:1"
64
+ offset="1"
65
+ id="stop124704" />
66
+ </linearGradient>
67
+ <style
68
+ id="style83">
69
+ .cls-1 {
70
+ opacity: 0.4;
71
+ }
72
+ </style>
73
+ <linearGradient
74
+ inkscape:collect="always"
75
+ xlink:href="#linearGradient124706"
76
+ id="linearGradient124708"
77
+ x1="1129.2401"
78
+ y1="606.47083"
79
+ x2="1401.899"
80
+ y2="774.6546"
81
+ gradientUnits="userSpaceOnUse" />
82
+ </defs>
83
+ <g
84
+ id="g149219"
85
+ inkscape:label="Globe"
86
+ transform="translate(-523,-390)">
87
+ <ellipse
88
+ style="display:inline;fill:#c8d3da;fill-opacity:1;fill-rule:evenodd"
89
+ id="path1259"
90
+ cx="1227.5"
91
+ cy="692"
92
+ rx="202.5"
93
+ ry="202"
94
+ inkscape:label="Circle" />
95
+ <g
96
+ id="g124715"
97
+ style="display:inline;stroke:#355c77;stroke-opacity:1"
98
+ inkscape:label="Arrows">
99
+ <g
100
+ id="g124711"
101
+ style="stroke:#355c77;stroke-opacity:1"
102
+ inkscape:label="g124711">
103
+ <path
104
+ style="fill:url(#linearGradient124708);fill-opacity:1;stroke:none;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
105
+ d="m 1330,681 61,-12 c 3.02,7.842 4.076,15.87 6.019,24 0.623,2.608 1.725,6.621 4.931,7.079 3.39,0.484 5.145,-4.756 6.294,-7.079 4.368,-8.837 7.681,-18.455 10.126,-28 6.613,-25.808 -5.85,-43.846 -20.997,-64 -5.472,-7.282 -12.303,-17.758 -20.354,-22.338 -4.273,-2.4306 -5.13,2.0092 -4.714,5.3388 0.586,4.6919 7.851,20.6632 3.171,23.9322 -2.895,2.022 -10.95,0.067 -14.476,0.067 -10.657,-10e-4 -21.347,-0.246 -32,0.015 -4.325,0.106 -9.726,2.094 -13.892,0.382 -5.397,-2.219 -7.556,-13.418 -9.687,-18.397 -7.301,-17.0598 -16.733,-32.6765 -25.421,-49 5.562,-1.763 24.398,-1.5626 26.824,-7.2245 2.682,-6.2591 -15.778,-11.6544 -19.824,-13.3511 -16.725,-7.013 -34.232,-12.7414 -52,-16.4213 -6.905,-1.4301 -15.602,-3.9163 -21.535,1.4267 -9.584,8.6288 -15.545,24.2163 -21.218,35.5702 -1.756,3.5154 -6.626,10.6646 -1.928,13.821 8.653,5.8139 20.931,-6.3429 29.576,-1.7786 4.537,2.3953 6.205,9.4776 7.761,13.9576 4.228,12.1783 8.181,24.53 11.46,37 1.02,3.88 4.614,11.885 2.683,15.697 -2.377,4.69 -15.124,5.832 -19.799,7.163 -16.494,4.695 -32.732,10.384 -49,15.807 -4.374,1.458 -13.407,6.621 -17.891,4.977 -7.289,-2.674 -4.547,-35.284 -17.019,-27.036 -5.418,3.583 -8.841,11.197 -12.514,16.392 -10.2548,14.501 -20.0164,29.506 -28.7149,45 -3.9849,7.098 -10.3602,15.972 -4.2083,23.815 3.6295,4.627 10.3443,6.941 15.3472,9.761 13.8979,7.833 28.591,14.399 43,21.205 4.886,2.308 14.588,9.972 19.566,4.897 7.959,-8.114 -7.807,-22.054 -1.784,-30.399 3.34,-4.629 13.088,-4.493 18.218,-5.476 17.25,-3.306 34.664,-5.608 52,-8.393 4.543,-0.729 16.572,-4.766 20.411,-1.637 3.876,3.159 4.049,14.529 4.989,19.227 3.19,15.949 5.824,31.89 8.024,48 0.723,5.296 3.474,14.919 0.548,19.775 -5.411,8.981 -25.656,0.601 -29.171,11.33 -1.841,5.617 6.874,11.422 10.109,14.895 8.451,9.072 17.016,17.641 26.09,26.09 4.394,4.091 8.431,9.791 15,9.823 7.581,0.036 13.971,-7.022 19,-11.928 12.818,-12.503 24.842,-25.974 35.996,-39.985 3.543,-4.45 12.487,-12.805 12.176,-18.891 -0.593,-11.601 -26.368,5.893 -29.399,-4.168 -2.107,-6.995 0.227,-18.497 0.227,-25.941 0,-21.005 0.853,-42.26 -3,-63"
106
+ id="path1080"
107
+ sodipodi:nodetypes="ccsscccssscscccscsccsscsccscscsscsscccscscccscccscsc"
108
+ inkscape:label="path1080" />
109
+ </g>
110
+ </g>
111
+ </g>
112
+ <path
113
+ id="path952"
114
+ style="display:inline;fill:#404e73;fill-opacity:1"
115
+ inkscape:label="T wns"
116
+ d="M 177.03906,0 176.91602,93.58398 303,94 V 492 H 409.99414 L 410.5,94.5 538.5,93.5 539.0195,0 Z M 2011.0176,134.28125 c -13.0632,0.12998 -25.5667,1.33054 -36.8633,3.63281 -29.4349,5.99891 -57.9681,21.05292 -73.8867,38.98047 -12.3465,13.90461 -21.0569,31.08151 -24.6992,48.71485 -2.306,11.16435 -2.1202,33.20565 0.3613,42.9082 3.8861,15.19442 12.6728,29.33206 26.4336,42.5332 17.1315,16.43468 37.8519,27.767 72.9277,39.88477 26.8743,9.28436 38.5632,16.26831 43.2481,25.84375 2.4031,4.91179 2.6657,6.40755 2.2519,12.78711 -0.5206,8.02613 -2.1474,11.92677 -6.998,16.77734 -7.1349,7.1349 -19.3393,10.38075 -38.793,10.31445 -24.4588,-0.0833 -56.8353,-8.26242 -81.3359,-20.54687 -4.31,-2.161 -8.34,-3.76166 -8.9551,-3.55664 -1.2952,0.43175 -19.849,73.70135 -19.0078,75.0625 0.3086,0.4992 3.8636,2.41232 7.9004,4.25195 21.9315,9.99451 50.5827,16.99204 79.4902,19.41406 12.4848,1.04603 43.0849,0.48063 54.9082,-1.01367 38.4999,-4.86586 68.3037,-18.04186 88.5781,-39.16015 14.0553,-14.64031 22.6133,-31.44619 26.0528,-51.16797 2.1158,-12.13186 1.3753,-33.68965 -1.5606,-45.46875 -5.6685,-22.74204 -19.5206,-41.66585 -41.0273,-56.04688 -15.1873,-10.15539 -26.2884,-15.30705 -58.543,-27.16992 -36.0413,-13.25557 -46.6692,-22.13625 -45.248,-37.80859 0.83,-9.1535 5.475,-15.93482 13.8339,-20.19922 17.7737,-9.06744 56.359,-5.47043 87.0977,8.11914 11.915,5.26763 13.4655,5.6248 14.1797,3.27148 2.9956,-9.87087 17.6841,-68.85641 17.4472,-70.06445 -0.4198,-2.14067 -16.4538,-8.45661 -30.8222,-12.14063 -21.8739,-5.60839 -45.1988,-8.36897 -66.9707,-8.15234 z m -328.5235,8.21094 c -20.9646,0 -40.1175,4.76669 -57.4609,14.30078 -17.3434,9.33124 -33.7343,23.93681 -49.1719,43.81641 V 150.70703 H 1473.5156 V 491.5 h 102.3457 V 323.8418 c 0,-31.03651 6.0974,-55.27731 18.2949,-72.72266 12.1976,-17.64821 28.9707,-26.47266 50.3165,-26.47266 8.767,0 16.5802,2.02888 23.4414,6.08594 6.8612,3.85422 12.2926,9.3318 16.2949,16.43164 3.0494,5.27419 5.1455,13.48958 6.289,24.64649 1.3341,11.15691 2.002,31.44178 2.002,60.85547 V 457.72461 491.5 h 102.916 V 283.98047 c 0,-46.04763 -9.6238,-81.13979 -28.873,-105.2793 -19.0587,-24.1395 -47.0751,-36.20898 -84.0489,-36.20898 z M 922.7715,150.70703 1007.1504,492 h 111.8398 L 1172.7676,257.36133 1226.8262,492 h 111.8418 l 84.3808,-341.29297 h -99.541 l -54.0605,232.81055 -53.7735,-232.81055 h -85.5273 l -54.0586,235.24805 -53.7774,-235.24805 z" />
117
+ <path
118
+ id="path41630"
119
+ style="display:inline;fill:#7ea8c5;fill-opacity:1"
120
+ d="M 56.2207,0 C 25.17087,2e-5 2e-5,25.17087 0,56.2207 c 1e-5,31.04983 25.17087,56.22069 56.2207,56.22071 31.04984,-1e-5 56.2207,-25.17087 56.22071,-56.22071 C 112.44139,25.17087 87.27053,10e-6 56.2207,0 Z M 4.20703,151.33203 C 3.98701,264.88792 3.91235,378.44395 3.82849,492 c 34.67057,0 69.34114,0 104.01172,0 -0.29968,-113.55583 -0.46282,-227.11189 -0.63318,-340.66797 -34.33333,0 -68.66667,0 -103,0 z"
121
+ inkscape:label="i"
122
+ sodipodi:nodetypes="sssssccccc" />
123
+ </svg>
@@ -235,7 +235,7 @@ const COGParser = (function _() {
235
235
  */
236
236
  parse: async function _(data, options) {
237
237
  const source = options.in;
238
- const tileExtent = options.extent.as(source.crs);
238
+ const tileExtent = options.extent.isExtent ? options.extent.as(source.crs) : options.extent.toExtent(source.crs);
239
239
 
240
240
  const level = selectLevel(source, tileExtent, source.tileWidth, source.tileHeight);
241
241
  const viewport = makeWindowFromExtent(source, tileExtent, level.resolution);
@@ -47,7 +47,7 @@ function zoomToSphere(view, tile, sphere) {
47
47
  const distance = radius * Math.tan(fov * 2);
48
48
 
49
49
  return {
50
- coord: new Coordinates('EPSG:4978', center),
50
+ coord: new Coordinates('EPSG:4978').setFromVector3(center),
51
51
  range: distance + radius,
52
52
  };
53
53
  }
@@ -4,7 +4,9 @@
4
4
  "updateStrategy": {
5
5
  "type": 0
6
6
  },
7
- "zmin": -12000,
7
+ "clampValues": {
8
+ "min": -12000
9
+ },
8
10
  "source": {
9
11
  "url": "https://raw.githubusercontent.com/iTowns/iTowns2-sample-data/master/geoid/geoid/bil/%TILEMATRIX/geoid_%COL_%ROW.bil",
10
12
  "format": "image/x-bil;bits=32",
@@ -54,7 +54,6 @@
54
54
  crs: 'EPSG:4326',
55
55
  format: 'application/json',
56
56
  }),
57
- transparent: true,
58
57
  opacity: 0.7,
59
58
  zoom: { min: 10 },
60
59
  style: {
@@ -69,7 +69,6 @@
69
69
  }
70
70
 
71
71
  var kmlStyle = {
72
- zoom: { min: 10, max: 20 },
73
72
  text: {
74
73
  field: '{name}',
75
74
  haloColor: 'black',
@@ -53,12 +53,6 @@
53
53
  itowns.Fetcher.json('./layers/JSONLayers/IGN_MNT_HIGHRES.json').then(addElevationLayerFromConfig);
54
54
  itowns.Fetcher.json('./layers/JSONLayers/WORLD_DTM.json').then(addElevationLayerFromConfig);
55
55
 
56
- function isValidData(data) {
57
- if(data.features[0].geometries.length < 1000) {
58
- return data;
59
- }
60
- }
61
-
62
56
  var wfsBuildingSource = new itowns.WFSSource({
63
57
  url: 'https://data.geopf.fr/wfs/ows?',
64
58
  version: '2.0.0',
@@ -102,7 +96,6 @@
102
96
  width: 2.0,
103
97
  },
104
98
  },
105
- isValidData: isValidData,
106
99
  source: wfsBuildingSource,
107
100
  zoom: { max: 20, min: 13 },
108
101
  });
@@ -0,0 +1,91 @@
1
+ <html>
2
+ <head>
3
+ <title>Itowns - vector-tiles 2d </title>
4
+
5
+ <meta charset="UTF-8" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+
8
+ <link
9
+ rel="stylesheet"
10
+ type="text/css"
11
+ href="css/example.css"
12
+ />
13
+ <link
14
+ rel="stylesheet"
15
+ type="text/css"
16
+ href="css/LoadingScreen.css"
17
+ />
18
+
19
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.7.6/dat.gui.min.js"></script>
20
+ </head>
21
+ <body>
22
+ <div id="viewerDiv"></div>
23
+
24
+ <!-- Import iTowns source code -->
25
+ <script src="../dist/itowns.js"></script>
26
+ <script src="../dist/debug.js"></script>
27
+ <!-- Import iTowns LoadingScreen and GuiTools plugins -->
28
+ <script src="js/GUI/GuiTools.js"></script>
29
+ <script src="js/GUI/LoadingScreen.js"></script>
30
+
31
+ <script>
32
+ const typeView = 'Planar';
33
+ // const typeView = 'Globe';
34
+
35
+ // `viewerDiv` will contain iTowns' rendering area (`<canvas>`)
36
+ var viewerDiv = document.getElementById('viewerDiv');
37
+ let view;
38
+
39
+ if (typeView === 'Globe') {
40
+ const coord = new itowns.Coordinates('EPSG:4326', 2.351323, 48.856712); // Paris
41
+ // const coord = new itowns.Coordinates("EPSG:4326", 60.599525, 56.834341); // Yekaterinburg
42
+ const placement = {
43
+ coord,
44
+ range: 950000,
45
+ };
46
+ view = new itowns.GlobeView(viewerDiv, placement);
47
+ } else if (typeView === 'Planar') {
48
+ // Define geographic extent: CRS, min/max X, min/max Y
49
+ var extent = new itowns.Extent(
50
+ 'EPSG:3857',
51
+ -20037508.342789244, 20037508.342789244,
52
+ -20037508.342789255, 20037508.342789244);
53
+
54
+ // Instanciate PlanarView
55
+ view = new itowns.PlanarView(viewerDiv, extent, {
56
+ maxSubdivisionLevel: 20,
57
+ controls: {
58
+ // We do not want the user to zoom out too much
59
+ maxAltitude: 40000000,
60
+ // We want to keep the rotation disabled, to only have a view from the top
61
+ enableRotation: false,
62
+ // Don't zoom too much on smart zoom
63
+ smartTravelHeightMax: 100000,
64
+ },
65
+ });
66
+ }
67
+
68
+ const debugMenu = new GuiTools("menuDiv", view);
69
+ setupLoadingScreen(viewerDiv, view);
70
+
71
+ const source = new itowns.VectorTilesSource({
72
+ style: "mapbox://styles/mapbox/streets-v8",
73
+ accessToken:
74
+ "pk.eyJ1IjoiZnRvcm9tYW5vZmYiLCJhIjoiY2xrc2Zpa2o3MDQxNTNxcG5sczJyaTlncyJ9.5KFKdMLIiy-b_fAjSVhjCQ",
75
+ });
76
+
77
+ const layer = new itowns.ColorLayer("vector-map", {
78
+ source,
79
+ noTextureParentOutsideLimit: true,
80
+ addLabelLayer: true,
81
+ });
82
+
83
+ view.addLayer(layer).then(() => {
84
+ debugMenu.addLayerGUI.bind(debugMenu);
85
+ itowns.ColorLayersOrdering.moveLayerToIndex(view, "vector-map", 15);
86
+ });
87
+
88
+ debug.createTileDebugUI(debugMenu.gui, view);
89
+ </script>
90
+ </body>
91
+ </html>