itowns 2.44.3-next.3 → 2.44.3-next.30
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 +109 -45
- package/examples/config.json +2 -10
- 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 +1 -1
- package/examples/layers/JSONLayers/GeoidMNT.json +3 -1
- package/examples/source_file_geojson_3d.html +0 -1
- package/examples/source_stream_wfs_raster.html +0 -7
- 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 +3 -1
- package/lib/Converter/convertToTile.js +3 -8
- package/lib/Converter/textureConverter.js +3 -4
- package/lib/Core/Deprecated/Undeprecator.js +0 -1
- package/lib/Core/Feature.js +1 -2
- package/lib/Core/Geographic/Coordinates.js +143 -132
- package/lib/Core/Geographic/Crs.js +140 -145
- package/lib/Core/Geographic/Extent.js +72 -267
- package/lib/Core/Geographic/GeoidGrid.js +1 -1
- 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 +27 -32
- package/lib/Core/Prefab/computeBufferTileGeometry.js +189 -130
- package/lib/Core/Style.js +3 -3
- package/lib/Core/Tile/Tile.js +219 -0
- package/lib/Core/Tile/TileGrid.js +43 -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 +5 -0
- package/lib/Layer/ElevationLayer.js +39 -7
- package/lib/Layer/EntwinePointTileLayer.js +12 -5
- package/lib/Layer/FeatureGeometryLayer.js +20 -6
- package/lib/Layer/GeometryLayer.js +42 -11
- package/lib/Layer/LabelLayer.js +19 -9
- package/lib/Layer/Layer.js +83 -57
- package/lib/Layer/OGC3DTilesLayer.js +81 -30
- package/lib/Layer/OrientedImageLayer.js +11 -5
- package/lib/Layer/PointCloudLayer.js +74 -30
- package/lib/Layer/Potree2Layer.js +7 -2
- package/lib/Layer/PotreeLayer.js +8 -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 +1 -1
- 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/OBB.js +11 -13
- package/lib/Renderer/PointsMaterial.js +1 -1
- 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 +1 -4
- package/lib/Source/Source.js +1 -4
- package/lib/Source/TMSSource.js +10 -9
- package/lib/Source/VectorTilesSource.js +3 -5
- package/lib/Source/WFSSource.js +15 -10
- package/lib/Source/WMSSource.js +56 -18
- package/lib/Source/WMTSSource.js +13 -7
- 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 +13 -6
- 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>
|
|
@@ -41,10 +54,11 @@
|
|
|
41
54
|
"three/addons/": "https://cdn.jsdelivr.net/npm/three@0.165.0/examples/jsm/"
|
|
42
55
|
}
|
|
43
56
|
}
|
|
44
|
-
|
|
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
|
-
|
|
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
|
-
|
|
71
|
-
history.pushState(null, '', `?${uri.searchParams.toString()}`);
|
|
75
|
+
const uri = new URL(location);
|
|
72
76
|
|
|
73
|
-
|
|
74
|
-
}
|
|
77
|
+
window.gui = new dat.GUI();
|
|
75
78
|
|
|
76
|
-
// ----
|
|
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,
|
|
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
|
-
//
|
|
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
|
|
118
|
+
const colorLayer = new ColorLayer('Ortho', {
|
|
109
119
|
...config,
|
|
110
120
|
source: new TMSSource(config.source),
|
|
111
121
|
});
|
|
112
|
-
view.addLayer(
|
|
122
|
+
view.addLayer(colorLayer);
|
|
113
123
|
});
|
|
114
124
|
|
|
115
|
-
// ----
|
|
125
|
+
// ---- Add 3D terrain ----
|
|
116
126
|
|
|
117
|
-
//
|
|
118
|
-
//
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
-
|
|
124
|
-
|
|
125
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
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>
|
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": {
|
|
@@ -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);
|
|
@@ -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",
|
|
@@ -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
|
});
|
|
@@ -149,7 +149,7 @@ let previous;
|
|
|
149
149
|
* @param {object} [options] An object with one or more configuration properties. Any property of GlobeControls
|
|
150
150
|
* can be passed in this object.
|
|
151
151
|
* @property {number} zoomFactor The factor the scale is multiplied by when dollying (zooming) in or
|
|
152
|
-
* divided by when dollying out. Default is
|
|
152
|
+
* divided by when dollying out. Default is 1.1.
|
|
153
153
|
* @property {number} rotateSpeed Speed camera rotation in orbit and panoramic mode. Default is 0.25.
|
|
154
154
|
* @property {number} minDistance Minimum distance between ground and camera in meters (Perspective Camera only).
|
|
155
155
|
* Default is 250.
|
|
@@ -199,7 +199,7 @@ class GlobeControls extends THREE.EventDispatcher {
|
|
|
199
199
|
console.warn('Controls zoomSpeed parameter is deprecated. Use zoomFactor instead.');
|
|
200
200
|
options.zoomFactor = options.zoomFactor || options.zoomSpeed;
|
|
201
201
|
}
|
|
202
|
-
this.zoomFactor = options.zoomFactor || 1.
|
|
202
|
+
this.zoomFactor = options.zoomFactor || 1.1;
|
|
203
203
|
|
|
204
204
|
// Limits to how far you can dolly in and out ( PerspectiveCamera only )
|
|
205
205
|
this.minDistance = options.minDistance || 250;
|
|
@@ -293,10 +293,10 @@ class GlobeControls extends THREE.EventDispatcher {
|
|
|
293
293
|
this.lookAtCoordinate(placement, false);
|
|
294
294
|
coordCameraTarget.crs = this.view.referenceCrs;
|
|
295
295
|
}
|
|
296
|
-
get
|
|
296
|
+
get zoomInScale() {
|
|
297
297
|
return this.zoomFactor;
|
|
298
298
|
}
|
|
299
|
-
get
|
|
299
|
+
get zoomOutScale() {
|
|
300
300
|
return 1 / this.zoomFactor;
|
|
301
301
|
}
|
|
302
302
|
get isPaused() {
|
|
@@ -355,11 +355,13 @@ class GlobeControls extends THREE.EventDispatcher {
|
|
|
355
355
|
this.panUp(deltaY * (this.camera.top - this.camera.bottom) / gfx.height);
|
|
356
356
|
}
|
|
357
357
|
}
|
|
358
|
+
|
|
359
|
+
// For Mobile
|
|
358
360
|
dolly(delta) {
|
|
359
361
|
if (delta === 0) {
|
|
360
362
|
return;
|
|
361
363
|
}
|
|
362
|
-
dollyScale = delta > 0 ? this.
|
|
364
|
+
dollyScale = delta > 0 ? this.zoomInScale : this.zoomOutScale;
|
|
363
365
|
if (this.camera.isPerspectiveCamera) {
|
|
364
366
|
orbitScale /= dollyScale;
|
|
365
367
|
} else if (this.camera.isOrthographicCamera) {
|
|
@@ -556,6 +558,7 @@ class GlobeControls extends THREE.EventDispatcher {
|
|
|
556
558
|
|
|
557
559
|
// Initialize dolly movement.
|
|
558
560
|
dollyStart.copy(event.viewCoords);
|
|
561
|
+
this.view.getPickingPositionFromDepth(event.viewCoords, pickedPosition); // mouse position
|
|
559
562
|
|
|
560
563
|
// Initialize pan movement.
|
|
561
564
|
panStart.copy(event.viewCoords);
|
|
@@ -587,9 +590,11 @@ class GlobeControls extends THREE.EventDispatcher {
|
|
|
587
590
|
handleDolly(event) {
|
|
588
591
|
dollyEnd.copy(event.viewCoords);
|
|
589
592
|
dollyDelta.subVectors(dollyEnd, dollyStart);
|
|
590
|
-
this.dolly(-dollyDelta.y);
|
|
591
593
|
dollyStart.copy(dollyEnd);
|
|
592
|
-
|
|
594
|
+
event.delta = dollyDelta.y;
|
|
595
|
+
if (event.delta != 0) {
|
|
596
|
+
this.handleZoom(event);
|
|
597
|
+
}
|
|
593
598
|
}
|
|
594
599
|
handlePan(event) {
|
|
595
600
|
if (event.viewCoords) {
|
|
@@ -705,7 +710,7 @@ class GlobeControls extends THREE.EventDispatcher {
|
|
|
705
710
|
const range = this.getRange(point);
|
|
706
711
|
if (point && range > this.minDistance) {
|
|
707
712
|
return this.lookAtCoordinate({
|
|
708
|
-
coord: new Coordinates('EPSG:4978'
|
|
713
|
+
coord: new Coordinates('EPSG:4978').setFromVector3(point),
|
|
709
714
|
range: range * (event.direction === 'out' ? 1 / 0.6 : 0.6),
|
|
710
715
|
time: 1500
|
|
711
716
|
});
|
|
@@ -714,21 +719,33 @@ class GlobeControls extends THREE.EventDispatcher {
|
|
|
714
719
|
handleZoom(event) {
|
|
715
720
|
this.player.stop();
|
|
716
721
|
CameraUtils.stop(this.view, this.camera);
|
|
717
|
-
this.
|
|
718
|
-
|
|
719
|
-
this.
|
|
720
|
-
|
|
721
|
-
this.
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
722
|
+
const zoomScale = event.delta > 0 ? this.zoomInScale : this.zoomOutScale;
|
|
723
|
+
let point = event.type === 'dolly' ? pickedPosition : this.view.getPickingPositionFromDepth(event.viewCoords); // get cursor position
|
|
724
|
+
let range = this.getRange();
|
|
725
|
+
range *= zoomScale;
|
|
726
|
+
if (point && range > this.minDistance && range < this.maxDistance) {
|
|
727
|
+
// check if the zoom is in the allowed interval
|
|
728
|
+
const camPos = xyz.setFromVector3(cameraTarget.position).as('EPSG:4326', c).toVector3();
|
|
729
|
+
point = xyz.setFromVector3(point).as('EPSG:4326', c).toVector3();
|
|
730
|
+
if (camPos.x * point.x < 0) {
|
|
731
|
+
// Correct rotation at 180th meridian by using 0 <= longitude <=360 for interpolation purpose
|
|
732
|
+
if (camPos.x - point.x > 180) {
|
|
733
|
+
point.x += 360;
|
|
734
|
+
} else if (point.x - camPos.x > 180) {
|
|
735
|
+
camPos.x += 360;
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
point.lerp(
|
|
739
|
+
// point interpol between mouse cursor and cam pos
|
|
740
|
+
camPos, zoomScale // interpol factor
|
|
741
|
+
);
|
|
742
|
+
point = c.setFromVector3(point).as('EPSG:4978', xyz);
|
|
743
|
+
return this.lookAtCoordinate({
|
|
744
|
+
// update view to the interpolate point
|
|
745
|
+
coord: point,
|
|
746
|
+
range
|
|
747
|
+
}, false);
|
|
729
748
|
}
|
|
730
|
-
this.dispatchEvent(this.startEvent);
|
|
731
|
-
this.dispatchEvent(this.endEvent);
|
|
732
749
|
}
|
|
733
750
|
onTouchStart(event) {
|
|
734
751
|
// CameraUtils.stop(view);
|
|
@@ -961,7 +978,7 @@ class GlobeControls extends THREE.EventDispatcher {
|
|
|
961
978
|
*/
|
|
962
979
|
|
|
963
980
|
getCameraCoordinate() {
|
|
964
|
-
return new Coordinates('EPSG:4978'
|
|
981
|
+
return new Coordinates('EPSG:4978').setFromVector3(this.camera.position).as('EPSG:4326');
|
|
965
982
|
}
|
|
966
983
|
|
|
967
984
|
/**
|
|
@@ -1018,7 +1035,7 @@ class GlobeControls extends THREE.EventDispatcher {
|
|
|
1018
1035
|
*
|
|
1019
1036
|
* @deprecated Use View#getScale instead.
|
|
1020
1037
|
*/
|
|
1021
|
-
getScale(pitch)
|
|
1038
|
+
getScale(pitch) {
|
|
1022
1039
|
console.warn('Deprecated, use View#getScale instead.');
|
|
1023
1040
|
return this.view.getScale(pitch);
|
|
1024
1041
|
}
|
|
@@ -1031,7 +1048,7 @@ class GlobeControls extends THREE.EventDispatcher {
|
|
|
1031
1048
|
*
|
|
1032
1049
|
* @deprecated Use `View#getPixelsToMeters` instead.
|
|
1033
1050
|
*/
|
|
1034
|
-
pixelsToMeters(pixels)
|
|
1051
|
+
pixelsToMeters(pixels) {
|
|
1035
1052
|
let pixelPitch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.28;
|
|
1036
1053
|
console.warn('Deprecated use View#getPixelsToMeters instead.');
|
|
1037
1054
|
const scaled = this.getScale(pixelPitch);
|
|
@@ -1047,7 +1064,7 @@ class GlobeControls extends THREE.EventDispatcher {
|
|
|
1047
1064
|
* @deprecated Use `View#getPixelsToMeters` and `GlobeControls#metersToDegrees`
|
|
1048
1065
|
* instead.
|
|
1049
1066
|
*/
|
|
1050
|
-
pixelsToDegrees(pixels)
|
|
1067
|
+
pixelsToDegrees(pixels) {
|
|
1051
1068
|
let pixelPitch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.28;
|
|
1052
1069
|
console.warn('Deprecated, use View#getPixelsToMeters and GlobeControls#getMetersToDegrees instead.');
|
|
1053
1070
|
const chord = this.pixelsToMeters(pixels, pixelPitch);
|
|
@@ -1062,7 +1079,7 @@ class GlobeControls extends THREE.EventDispatcher {
|
|
|
1062
1079
|
*
|
|
1063
1080
|
* @deprecated Use `View#getMetersToPixels` instead.
|
|
1064
1081
|
*/
|
|
1065
|
-
metersToPixels(value)
|
|
1082
|
+
metersToPixels(value) {
|
|
1066
1083
|
let pixelPitch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.28;
|
|
1067
1084
|
console.warn('Deprecated, use View#getMetersToPixels instead.');
|
|
1068
1085
|
const scaled = this.getScale(pixelPitch);
|
|
@@ -1156,7 +1173,7 @@ class GlobeControls extends THREE.EventDispatcher {
|
|
|
1156
1173
|
if (!pickedPosition) {
|
|
1157
1174
|
return;
|
|
1158
1175
|
}
|
|
1159
|
-
return new Coordinates('EPSG:4978'
|
|
1176
|
+
return new Coordinates('EPSG:4978').setFromVector3(pickedPosition).as('EPSG:4326');
|
|
1160
1177
|
}
|
|
1161
1178
|
}
|
|
1162
1179
|
export default GlobeControls;
|