如何在 Three.js 中将 geoJSON 绘制为网格而不是线条,并填充颜色?

2024-04-20

我正在使用 Three.js 制作一个地球仪,并将添加一些数据层。所有图层都将从 geoJSON 创建。我已将其设置为使地球仪(第一个数据文件,包含国家/地区)显示为线条。这使用三GeoJSON https://github.com/jdomingu/ThreeGeoJSON.

然而,我想要的不仅仅是轮廓。我想让这些国家充满色彩。

我当前的项目可以在这里看到:http://bl.ocks.org/jhubley/321232d4ccefefcdc53218fd0adccac5 http://bl.ocks.org/jhubley/321232d4ccefefcdc53218fd0adccac5

代码在这里:https://gist.github.com/jhubley/321232d4ccefefcdc53218fd0adccac5 https://gist.github.com/jhubley/321232d4ccefefcdc53218fd0adccac5

我尝试创建一个新函数,将多边形和多边形渲染为网格而不是线。该函数如下:

    function drawShape(x_values, y_values, z_values, options) {
        var shape_geom = new THREE.BoxGeometry();
        createVertexForEachPoint(shape_geom, x_values, y_values, z_values);

        var shape_material = new THREE.MeshBasicMaterial( {color: 0xffff00 } );
        var shape = new THREE.Mesh(shape_geom, shape_material);
        scene.add(shape);

        clearArrays();
    }

不幸的是,当我使用它时,什么也没有出现。控制台中没有错误可以帮助我理解原因。

谁能解释一下我如何设置这些国家才能填补这些国家?任何建议或指示将非常感激。


正如 @mlkn 所说,你必须使用三角形来填充网格。

我稍微搞了一下:

function drawLine(x_values, y_values, z_values, options) {
  // container
  var obj = new THREE.Object3D();

  // lines
  var line_geom = new THREE.Geometry();
  createVertexForEachPoint(line_geom, x_values, y_values, z_values);
  var line_material = new THREE.LineBasicMaterial({
    color: 'yellow'
  });

  var line = new THREE.Line(line_geom, line_material);

  obj.add(line);

  // mesh
  var mesh_geom = new THREE.Geometry();
  createVertexForEachPoint(mesh_geom, x_values, y_values, z_values);
  var mesh_material = new THREE.MeshBasicMaterial({
    color: 'blue',
    side: THREE.DoubleSide
  });
  var mesh = new THREE.Mesh(mesh_geom, mesh_material);

  obj.add(mesh);

  scene.add(obj);

  clearArrays();
}

The Object3D obj正在包裹线和网格。

面(三角形)在这里创建:

function createVertexForEachPoint(object_geometry, values_axis1, values_axis2, values_axis3) {
    for (var i = 0; i < values_axis1.length; i++) {
        object_geometry.vertices.push(new THREE.Vector3(values_axis1[i],
            values_axis2[i], values_axis3[i]));

        object_geometry.faces.push(new THREE.Face3(0, i + 1, i)); // <- add faces
    }
}

结果有点混乱,我不知道是因为数据还是顶点顺序/生成。

Demo:

  • https://gist.github.com/marcopompili/f5e071ce646c5cf3d600828ace734ce7 https://gist.github.com/marcopompili/f5e071ce646c5cf3d600828ace734ce7
  • http://bl.ocks.org/marcopompili/f5e071ce646c5cf3d600828ace734ce7 http://bl.ocks.org/marcopompili/f5e071ce646c5cf3d600828ace734ce7

在我看来, ThreeGeoJSON 写得很差,没有结构,作为示例,您只需更改名称var scene = ... to var myscene = ...整个库停止工作,这是糟糕的设计。

