是否可以在three.js中使用GIS地形矢量数据?

时间:2013-08-10 22:49:22

标签: three.js

我对three.js和WebGL很新。

http://css.dzone.com/articles/threejs-render-real-world处的示例展示了如何在three.js中使用栅格 GIS地形数据

是否可以在场景中使用 vector GIS数据?例如,我有一系列点表示存储在真实世界坐标(米)中的位置(包括高度)。我怎样才能在three.js中显示那些?

http://threejs.org/docs/59/#Manual/Introduction/Creating_a_scene的基本样本展示了如何使用坐标创建几何图形 - 我是否可以使用与真实坐标相似的方法,例如

"x" : 339494.5,
"y" : 1294953.7,
"z": 0.75

或者我需要将这些转换为页面单位吗?我可以使用我的点来创建一个可以悬垂航拍图像的表面吗?

我尝试修改简单示例,但我没有看到任何内容(或任何错误消息):http://jsfiddle.net/slead/KpCfW/

感谢您对我做错的任何建议,或者这是否确实可行。

1 个答案:

答案 0 :(得分:2)

我做了很多事情让JSFiddle显示一些东西......这里:http://jsfiddle.net/HxnnA/

  • 您没有在几何体中指定任何面。在这种情况下,我只是硬编码了一张脸,所有三个数据点都充当角落。或者,您可以考虑使用粒子将数据显示为点而不是面。
  • 将材料设置为THREE.DoubleSide。通常不需要或建议这样做,但是当您可以看到面部的两侧时,有助于在早期阶段进行调试。
  • 您的相机可能看错了方向。添加了lookAt()将其指向中心并使视野更宽(这样可以更方便地在编码时查找内容)。
  • 您的相机近距离和远距离平面可能偏离相机位置和地形尺寸。所以我增加了远飞机的距离。
  • 你的坐标值非常大,所以我只是用手稍微修改它们以便与相机有关,并确保它们形成一个足够大的三角形,以便在相机中看到它。您可以考虑将坐标划分为100,以使单位更小。但调整相机以适应巨大规模也应该足够了。

您的方法没有问题,只需确保您提供数据,以便在考虑相机位置,方向和近+远平面时有意义。注意你如何制作面孔。 Face3的参数是顶点数组中每个点的索引。稍后您可能需要考虑缠绕顺序,法线和紫外线。您可以研究Three.js中包含的几何类以供参考。

Three.js没有为单位指定任何含义。它只是浮点数,你可以自己决定一个单位(1.0)代表什么。无论是1毫米,1英寸还是1公里,都取决于考虑到它的应用和规模,最有意义的是什么。当实际数字非常小或非常大时,浮点数会带来精度问题。我自己的应用程序通常处理从几厘米到几百米的范围内的东西,并使用1.0 = 1米的单位,一直工作正常。