Android WorldWind加载shapefile格式文件形成三维效果
目录
- 1 前言
- 2 实现思路
- 3 绘制Polygons
- 4 读取shapefile文件
- 5 加载立体模型
- 6 问题
1 前言
在项目中有时会加载shapefile格式的数据,要形成三维立体效果。但是查看worldwind NASA官网,在worldwind android的使用教程中并没用加载shapefile格式的教程,然后源码中也没有开发加载shp文件的接口。但是要项目要加载shapefile的模型,怎么办呢?我查看使用教程,发现了一个可以绘制立体图形的接口。就是下面这个接口。
效果图如下:
于是,就联想到,既然能画一个立体模型,那画多个立体模型,不就成了。顺着这条思路继续研究。最后终于研究出来了。
2 实现思路
1.按照worldwind android的绘制立体图形的方法,绘制出单个立体图形;
2.android读取shapefile格式文件,找到立体图形的经纬度和高程数据;
3.循环遍历shapefile文件中的数据,绘制多个立体图形;
4.完成加载shapefile格式的三维模型加载;
找到实现思路,然后逐一解决问题,就很简单了。
3 绘制Polygons
我们按照worldwind的教程先实现Polygons的绘制。代码如下:
private void addShape(){
RenderableLayer layer = new RenderableLayer();
worldWindow.getLayers().addLayer(layer);
List<Position> positions = Arrays.asList(
Position.fromDegrees(lat, lon, 2.0e5),
Position.fromDegrees(lat, lon+1, 7.0e5),
Position.fromDegrees(lat+1, lon+1, 9.0e5),
Position.fromDegrees(lat+1, lon, 7.0e5)
);
ShapeAttributes attrs = new ShapeAttributes();
attrs.setDrawVerticals(true); // display the extruded verticals
attrs.setInteriorColor(new Color(1, 1, 1, 0.5f)); // 50% transparent white
attrs.setOutlineWidth(3);
Polygon poly = new Polygon(positions,attrs);
poly.setExtrude(true); // extrude the polygon from the ground to each polygon position's altitude
layer.addRenderable(poly);
}
效果图如下:
4 读取shapefile文件
在上一步中,我们实现了绘制立体图形,接下来研究如何在android上读取shapefile文件。我翻遍了全网,没有找到适用于android的读取shapefile格式的第三方库(如果有谁知道可以适用于android读取shapefile的第三方库,欢迎在评论区留言)。那没办法了,只能自己琢磨了。我在java中找到两种可以读取shapefile的工具,一个是Geotools,