itowns 2.44.3-next.4 → 2.44.3-next.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CODING.md +1 -1
- package/CONTRIBUTORS.md +1 -0
- package/dist/debug.js +1 -1
- package/dist/debug.js.map +1 -1
- package/dist/itowns.js +1 -1
- package/dist/itowns.js.LICENSE.txt +0 -2
- package/dist/itowns.js.map +1 -1
- package/dist/itowns_widgets.js +1 -1
- package/dist/itowns_widgets.js.map +1 -1
- package/examples/3dtiles_loader.html +123 -48
- package/examples/config.json +3 -10
- package/examples/copc_simple_loader.html +15 -5
- package/examples/effects_stereo.html +2 -2
- package/examples/entwine_3d_loader.html +3 -1
- package/examples/entwine_simple_loader.html +1 -1
- package/examples/images/itowns_logo.svg +123 -0
- package/examples/js/plugins/COGParser.js +1 -1
- package/examples/jsm/OGC3DTilesHelper.js +6 -1
- package/examples/layers/JSONLayers/GeoidMNT.json +3 -1
- package/examples/misc_collada.html +2 -2
- package/examples/source_file_geojson_3d.html +0 -1
- package/examples/source_file_kml_raster_usgs.html +0 -1
- package/examples/source_stream_wfs_raster.html +0 -7
- package/examples/vector_tile_mapbox_raster.html +91 -0
- package/examples/view_3d_map_webxr.html +3 -1
- package/examples/view_multi_25d.html +2 -2
- package/lib/Controls/GlobeControls.js +45 -28
- package/lib/Controls/StateControl.js +5 -2
- package/lib/Converter/Feature2Mesh.js +10 -4
- package/lib/Converter/Feature2Texture.js +6 -1
- package/lib/Converter/convertToTile.js +3 -8
- package/lib/Converter/textureConverter.js +4 -5
- package/lib/Core/Deprecated/Undeprecator.js +0 -1
- package/lib/Core/Feature.js +3 -4
- package/lib/Core/Geographic/Coordinates.js +143 -132
- package/lib/Core/Geographic/Crs.js +140 -145
- package/lib/Core/Geographic/Extent.js +221 -397
- package/lib/Core/Geographic/GeoidGrid.js +1 -1
- package/lib/Core/MainLoop.js +1 -3
- package/lib/Core/Math/Ellipsoid.js +62 -21
- package/lib/Core/Prefab/Globe/Atmosphere.js +4 -8
- package/lib/Core/Prefab/Globe/GlobeLayer.js +22 -15
- package/lib/Core/Prefab/Globe/GlobeTileBuilder.js +111 -0
- package/lib/Core/Prefab/GlobeView.js +2 -7
- package/lib/Core/Prefab/Planar/PlanarLayer.js +17 -11
- package/lib/Core/Prefab/Planar/PlanarTileBuilder.js +43 -43
- package/lib/Core/Prefab/TileBuilder.js +42 -40
- package/lib/Core/Prefab/computeBufferTileGeometry.js +195 -130
- package/lib/Core/Scheduler/Cache.js +1 -240
- package/lib/Core/Style.js +34 -495
- package/lib/Core/StyleOptions.js +486 -0
- package/lib/Core/Tile/Tile.js +207 -0
- package/lib/Core/Tile/TileGrid.js +49 -0
- package/lib/Core/TileGeometry.js +112 -28
- package/lib/Core/TileMesh.js +3 -3
- package/lib/Core/View.js +15 -8
- package/lib/Layer/C3DTilesLayer.js +20 -16
- package/lib/Layer/ColorLayer.js +35 -9
- package/lib/Layer/CopcLayer.js +7 -2
- package/lib/Layer/ElevationLayer.js +39 -7
- package/lib/Layer/EntwinePointTileLayer.js +14 -7
- package/lib/Layer/FeatureGeometryLayer.js +20 -6
- package/lib/Layer/GeometryLayer.js +42 -11
- package/lib/Layer/LabelLayer.js +45 -27
- package/lib/Layer/Layer.js +92 -61
- package/lib/Layer/OGC3DTilesLayer.js +212 -56
- package/lib/Layer/OrientedImageLayer.js +11 -5
- package/lib/Layer/PointCloudLayer.js +76 -30
- package/lib/Layer/Potree2Layer.js +9 -2
- package/lib/Layer/PotreeLayer.js +10 -3
- package/lib/Layer/RasterLayer.js +12 -2
- package/lib/Layer/TiledGeometryLayer.js +69 -13
- package/lib/Main.js +2 -2
- package/lib/Parser/GeoJsonParser.js +1 -1
- package/lib/Parser/VectorTileParser.js +42 -29
- package/lib/Parser/XbilParser.js +14 -2
- package/lib/Provider/Fetcher.js +5 -1
- package/lib/Provider/URLBuilder.js +22 -11
- package/lib/Renderer/Camera.js +1 -1
- package/lib/Renderer/Label2DRenderer.js +9 -7
- package/lib/Renderer/OBB.js +11 -13
- package/lib/Renderer/PointsMaterial.js +5 -5
- package/lib/Renderer/RasterTile.js +1 -2
- package/lib/Renderer/SphereHelper.js +0 -6
- package/lib/Source/CopcSource.js +13 -2
- package/lib/Source/EntwinePointTileSource.js +14 -4
- package/lib/Source/FileSource.js +9 -10
- package/lib/Source/OrientedImageSource.js +2 -2
- package/lib/Source/Source.js +26 -46
- package/lib/Source/TMSSource.js +10 -9
- package/lib/Source/VectorTilesSource.js +38 -34
- package/lib/Source/WFSSource.js +18 -13
- package/lib/Source/WMSSource.js +56 -18
- package/lib/Source/WMTSSource.js +13 -7
- package/lib/ThreeExtended/libs/ktx-parse.module.js +310 -274
- package/lib/ThreeExtended/loaders/DRACOLoader.js +3 -2
- package/lib/ThreeExtended/loaders/GLTFLoader.js +6 -3
- package/lib/ThreeExtended/loaders/KTX2Loader.js +144 -60
- package/lib/ThreeExtended/math/ColorSpaces.js +59 -0
- package/lib/Utils/CameraUtils.js +1 -1
- package/lib/Utils/gui/C3DTilesStyle.js +2 -3
- package/lib/Utils/placeObjectOnGround.js +0 -1
- package/package.json +10 -8
- package/examples/3dtiles_25d.html +0 -120
- package/examples/3dtiles_basic.html +0 -94
- package/examples/3dtiles_batch_table.html +0 -86
- package/examples/3dtiles_ion.html +0 -126
- package/examples/3dtiles_pointcloud.html +0 -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
|
-
|
|
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="
|
|
25
|
-
|
|
26
|
-
|
|
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>
|
|
@@ -37,14 +50,19 @@
|
|
|
37
50
|
<script type="importmap">
|
|
38
51
|
{
|
|
39
52
|
"imports": {
|
|
40
|
-
"three": "https://cdn.jsdelivr.net/npm/three@0.
|
|
41
|
-
"three/addons/": "https://cdn.jsdelivr.net/npm/three@0.
|
|
53
|
+
"three": "https://cdn.jsdelivr.net/npm/three@0.170.0/build/three.module.js",
|
|
54
|
+
"three/addons/": "https://cdn.jsdelivr.net/npm/three@0.170.0/examples/jsm/"
|
|
42
55
|
}
|
|
43
56
|
}
|
|
44
|
-
|
|
57
|
+
</script>
|
|
45
58
|
|
|
46
59
|
<script type="module">
|
|
47
|
-
import {
|
|
60
|
+
import {
|
|
61
|
+
AmbientLight,
|
|
62
|
+
PMREMGenerator,
|
|
63
|
+
} from 'three';
|
|
64
|
+
import { MeshoptDecoder } from 'three/addons/libs/meshopt_decoder.module.js';
|
|
65
|
+
import { RoomEnvironment } from 'three/addons/environments/RoomEnvironment.js';
|
|
48
66
|
import {
|
|
49
67
|
zoomToLayer,
|
|
50
68
|
fillHTMLWithPickingInfo,
|
|
@@ -52,28 +70,17 @@
|
|
|
52
70
|
|
|
53
71
|
const {
|
|
54
72
|
TMSSource, WMTSSource, OGC3DTilesSource,
|
|
55
|
-
ColorLayer, ElevationLayer, OGC3DTilesLayer,
|
|
73
|
+
ColorLayer, ElevationLayer, OGC3DTilesLayer, PNTS_SIZE_MODE,
|
|
56
74
|
GlobeView, Coordinates, Fetcher,
|
|
57
75
|
} = itowns;
|
|
58
76
|
|
|
59
|
-
|
|
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;
|
|
77
|
+
window.layer = null; // 3D Tiles layer
|
|
69
78
|
|
|
70
|
-
|
|
71
|
-
history.pushState(null, '', `?${uri.searchParams.toString()}`);
|
|
79
|
+
const uri = new URL(location);
|
|
72
80
|
|
|
73
|
-
|
|
74
|
-
}
|
|
81
|
+
window.gui = new dat.GUI();
|
|
75
82
|
|
|
76
|
-
// ----
|
|
83
|
+
// ---- Create a GlobeView ----
|
|
77
84
|
|
|
78
85
|
// Define camera initial position
|
|
79
86
|
const placement = {
|
|
@@ -85,45 +92,96 @@
|
|
|
85
92
|
const viewerDiv = document.getElementById('viewerDiv');
|
|
86
93
|
|
|
87
94
|
// Create a GlobeView
|
|
88
|
-
const view = new GlobeView(viewerDiv, placement, {
|
|
95
|
+
const view = new GlobeView(viewerDiv, placement, {
|
|
96
|
+
controls: {
|
|
97
|
+
minDistance: 100,
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
// Enable various compression support for 3D Tiles tileset:
|
|
102
|
+
// - `KHR_draco_mesh_compression` mesh compression extension
|
|
103
|
+
// - `KHR_texture_basisu` texture compression extension
|
|
104
|
+
// - `EXT_meshopt_compression` data compression extension
|
|
105
|
+
itowns.enableDracoLoader('./libs/draco/');
|
|
106
|
+
itowns.enableKtx2Loader('./lib/basis/', view.renderer);
|
|
107
|
+
itowns.enableMeshoptDecoder(MeshoptDecoder);
|
|
89
108
|
|
|
90
109
|
// Add ambient light to globally illuminates all objects
|
|
91
|
-
const light = new AmbientLight(0x404040,
|
|
110
|
+
const light = new AmbientLight(0x404040, 40);
|
|
92
111
|
view.scene.add(light);
|
|
93
112
|
|
|
113
|
+
// Set the environment map for all physical materials in the scene.
|
|
114
|
+
// Otherwise, mesh with only diffuse colors will appear black.
|
|
115
|
+
const environment = new RoomEnvironment();
|
|
116
|
+
const pmremGenerator = new PMREMGenerator(view.renderer);
|
|
117
|
+
view.scene.environment = pmremGenerator.fromScene(environment).texture;
|
|
118
|
+
pmremGenerator.dispose();
|
|
119
|
+
|
|
94
120
|
// Setup loading screen
|
|
95
121
|
setupLoadingScreen(viewerDiv, view);
|
|
96
122
|
|
|
97
|
-
//
|
|
98
|
-
const menuGlobe = new GuiTools('menuDiv', view, 300);
|
|
99
|
-
debug.createTileDebugUI(menuGlobe.gui, view, view.tileLayer);
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
// ---- ADD A BASEMAP ----
|
|
123
|
+
// ---- Add a basemap ----
|
|
103
124
|
|
|
104
125
|
// Add one imagery layer to the scene. This layer's properties are
|
|
105
126
|
// defined in a json file, but it cou ld be defined as a plain js
|
|
106
127
|
// object. See `Layer` documentation for more info.
|
|
107
128
|
Fetcher.json('./layers/JSONLayers/OPENSM.json').then((config) => {
|
|
108
|
-
const
|
|
129
|
+
const colorLayer = new ColorLayer('Ortho', {
|
|
109
130
|
...config,
|
|
110
131
|
source: new TMSSource(config.source),
|
|
111
132
|
});
|
|
112
|
-
view.addLayer(
|
|
133
|
+
view.addLayer(colorLayer);
|
|
113
134
|
});
|
|
114
135
|
|
|
115
|
-
// ----
|
|
136
|
+
// ---- Add 3D terrain ----
|
|
116
137
|
|
|
117
|
-
//
|
|
118
|
-
//
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
138
|
+
// Add two elevation layers: world terrain and a more precise terrain for france
|
|
139
|
+
// These will deform iTowns globe geometry to represent terrain elevation.
|
|
140
|
+
function addElevationLayerFromConfig(config) {
|
|
141
|
+
config.source = new itowns.WMTSSource(config.source);
|
|
142
|
+
var elevationLayer = new itowns.ElevationLayer(config.id, config);
|
|
143
|
+
view.addLayer(elevationLayer);
|
|
144
|
+
}
|
|
145
|
+
itowns.Fetcher.json('./layers/JSONLayers/IGN_MNT_HIGHRES.json').then(addElevationLayerFromConfig);
|
|
146
|
+
itowns.Fetcher.json('./layers/JSONLayers/WORLD_DTM.json').then(addElevationLayerFromConfig);
|
|
147
|
+
|
|
148
|
+
// ---------- 3D Tiles loading
|
|
149
|
+
|
|
150
|
+
function readURL() {
|
|
151
|
+
const url = document.getElementById('url').value;
|
|
152
|
+
|
|
153
|
+
if (url) {
|
|
154
|
+
setUrl(url);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function setUrl(url) {
|
|
159
|
+
if (!url) return;
|
|
160
|
+
|
|
161
|
+
const input_url = document.getElementById('url');
|
|
162
|
+
if (!input_url) return;
|
|
163
|
+
|
|
164
|
+
uri.searchParams.set('copc', url);
|
|
165
|
+
history.replaceState(null, null, `?${uri.searchParams.toString()}`);
|
|
166
|
+
|
|
167
|
+
input_url.value = url;
|
|
168
|
+
load(url);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
function load(url) {
|
|
173
|
+
const source = new OGC3DTilesSource({ url });
|
|
122
174
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
175
|
+
if (window.layer) {
|
|
176
|
+
gui.removeFolder('Layer 3DTiles');
|
|
177
|
+
view.removeLayer('3DTiles');
|
|
178
|
+
view.notifyChange();
|
|
179
|
+
window.layer.delete();
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
window.layer = new OGC3DTilesLayer('3DTiles', {
|
|
126
183
|
source,
|
|
184
|
+
pntsSizeMode: PNTS_SIZE_MODE.ATTENUATED,
|
|
127
185
|
});
|
|
128
186
|
|
|
129
187
|
// Add an event for picking the 3D Tiles layer and displaying
|
|
@@ -131,20 +189,37 @@
|
|
|
131
189
|
const pickingArgs = {
|
|
132
190
|
htmlDiv: document.getElementById('featureInfo'),
|
|
133
191
|
view,
|
|
134
|
-
layer,
|
|
192
|
+
layer: window.layer,
|
|
135
193
|
};
|
|
136
194
|
|
|
137
195
|
// Add the layer to our view
|
|
138
|
-
view.addLayer(layer).then((layer) => {
|
|
196
|
+
view.addLayer(window.layer).then((layer) => {
|
|
139
197
|
zoomToLayer(view, layer);
|
|
140
198
|
window.addEventListener('click',
|
|
141
199
|
(event) => fillHTMLWithPickingInfo(event, pickingArgs), false);
|
|
142
200
|
});
|
|
143
201
|
|
|
144
|
-
|
|
202
|
+
window.layer.whenReady
|
|
203
|
+
.then(() => debug.createOGC3DTilesDebugUI(gui, view, window.layer));
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function loadLyon() {
|
|
207
|
+
setUrl("https://raw.githubusercontent.com/iTowns/iTowns2-sample-data/refs/heads/master/3DTiles/lyon1-4978/tileset.json");
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function loadSete() {
|
|
211
|
+
setUrl("https://raw.githubusercontent.com/iTowns/iTowns2-sample-data/master/pointclouds/pnts-sete-2021-0756_6256/tileset.json");
|
|
145
212
|
}
|
|
146
213
|
|
|
147
|
-
|
|
214
|
+
function loadLille() {
|
|
215
|
+
setUrl("https://webimaging.lillemetropole.fr/externe/maillage/2020_mel_5cm/tileset.json");
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
window.readURL = readURL;
|
|
219
|
+
window.loadLyon = loadLyon;
|
|
220
|
+
window.loadSete = loadSete;
|
|
221
|
+
window.loadLille = loadLille;
|
|
222
|
+
|
|
148
223
|
</script>
|
|
149
224
|
</body>
|
|
150
225
|
</html>
|
package/examples/config.json
CHANGED
|
@@ -14,16 +14,8 @@
|
|
|
14
14
|
"geoid_geoidLayer": "Display geoid heights"
|
|
15
15
|
},
|
|
16
16
|
|
|
17
|
-
"
|
|
18
|
-
"
|
|
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"
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
</head>
|
|
20
20
|
<body>
|
|
21
21
|
<div id="description">Specify the URL of a COPC file to load:
|
|
22
|
-
<input type="text" id="
|
|
22
|
+
<input type="text" id="copc_url" />
|
|
23
23
|
<button onclick="readURL()">Load</button>
|
|
24
24
|
<div>
|
|
25
25
|
<button onClick="loadAutzen()">Load Autzen Stadium (80mb)</button>
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
function readURL() {
|
|
74
|
-
const url = document.getElementById('
|
|
74
|
+
const url = document.getElementById('copc_url').value;
|
|
75
75
|
|
|
76
76
|
if (url) {
|
|
77
77
|
setUrl(url);
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
function setUrl(url) {
|
|
82
82
|
if (!url) return;
|
|
83
83
|
|
|
84
|
-
const input_url = document.getElementById('
|
|
84
|
+
const input_url = document.getElementById('copc_url');
|
|
85
85
|
if (!input_url) return;
|
|
86
86
|
|
|
87
87
|
uri.searchParams.set('copc', url);
|
|
@@ -93,6 +93,13 @@
|
|
|
93
93
|
|
|
94
94
|
|
|
95
95
|
function load(url) {
|
|
96
|
+
const options = {};
|
|
97
|
+
const urlParams = uri.searchParams
|
|
98
|
+
urlParams.keys().forEach(key => {
|
|
99
|
+
if (key !== 'copc') {
|
|
100
|
+
options[key] = parseInt(urlParams.get(key), 10);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
96
103
|
const source = new itowns.CopcSource({ url });
|
|
97
104
|
|
|
98
105
|
if (layer) {
|
|
@@ -102,12 +109,15 @@
|
|
|
102
109
|
layer.delete();
|
|
103
110
|
}
|
|
104
111
|
|
|
105
|
-
|
|
112
|
+
const config = {
|
|
106
113
|
source,
|
|
107
114
|
crs: view.referenceCrs,
|
|
108
115
|
sseThreshold: 2,
|
|
109
116
|
pointBudget: 3000000,
|
|
110
|
-
|
|
117
|
+
...options,
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
layer = new itowns.CopcLayer('COPC', config);
|
|
111
121
|
view.addLayer(layer).then(onLayerReady);
|
|
112
122
|
layer.whenReady
|
|
113
123
|
.then(() => debug.PointCloudDebug.initTools(view, layer, gui));
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
<script type="importmap">
|
|
24
24
|
{
|
|
25
25
|
"imports": {
|
|
26
|
-
"three": "https://cdn.jsdelivr.net/npm/three@0.
|
|
27
|
-
"three/addons/": "https://cdn.jsdelivr.net/npm/three@0.
|
|
26
|
+
"three": "https://cdn.jsdelivr.net/npm/three@0.170.0/build/three.module.js",
|
|
27
|
+
"three/addons/": "https://cdn.jsdelivr.net/npm/three@0.170.0/examples/jsm/"
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
</script>
|
|
@@ -87,8 +87,10 @@
|
|
|
87
87
|
eptSource = new itowns.EntwinePointTileSource({ url });
|
|
88
88
|
|
|
89
89
|
if (eptLayer) {
|
|
90
|
-
|
|
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', {
|
|
@@ -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);
|
|
@@ -33,6 +33,11 @@ export function fillHTMLWithPickingInfo(event, pickingArg) {
|
|
|
33
33
|
// eslint-disable-next-line
|
|
34
34
|
htmlDiv.appendChild(createHTMLListFromObject(closestC3DTileFeature));
|
|
35
35
|
}
|
|
36
|
+
|
|
37
|
+
layer.getMetadataFromIntersections(intersects).then((metadata) => {
|
|
38
|
+
// eslint-disable-next-line
|
|
39
|
+
metadata?.forEach(m => htmlDiv.appendChild(createHTMLListFromObject(m)));
|
|
40
|
+
});
|
|
36
41
|
}
|
|
37
42
|
|
|
38
43
|
function zoomToSphere(view, tile, sphere) {
|
|
@@ -47,7 +52,7 @@ function zoomToSphere(view, tile, sphere) {
|
|
|
47
52
|
const distance = radius * Math.tan(fov * 2);
|
|
48
53
|
|
|
49
54
|
return {
|
|
50
|
-
coord: new Coordinates('EPSG:4978'
|
|
55
|
+
coord: new Coordinates('EPSG:4978').setFromVector3(center),
|
|
51
56
|
range: distance + radius,
|
|
52
57
|
};
|
|
53
58
|
}
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
"updateStrategy": {
|
|
5
5
|
"type": 0
|
|
6
6
|
},
|
|
7
|
-
"
|
|
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",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
<script type="importmap">
|
|
26
26
|
{
|
|
27
27
|
"imports": {
|
|
28
|
-
"three": "https://cdn.jsdelivr.net/npm/three@0.
|
|
29
|
-
"three/addons/": "https://cdn.jsdelivr.net/npm/three@0.
|
|
28
|
+
"three": "https://cdn.jsdelivr.net/npm/three@0.170.0/build/three.module.js",
|
|
29
|
+
"three/addons/": "https://cdn.jsdelivr.net/npm/three@0.170.0/examples/jsm/"
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
</script>
|
|
@@ -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
|
});
|