4.文件数据源-本地文件
来源:互联网 发布:移动运营商数据分析 编辑:程序博客网 时间:2024/06/07 02:14
World Wind Java 可以加载本地的文件,也可以加载网络的文件资源,只要是以文件提供的统称文件数据源。
Shape文件
Shape文件实际是一组文件,包含图元文件(.shp)、属性文件(.dbf)、索引文件(.shx)和投影文件(.prj)。
在2.0及之前的版本,World Wind Java首先使用ShapefileLoader类完成对Shape文件的读取和加载,在通过createLayerFromSource方法创建RenderableLayer,最后将创建的Layer加载Layers上。
代码如下:
package wwjTest;import gov.nasa.worldwind.layers.Layer;import gov.nasa.worldwindx.examples.util.ShapefileLoader;public class wwjShape extends wwjBasics { protected Layer shapeLayer; public boolean AddShapeData(String filePath, String layerName,double maxActiveAltitude,double minActiveAltitude){ boolean rtnResult = false; try{ ShapefileLoader SFL = new ShapefileLoader(); this.shapeLayer = SFL.createLayerFromSource(filePath); shapeLayer.setName(layerName); shapeLayer.setMaxActiveAltitude(maxActiveAltitude); shapeLayer.setMinActiveAltitude(minActiveAltitude); this.worldWindowGLCanvas.getModel().getLayers().add(shapeLayer); rtnResult = true; } catch(Exception ex){ System.out.println(ex.getMessage()); } return rtnResult; } public wwjShape(){ //增加Shape数据 AddShapeData("shp/world_adm0.shp","国界",33500000,0); this.layerPanel.update(this.worldWindowGLCanvas); } public static void main(String[] args) { String strTitle = "显示Shape文件"; wwjShape wwjRun = new wwjShape(); wwjRun.setTitle(strTitle); }}
运行结果如下:
在2.1版本ShapefileLoader已经被弃用。shapefile不包含颜色和其他可视属性的标准定义。尽管有些shapefile包含每个记录的键值属性中的颜色信息,ShapefileLoader并没有试图解释信息。取而代之的是,由ShapefileLoader创建的世界风渲染对象被赋予了一种随机的颜色。调用者可以通过定义ShapefileLoader的子类来替换或扩展该行为,并覆盖以下内容方法nextPolygonAttributes();这是SDK对弃用原因所做的解释。
新代码如下:
package wwjTest;import gov.nasa.worldwind.formats.shapefile.ShapefileLayerFactory;import gov.nasa.worldwind.layers.Layer;public class wwjShape extends wwjBasics{ private static final long serialVersionUID = 1L; protected Layer shapeLayer; public boolean AddShapeData(String filePath, String layerName,double maxActiveAltitude,double minActiveAltitude){ boolean rtnResult = false; try{ ShapefileLayerFactory factory = new ShapefileLayerFactory(); this.shapeLayer = (Layer) factory.createFromShapefileSource(filePath); this.shapeLayer.setName(layerName); this.shapeLayer.setMaxActiveAltitude(maxActiveAltitude); this.shapeLayer.setMinActiveAltitude(minActiveAltitude); this.worldWindowGLCanvas.getModel().getLayers().add(shapeLayer); rtnResult = true; } catch(Exception ex){ System.out.println(ex.getMessage()); } return rtnResult; } public wwjShape(){ //增加Shape数据 AddShapeData("shp/world_adm0.shp","国界",33500000,0); this.layerPanel.update(this.worldWindowGLCanvas); } public static void main(String[] args) { String strTitle = "显示Shape文件"; wwjOldShape wwjRun = new wwjOldShape(); wwjRun.setTitle(strTitle); }}
结果和旧代码效果一样,就不重复传图了。
KML文件
World Wind Java使用RenderableLayer图层类表现KML数据,一个RenderableLayer图层可以对应多个KML文件。World Wind Java首先利用kmlRoot类完成对KML文件的读取和加载,在通过KMLController类的Renderable接口将KML中的地理信息位置加载到Layer中,最后将创建的Layer加在Layers上。
代码如下:
package wwjTest;import gov.nasa.worldwind.layers.RenderableLayer;import gov.nasa.worldwind.ogc.kml.KMLRoot;import gov.nasa.worldwind.ogc.kml.impl.KMLController;public class wwjKML extends wwjBasics{ private static final long serialVersionUID = 1L; protected KMLController kmlController; protected RenderableLayer renderableLayer; public boolean AddKMLData(String filePath,String title){ boolean rtnResult = false; try{ KMLRoot kmlRoot = KMLRoot.create(filePath); kmlRoot.parse(); this.kmlController = new KMLController(kmlRoot); this.renderableLayer = new RenderableLayer(); this.renderableLayer.addRenderable(kmlController); this.renderableLayer.setName(title); this.worldWindowGLCanvas.getModel().getLayers().add(this.renderableLayer); rtnResult = true; } catch(Exception ex){ System.out.println(ex.getMessage()); } return rtnResult; } public wwjKML(){ //增加KML数据 AddKMLData("kml/GoogleTutorialExample01.kml","Simple placemark"); this.layerPanel.update(this.worldWindowGLCanvas); } public static void main(String[] args) { String strTitle = "显示kml文件"; wwjKML wwjRun = new wwjKML(); wwjRun.setTitle(strTitle); }}
运行结果如下:
GPS轨迹文件
GPS轨迹文件有很多种,其中开放性最强的、应用最广泛的就是GPX文件。 World Wind Java使用MarkerLayer图层类表现GPX数据,一个MarkerLayer可以对应多个GPX文件,World Wind Java首先试用GpxReader类完成对GPX文件的读取和加载,在通过getTrackPositionIterator()将读入的数据转换为Position序列,然后定义统一或单独的BasicMarkerAttributes,最后将地理位置和显示属性合并成Marker的数组,当这个数组加载到MarkerLayer上时就可以看见轨迹了。
代码如下
package wwjTest;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import javax.xml.parsers.ParserConfigurationException;import org.xml.sax.SAXException;import gov.nasa.worldwind.formats.gpx.GpxReader;import gov.nasa.worldwind.geom.Position;import gov.nasa.worldwind.layers.MarkerLayer;import gov.nasa.worldwind.render.Material;import gov.nasa.worldwind.render.markers.BasicMarker;import gov.nasa.worldwind.render.markers.BasicMarkerAttributes;import gov.nasa.worldwind.render.markers.BasicMarkerShape;import gov.nasa.worldwind.render.markers.Marker;public class wwjGPS extends wwjBasics{ private static final long serialVersionUID = 1L; protected MarkerLayer markerLayer; public boolean AddGPSData(String filePath, String layerName){ boolean rtnResult = false; try{ GpxReader reader = new GpxReader(); reader.readFile(filePath); Iterator<Position> positions = reader.getTrackPositionIterator(); BasicMarkerAttributes attrs = new BasicMarkerAttributes(Material.WHITE,BasicMarkerShape.SPHERE,1d); ArrayList<Marker> markers = new ArrayList<Marker>(); while(positions.hasNext()){ markers.add(new BasicMarker(positions.next(),attrs)); } markerLayer = new MarkerLayer(markers); markerLayer.setOverrideMarkerElevation(true); markerLayer.setElevation(0); markerLayer.setName(layerName); markerLayer.setEnablePickSizeReturn(true); this.worldWindowGLCanvas.getModel().getLayers().add(markerLayer); rtnResult = true; } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return rtnResult; } public wwjGPS(){ AddGPSData("gps/tuolumne.gpx","GPS轨迹"); this.layerPanel.update(this.worldWindowGLCanvas); } public static void main(String[] args) { String strTitle = "显示GPS轨迹"; wwjGPS wwjRun = new wwjGPS(); wwjRun.setTitle(strTitle); }}
结果如下
- 4.文件数据源-本地文件
- 本地文件数据源
- HIVE系列(5)HIVE 数据源文件 本地文件、hdfs文件加载,hql 统计电商tb 每年订单最畅销商品
- 本地文件/服务器文件 互传
- 本地文件/服务器文件 互传
- 5.文件数据源-网络数据源
- 关于本地文件请求json文件
- Java解析本地文件Excel文件
- OC中读写文件 (本地文件/网络文件)
- C#使用文件数据源
- BW 上传文件数据源
- jboss 加密数据源文件
- json数据源文件解析
- mabitis数据源文件编写
- jdbc数据源文件
- 本地文件和服务器文件互传
- 本地文件上传、下载服务器文件事物码
- 读取HTTP链接文件 到本地文件
- sqoop安装
- vim的3种基本模式
- Go小tips
- c语言操作符
- Get与Post的区别
- 4.文件数据源-本地文件
- [简单逻辑学]逻辑学的基本原理——定义术语
- c语言 把一个数分解成两个素数的和,判断素数精简算法,scanf("%c")读入的是回车符‘\n’
- 开发问题总结
- Hive学习笔记 1 Hive体系结构
- 【每周论文】Apollo: Scalable and Coordinated Scheduling for Cloud-Scale Computing
- Linux shell 教程 01_shell变量
- 2017-10-8离线赛总结
- Scrapy学习笔记(4)—Spider