此外,CPU 使用率很高,可能是绘制调用过多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Three.js 中将 geoJSON 绘制为网格而不是线条,并填充颜色? 的相关文章

  • 自定义 Javascript EventManager - 请帮我完成

    我正在尝试创建一个自定义 javascript EventManager 类 我采用了 Grant Skinner 在他的 essel js 框架中使用的格式来创建类 并且需要坚持使用它 在这一点上我真的迷失了 我认为 至少在概念意义上 我
  • 如何在测试用例失败时在量角器中截取屏幕截图

    我是量角器的新手 想在浏览器中截取失败的测试用例的屏幕截图 您能帮我建议一下我该怎么做吗 谢谢 您可以使用protractor jasmine2 screenshot reporter为此 它有一些很好的功能可以满足您的目的 var Htm
  • 如何在 Angular2 中嵌入视频?

    我想开发单页应用程序 它是一个视频门户 用户可以登录 查看视频列表 导航到单个视频 对视频进行评分 并可以执行所有媒体相关任务 例如 播放 暂停 调整音量和寻找视频位置 既然有
  • jquery/javascript setInterval

    目前我正在开发一个用户通知提醒消息功能 我设法使用setInterval控制我的 Ajax 调用 检查是否有用户的通知消息 但我的问题是我只想要通知消息 在页面上出现一次 现在它在屏幕上显示多个通知警报消息 我知道你可以使用setTimeo
  • jQuery-UI 的自动完成显示效果不佳,z-index 问题

    我目前正在我的客户网上商店中实现 jQuery UI 的自动完成功能 问题是 自动完成所在的元素的 z 索引高于自动完成的 z 索引 我尝试手动设置自动完成 z index 但我感觉 jQuery UI 正在覆盖它 事实上我的问题是重复的自
  • 使用字符串函数查找周期字符串

    我正在寻找一种方法来检查字符串是否是周期性的或不使用 JavaScript 要匹配的示例字符串可以是11223331122333 然而 10101不应该匹配 来自 python 我使用了 RegEx 1 但速度相当慢 有没有任何字符串方法可
  • Flot 中轴的逗号分隔数字

    有没有办法让 Flot 使轴编号以逗号分隔 例如 用 1 000 000 代替 1000000 您可以通过使用轴的tickFormatter 属性来做到这一点 xaxis tickFormatter function val axis in
  • Ember 模型中的自定义请求 url

    我正在尝试将 Ember 数据与已构建的 REST api 一起使用 它适用于顶级路由 例如我在 api 端有课程路由 如下所示 app get courses app controllers courses findAll app get
  • 从 PHP/Web 应用程序打印多个标签到 Dymo LabelWriter 450 Turbo

    我希望添加使用 Dymo LabelWriter 450 Turbo 打印多个标签的功能 我已经从 Dymo 网站下载了 DYMO Label v 8 SDK dmg 但看不到任何 Javascript Web 相关的 SDK 文件或文档
  • 如何在D3中导入json数据?

    如何在D3中导入json文件 I did d3 json temp json 但是我如何在进一步的代码中访问这个数据集呢 到目前为止我已经尝试过 var data d3 json temp json 但使用 data data 在其余代码中
  • 在 Angular 中将图像 url 转换为 base64

    我正在努力尝试将给定的图像 url 转换为 base64 在我的例子中 我有一个带有图像路径的字符串 var imgUrl assets logoEmpresas empresa logoUrl 我如何直接将给定的图像网址转换为base64
  • TypeScript 中类似字典的对象应使用什么类型?

    在 TypeScript 中 我有时会使用期望 或返回 对象的函数 其中这些对象被视为字典 基本上我的问题是 这里使用的正确类型是什么 我可以用 Record
  • Chrome DevTools 脚本黑盒不起作用

    我正在尝试使用 chrome devtools 的新功能 黑盒脚本 这篇 Chrome Devtools 文章列出了脚本黑盒功能 https developer chrome com devtools docs blackboxing wh
  • TSConfig JSX:React JSX 与 React

    在将 Typescript 与 React 一起使用时 我们必须指定jsx in compilerOptions in tsconfig json file It has preserve react react native react
  • Javascript 闭包问题

    所以 我仍在阅读 Apress Pro Javascript 技术 但我在闭包方面遇到了麻烦 正如约翰 雷西格所说 闭包允许您引用父函数中存在的变量 然而 它在创建变量时并不提供变量的值 它提供父函数中变量的最后一个值 这是最常见的问题 您
  • 如何将 !important 添加到 CSS-in-JS (JSS) 类属性?

    我正在尝试使用一些 CSS in JS 类这个答案 https stackoverflow com questions 54525334 how can i change the label size of a material ui te
  • JavaScript 中 == 和 === 的区别[重复]

    这个问题在这里已经有答案了 有什么区别 and 在 JavaScript 中 我也见过 and 运营商 还有更多这样的运营商吗 看看这里 http longgoldenears blogspot com 2007 09 triple equ
  • JavaScript 排序列表

    Javascript 或 jQuery 中有排序列表吗 我有一个巨大的列表 随着时间的推移 插入操作很少 每次添加单个项目时 我无法为整个列表调用 object sort 我需要插入 o log n 不 没有 你拥有的只是Array sor
  • html5 canvas贝塞尔曲线获取所有点

    我喜欢从贝塞尔曲线中得到一些点 我发现 在javascript中查找三次贝塞尔曲线的所有点 https stackoverflow com questions 15397596 find all the points of a cubic
  • 无法在heroku上推送node.js应用程序

    我尝试在heroku 上推送我的node js 应用程序 但是 无法检测到此应用程序的默认语言 我什至尝试过heroku buildpacks set heroku nodejs 但还是无法推动 Counting objects 31 do

随机推荐