首页 > 代码库 > World Wind Java开发之七——读取本地栅格文件(影像+高程)构建三维场景

World Wind Java开发之七——读取本地栅格文件(影像+高程)构建三维场景

首先,看下本篇博客要达到的效果图:


下面逐步分析如何加载影像及高程文件。

1、WorldWind Java导入数据包

在src源码文件中找到dataimport包,这个包里面的示例代码演示了如何向WW上加载影像及高程文件。可以看到有import和install两种方式,import是简单的以图层的形式加载到WW上;install是指当文件较大时,将文件以本地缓存的方式加载,这里先以import方式导入影像及高程文件。源码比较简单,这里就不再过多解析了。

2、WWJ加载影像文件

直接给出源码,注释很清晰,不再赘述
/**
	 * 
	 * @方法名称: importImagery ;
	 * @方法描述: 导入影像文件 ;
	 * @参数 :@param imageFilePath :影像文件路径
	 * @参数 :@param worlGlCanvas :WorldWind 画布对象
	 * @返回类型: void ;
	 * @创建人:奔跑的鸡丝 ;
	 * @创建时间:2014-12-2 下午3:12:30;
	 * @throws
	 */
	private void importImagery(String imageFilePath,
			final WorldWindowGLCanvas worlGlCanvas)
	{

		try
		{
			// 读取数据并将其保存在一个缓存文件夹中
			File sourceFile = ExampleUtil.saveResourceToTempFile(imageFilePath,
					".tif");

			/**
			 * 首先创建一个raster reader读取栅格文件。raster reader由当前的栅格数据读取工作空间来创建
			 */
			DataRasterReaderFactory readerFactory = (DataRasterReaderFactory) WorldWind.createConfigurationComponent(AVKey.DATA_RASTER_READER_FACTORY_CLASS_NAME);
			DataRasterReader reader = readerFactory.findReaderFor(sourceFile,
					null);
			// 读取栅格数据之前,先验证改文件包含imagery
			AVList metadata = http://www.mamicode.com/reader.readMetadata(sourceFile, null);>这里栅格数据的读取类似ArcEngine中的工作空间的概念;另外需要注意Sector类是表述由经纬度包含的范围。

3、WWJ加载高程文件

/**
	 * 
	 * @方法名称: importElevation ;
	 * @方法描述: 导入高程数据 ;
	 * @参数 :@param elevationFilePath :高程文件路径
	 * @参数 :@param wGlCanvas :WW画布对象
	 * @返回类型: void ;
	 * @创建人:奔跑的鸡丝 ;
	 * @创建时间:2014-12-2 下午4:42:26;
	 * @throws
	 */
	private void importElevation(String elevationFilePath,
			WorldWindowGLCanvas wGlCanvas)
	{
		try
		{

			File sourceFile = ExampleUtil.saveResourceToTempFile(
					elevationFilePath, ".tif");

			// 由数据源创建一个高程模型:LocalElevationModel
			final LocalElevationModel elevationModel = new LocalElevationModel();
			elevationModel.addElevations(sourceFile);

			SwingUtilities.invokeLater(new Runnable()
			{
				public void run()
				{
					// 获取WW当前的高程模型
					Globe globe = worldWindowGLCanvas.getModel().getGlobe();
					ElevationModel currentElevationModel = globe.getElevationModel();

					// 将新创建的高程模型加入Globe中(也可以是取代当前的高程模型)
					if (currentElevationModel instanceof CompoundElevationModel)
						((CompoundElevationModel) currentElevationModel).addElevationModel(elevationModel);
					else
						globe.setElevationModel(elevationModel);

					// 飞行至当前视图
					Sector modelSector = elevationModel.getSector();
					ExampleUtil.goTo(worldWindowGLCanvas, modelSector);
				}
			});
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
运行后,加载影像和相应的DEM文件即可构建三维场景。欢迎大家留言交流,需要的请留邮箱!


World Wind Java开发之七——读取本地栅格文件(影像+高程)构建三维场景