ww可以根据DLG图批量生成假三维模型,这对于小区等特征相似的建筑物模型的构建是非常有用的。下面来看如何一步步实现假三维模型的加载:

1、Shp文件的制作

首先在arcmap下数字化几个建筑物,并新建height字段存储建筑物的高度。

2、代码实现

  1. /**
  2. *
  3. * @方法名称: init3DModel ;
  4. * @方法描述: 导入简易三维模型 ;
  5. * @参数 :@param filePath :shp文件路径
  6. * @返回类型: void ;
  7. * @创建人:bluce;
  8. * @创建时间:2015年2月3日 下午6:10:22;
  9. * @throws
  10. */
  11. private void init3DModel(String filePath)
  12. {
  13. Shapefile shapefile = new Shapefile(filePath);
  14. RenderableLayer layer = new RenderableLayer();
  15. layer.setName("简易三维模型");
  16. layer.setPickEnabled(true);
  17. try
  18. {
  19. while (shapefile.hasNext())
  20. {
  21. ShapefileRecord record = shapefile.nextRecord();
  22. layer.addRenderable(makeShape(record));
  23. }
  24. wwPanel.getWorldWindowGLCanvas().getModel().getLayers()
  25. .add(layer);
  26. }
  27. finally
  28. {
  29. shapefile.close();
  30. }
  31. }
  32. /**
  33. *
  34. * @方法名称: makeShape ;
  35. * @方法描述:  根据shp文件每条记录创建模型 ;
  36. * @参数 :@param record
  37. * @参数 :@return
  38. * @返回类型: ExtrudedPolygon ;
  39. * @创建人:bluce;
  40. * @创建时间:2015年2月3日 下午6:11:08;
  41. * @throws
  42. */
  43. private ExtrudedPolygon makeShape(ShapefileRecord record)
  44. {
  45. String IMAGE_PATH = "F:\\data\\wwj\\build123sm.jpg";
  46. Double height = null;
  47. String[] heightKeys = new String[]
  48. { "height", "Height", "HEIGHT" };
  49. for (String key : heightKeys)
  50. {
  51. Object o = record.getAttributes().getValue(key);
  52. if (o != null)
  53. {
  54. height = Double.parseDouble(o.toString());
  55. }
  56. }
  57. // 顶部属性
  58. ShapeAttributes capAttrs = new BasicShapeAttributes();
  59. capAttrs.setOutlineMaterial(Material.GRAY);
  60. capAttrs.setInteriorMaterial(Material.CYAN);
  61. // 边属性
  62. ShapeAttributes sideAttributes = new BasicShapeAttributes();
  63. sideAttributes.setInteriorMaterial(Material.LIGHT_GRAY);
  64. sideAttributes.setOutlineMaterial(Material.DARK_GRAY);
  65. sideAttributes.setImageSource(IMAGE_PATH);
  66. // 创建拉伸多边形
  67. VecBuffer vb = record.getPointBuffer(0);
  68. Polygon pgonAirspace = new Polygon(vb.getLocations()); // 根据点串构建多边形
  69. //纹理
  70. ArrayList<String> textures = new ArrayList<String>();
  71. for (int i = 0; i < pgonAirspace.getLocations().size(); i++)
  72. {
  73. textures.add(IMAGE_PATH);
  74. }
  75. ExtrudedPolygon polygon = new ExtrudedPolygon(
  76. pgonAirspace.getLocations(), height, textures);
  77. polygon.setCapAttributes(capAttrs);
  78. polygon.setSideAttributes(sideAttributes);
  79. polygon.setAltitudeMode(WorldWind.CLAMP_TO_GROUND);
  80. return polygon;
  81. }

效果如下图所示:

3、问题

发现模型加载不了纹理啊,查了几遍不知道问题出在哪里,希望懂的朋友看到留言给指点下啊,不胜感激。
----------------------------------------------2015年7月26日----------------------------------------------
感谢Q_H_Wang提供的解决方案: 加载不上纹理的是因为 pgonAirspace.getLocations().获取的坐标集合第一个元素与最后一个一样造成的,除掉最后一个元素即可加载。所以只需在添加纹理的地方加个减一即可:
  1. ArrayList<String> textures = new ArrayList<String>();
  2. for (int i = 0; i < pgonAirspace.getLocations().size() - 1; i++)
  3. {
  4. textures.add(IMAGE_PATH);
  5. }

