Концептуальный вопрос
Я создаю симулятор полета в Three.js. Я собираюсь скопировать данные CSV для широты, долготы и высоты из Google Earth и перенести их в arcGIS для создания цифровой модели высоты (DEM). Затем я хочу создать ландшафт на основе матрицы высот. У меня уже есть шейдер текстуры карты сплат, который я написал, и все выглядит хорошо.
Однако мне нужно будет добавить модели и, в частности, текстовые и посадочные зоны для городов. Это потребует точных координат XYZ.
Я полагаю, это интересная проблема. Я уже видел один вопрос в стеке, похожем на этот, но он был не совсем такой глубины, которую я ищу.
1) Как создать систему координат, которая отображает фактические данные XYZ, Широта, Долгота, Высота над уровнем моря в PlaneBufferGeometry?
Я предполагаю, что если я возьму гипотетический образец карты 100 000 x 100 000, то мне нужно будет создать самолет с соответствующим количеством вершин, а затем отобразить карты 1: 1.
new THREE.PlaneBufferGeometry( 100000, 100000, 100000, 100000 );
Тогда более сложная часть сопоставления длинных координат с этим. Может быть, просто множитель, как * 100 или около того на лат, длинные градусы?
2) Как создать наиболее эффективную структуру данных для этого. Он будет содержать много данных.
Я думаю, что наиболее эффективной структурой данных будет массив с Z целыми числами.
let vertArray = new Array(10000000000);
for (i = 0; i < 9999999999; i++) {
vertArray[i] = planeBufferGeometry.vertices[i].z;
}
Каждые 100 000 в массиве будут представлять координату Y, в то время как каждое значение i в указанных разделах будет координатой X. Значение координаты Z будет сохранено в самом массиве.
Так что гипотетически, если бы я хотел получить X: 3, Y: 4, Z:? это было бы ...
const xCoord = 3,
yCoord = 4,
index = (yCoord * 100000) + xCoord,
zCoord = vertArray[index];
Это наименьшая нагрузка, которую я могу придумать ... определить длину массива заранее, сохранить массив одномерным, заполнить только целыми числами. Есть идеи получше? Возможно, создание массива было бы ненужным, и я мог бы создать уравнение, которое извлекает данные vert непосредственно из визуализированной сетки?
3) Существуют ли способы уменьшить влияние больших данных, хранящихся в памяти браузера?
Я еще не реализовал это, но идея массива длиной 10 миллионов в браузере довольно много в моей голове. Я предпочел бы иметь возможность загружать все это, а не делать какой-то вызов AJAX, когда вертолет приближается к краю подплана. Подумайте о «зонах» в MMORPG.