Android WorldWind加载shapefile格式文件形成三维效果

本文介绍了在Android项目中加载shapefile格式数据形成三维立体效果的实现过程。通过WorldWind Android接口绘制立体图形,结合读取shapefile文件获取经纬度和高程数据,循环遍历绘制多个模型。由于Android环境下缺少直接读取shapefile的库,作者尝试了Geotools和GDAL,最终使用GDAL成功读取数据。文章还提供了加载立体模型的代码和遇到的问题解决方案。
摘要由CSDN通过智能技术生成

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,另一个是GDAL。这两种方法我都试过了。Geotools在Java程序中是可以正常读取出shapefile文件数据的。如果有需要可以在下方附录中下载源码。
在这里插入图片描述
在上图中可以看到,在Java中是可以读出数据的。但是同样的代码,放到Android Studio中,就会报错。首先Geotools的依赖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nanjumufeng

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值