World Wind Java开发之十二——加载粗制三维模型(ExtrudedPolygon)(转)的更多相关文章

  1. World Wind Java开发之十五——加载三维模型(转)

    之前的一篇博客是关于加载粗三维模型的,见http://blog.csdn.net/giser_whu/article/details/43452703,这个地方还存在着不能加载纹理的问题,一直没呢解决 ...

  2. World Wind Java开发之十四——添加WMS地图服务资源(转)

    数据是GIS的核心,没有数据一切无从谈起,Internet上有很多在线WMS地图服务资源,我们可以好好利用这些数据资源,比如天地图.必应地图.NASA.OGC数据服务等等. 在我们国家常用的还是天地图 ...

  3. Java开发学习(十二)----基于注解开发依赖注入

    Spring为了使用注解简化开发,并没有提供构造函数注入.setter注入对应的注解,只提供了自动装配的注解实现. 1.环境准备 首先准备环境: 创建一个Maven项目 pom.xml添加Spring ...

  4. World Wind Java开发之十五——载入三维模型

    之前的一篇博客是关于载入粗三维模型的,见http://blog.csdn.net/giser_whu/article/details/43452703,这个地方还存在着不能载入纹理的问题,一直没呢解决 ...

  5. World Wind Java开发之十——AnalyticSurface栅格渲染(转)

    http://blog.csdn.net/giser_whu/article/details/43017881 1.AnalyticSurfaceDemo ArcGIS下对栅格的各种分级渲染效果是非常 ...

  6. Java进阶(三十二) HttpClient使用详解

    Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们 ...

  7. 201871010106-丁宣元 《面向对象程序设计(java)》第十二周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第十二周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nw ...

  8. Java进阶(五十二)利用LOG4J生成服务日志

    Java进阶(五十二)利用LOG4J生成服务日志 前言 由于论文写作需求,需要进行流程挖掘.前提是需要有真实的事件日志数据.真实的事件日志数据可以用来发现.监控和提升业务流程. 为了获得真实的事件日志 ...

  9. 分享:Java 开发精美艺术二维码

    博客地址:https://ainyi.com/58 Java 开发精美艺术二维码 看到网络上各种各样的二维码层出不穷,好像很炫酷的样子,一时兴起,我也要制作这种炫酷二维码效果 例如: 根据以往例子 根 ...

随机推荐

  1. c++常考算法知识点汇总

    前言:写这篇博客完全是给自己当做笔记用的,考虑到自己的c++基础不是很踏实,只在大一学了一学期,c++的面向对象等更深的知识也一直没去学.就是想当遇到一些比较小的知识,切不值得用一整篇 博客去记述的时 ...

  2. KONG -- 配置 service 并添加 key-auth

    默认情况下, KONG 监听下面几个端口: 8000   这个端口用于监听客户端的 HTTP 请求,并转发给上游服务 8443   这个端口用于监听客户端的 HTTPS 请求,并转发给上游服务 800 ...

  3. cf837D(01背包)

    题目链接: http://codeforces.com/contest/837/problem/D 题意: 给出 n 个数, 从中选出 k 个数使得这 k 个数的乘积末尾 0 最多 . 思路: 先记录 ...

  4. 洛谷P2574 XOR的艺术

    题目描述 \(AKN\)觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为\(n\)的\(01\)串. 2 ...

  5. Qt学习之网络编程(二)

    UDP协议 UDP协议(用户数据报协议)是一种简单轻量级.不可靠.面向数据报.无连接的传输层协议.之后我们会介绍TCP协议,相对于UDP,TCP是一种可靠的.有连接的协议:既然这样我们就用TCP不就好 ...

  6. linux下rename命令使用(可以实现文件批量重名)

    rename命令使用 把所有文件中的@符号去掉 wang@2a.pngzhang@2a.pngzhou@2a.pnghaha@2a.pngmama@2a.png CentOS:rename \@2a. ...

  7. ubuntu 的 python从2.* 升级到3.*

    1.在ubuntu 的终端中用代码下载最新的Python sudo apt-get install python3 2.用命令删除usr/bin/目录下的默认python link文件root@sal ...

  8. 关于Function.prototype.apply.call的一些补充

    宿主对象,在javascript中有三类对象,本地对象,内置对象和宿主对象.其他两类暂且不提,宿主对象是指什么呢(DOM BOM),控制台对象是文档对象模型的扩展,也被认为是宿主对象.那么,它们有什么 ...

  9. Java多线程与并发——死锁与中断线程

    过多的同步有可能出现死锁,死锁的操作一般是在程序运行的时候才有可能出现. 多线程中要进行资源的共享,就需要同步,但同步过多,就可能造成死锁. 死锁例子: package com.vince; /** ...

  10. 使用fastcgi_cache加速你的Nginx网站

    很久以前在TW上挖了个坑,说nginx的fastcgi_cache是被大家忽视的一大金矿,今天把这个坑填上. 对于变化不太频繁的数据,大家都比较喜欢存Memcached以减少数据库的读取,但还是会有语 ...