Skip to content

Commit cabdeb2

Browse files
committed
Remote downloads
1 parent 67147fe commit cabdeb2

File tree

3 files changed

+110
-60
lines changed

3 files changed

+110
-60
lines changed

index.html

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,9 +215,8 @@ <h5>Set the fidelity of the files to load, use lower values to load faster and o
215215
<span class="sr-only">Toggle Dropdown</span>
216216
</button>
217217
<ul class="dropdown-menu btn-block" role="menu">
218-
<li><a href="#">St. Helens</a></li>
219-
<li><a href="#">Half Dome</a></li>
220-
<li><a href="#">More Interesting</a></li>
218+
<li><a href="/laz/st-helens.laz">St. Helens</a></li>
219+
<li><a href="/laz/half-dome.laz">Half Dome</a></li>
221220
</ul>
222221
</div>
223222
<div id="loaderProgress">

js/ui.js

Lines changed: 104 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,91 @@
4343
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
4444
};
4545

46+
var getBinary = function(url, cb) {
47+
return new Promise(function(resolve, reject) {
48+
var oReq = new XMLHttpRequest();
49+
oReq.open("GET", url, true);
50+
oReq.responseType = "arraybuffer";
51+
52+
oReq.onprogress = function(e) {
53+
cb(e.loaded / e.totalSize);
54+
};
55+
56+
oReq.onload = function(oEvent) {
57+
if (oReq.status == 200) {
58+
console.log(oReq.getAllResponseHeaders());
59+
60+
return resolve(oReq.response);
61+
}
62+
63+
reject(new Error("Could not get binary data"));
64+
};
65+
66+
oReq.send();
67+
});
68+
};
69+
70+
71+
var loadData = function(name, buffer) {
72+
var lf = new LASFile(buffer);
73+
74+
progress(0, 'Decoding ' + name + '...');
75+
76+
console.log('Compressed?', lf.isCompressed);
77+
lf.open().then(function() {
78+
return lf.getHeader();
79+
}).then(function(header) {
80+
console.log('Got', header);
81+
82+
var batcher = new ParticleSystemBatcher(
83+
$("#vertexshader").text(),
84+
$("#fragmentshader").text());
85+
86+
var skip = Math.round((10 - currentLoadFidelity()));
87+
console.log("Skip value:", skip);
88+
var totalRead = 0;
89+
var totalToRead = (skip <= 1 ? header.pointsCount : header.pointsCount / skip);
90+
var reader = function() {
91+
return lf.readData(1000000, 0, skip).then(function(data) {
92+
batcher.push(new LASDecoder(data.buffer,
93+
header.pointsFormatId,
94+
header.pointsStructSize,
95+
data.count,
96+
header.scale,
97+
header.offset));
98+
99+
totalRead += data.count;
100+
progress(Math.round(100 * totalRead / totalToRead));
101+
102+
console.log('Got data', data.count);
103+
if (data.hasMoreData)
104+
return reader();
105+
else {
106+
loadBatcher(batcher);
107+
header.totalRead = totalRead;
108+
return header;
109+
}
110+
});
111+
};
112+
return reader();
113+
}).then(function(header) {
114+
$("#loaderProgress").hide();
115+
$(".props").html(
116+
"<tr><td>Name</td><td>" + name + "</td></tr>" +
117+
"<tr><td>File Version</td><td>" + lf.versionAsString + "</td></tr>" +
118+
"<tr><td>Compressed?</td><td>" + (lf.isCompressed ? "Yes" : "No") + "</td></tr>" +
119+
"<tr><td>Total Points</td><td>" + numberWithCommas(header.pointsCount) + " (" +
120+
numberWithCommas(header.totalRead) + ") " + "</td></tr>" +
121+
"<tr><td>Point Format ID</td><td>" + header.pointsFormatId + "</td></tr>" +
122+
"<tr><td>Point Record Size</td><td>" + header.pointsStructSize + "</td></tr>");
123+
124+
// finally close the file
125+
return lf.close();
126+
}).then(function() {
127+
console.log("Done");
128+
});
129+
};
130+
46131
var setupFileOpenHandlers = function() {
47132
$("#loaderProgress").hide();
48133

@@ -60,66 +145,28 @@
60145
};
61146
fr.onload = function(e) {
62147
var d = e.target.result;
63-
var lf = new LASFile(d);
64-
65-
progress(0, 'Decoding ' + file.name + '...');
66-
67-
console.log('Compressed?', lf.isCompressed);
68-
lf.open().then(function() {
69-
return lf.getHeader();
70-
}).then(function(header) {
71-
console.log('Got', header);
72-
73-
var batcher = new ParticleSystemBatcher(
74-
$("#vertexshader").text(),
75-
$("#fragmentshader").text());
76-
77-
var skip = Math.round((10 - currentLoadFidelity()));
78-
console.log("Skip value:", skip);
79-
var totalRead = 0;
80-
var totalToRead = (skip <= 1 ? header.pointsCount : header.pointsCount / skip);
81-
var reader = function() {
82-
return lf.readData(1000000, 0, skip).then(function(data) {
83-
batcher.push(new LASDecoder(data.buffer,
84-
header.pointsFormatId,
85-
header.pointsStructSize,
86-
data.count,
87-
header.scale,
88-
header.offset));
89-
90-
totalRead += data.count;
91-
progress(Math.round(100 * totalRead / totalToRead));
92-
93-
console.log('Got data', data.count);
94-
if (data.hasMoreData)
95-
return reader();
96-
else {
97-
loadBatcher(batcher);
98-
header.totalRead = totalRead;
99-
return header;
100-
}
101-
});
102-
};
103-
return reader();
104-
}).then(function(header) {
105-
$("#loaderProgress").hide();
106-
$(".props").html(
107-
"<tr><td>Name</td><td>" + file.name + "</td></tr>" +
108-
"<tr><td>File Version</td><td>" + lf.versionAsString + "</td></tr>" +
109-
"<tr><td>Compressed?</td><td>" + (lf.isCompressed ? "Yes" : "No") + "</td></tr>" +
110-
"<tr><td>Total Points</td><td>" + numberWithCommas(header.pointsCount) + " (" +
111-
numberWithCommas(header.totalRead) + ") " + "</td></tr>" +
112-
"<tr><td>Point Format ID</td><td>" + header.pointsFormatId + "</td></tr>" +
113-
"<tr><td>Point Record Size</td><td>" + header.pointsStructSize + "</td></tr>");
114-
115-
// finally close the file
116-
return lf.close();
117-
}).then(function() {
118-
console.log("Done");
119-
});
148+
loadData(file.name, d);
120149
};
121150
fr.readAsArrayBuffer(file);
122151
});
152+
153+
$("#browse").on("click", "a", function(e) {
154+
e.preventDefault();
155+
156+
var target = $(this).attr("href");
157+
console.log("Will load", target);
158+
159+
var name = target.substring(target.lastIndexOf('/')+1)
160+
161+
var progress_fn = function(pc) {
162+
progress(pc * 100);
163+
};
164+
165+
progress(0, "Fetching " + name + "...");
166+
getBinary(target, progress_fn).then(function(data) {
167+
return loadData(name, data);
168+
});
169+
});
123170
};
124171

125172
var setupSliders = function() {

laz/.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Ignore everything in this directory
2+
*
3+
# Except this file
4+
!.gitignore

0 commit comments

Comments
 (0)