作者:dongyx
一、背景
倾斜摄影(oblique image)是指由一定倾斜角的航摄相机所获取的影像。通过在同一飞行平台上搭载多台传感器,同时从一个垂直、四个倾斜等五个不同的角度采集影像,获取地面物体更为完整的信息。航空倾斜影像不仅能够真实地反应地物情况,而且还通过采用先进的定位技术,嵌入精确的地理信息、更丰富的影像信息、更高级的用户体验,极大地扩展了遥感影像的应用领域。该技术可广泛应用于应急指挥、国土安全、城市管理、房产税收等领域。
目前在很多领域都有运用倾斜摄影数据,为了实现自动化操作,很多客户想使用组件实现倾斜数据的处理与发布三维服务。下面小编为大家介绍使用SuperMap iObjects for Java如何处理倾斜摄影数据。
二、倾斜摄影数据操作
2.1原始的倾斜摄影数据一般是OSGB格式的数据,首先我们需要对倾斜摄影数据生成配置文件,这样才能快速添加到场景中进行展示。
2.2 当我们需要在PC端、Android、iOS展示倾斜摄影数据,每个端对应的纹理是不一样的,我们就需要采用压缩纹理,将数据压缩为对应支持的格式。
2.3 当我们的tiles文件过多时,为了提高倾斜摄影数据的加载效率,我们往往会使用合并根节点。
三、实现步骤
3.1倾斜摄影数据生成配置文件
生成配置文件的思路主要是获取每个Tiles文件下的数据,然后设置数据的源坐标系、中心点坐标来生成配置文件,Java组件实现代码如下:
File file = new File("D:\\Data\\");File[] files = file.listFiles();String[] lsStrings = new String[files.length];for (int i = 0; i < files.length; i++) {if(files[i].isDirectory()) {File[] ffFiles=files[i].listFiles();lsStrings[i]=ffFiles[0].getPath();} }PrjCoordSys prjCoordSys = new PrjCoordSys();prjCoordSys.fromEPSGCode(4547);//设置坐标系Point3D point3d = new Point3D(0, 0, 0);//设置中心点坐标OSGBCacheBuilder osgb = new OSGBCacheBuilder();boolean isTrue=OSGBCacheBuilder.generateConfigFile("Data\\test3.scp", point3d, prjCoordSys,false, lsStrings);
3.2 倾斜摄影数据纹理压缩
倾斜摄影数据纹理压缩主要是设置纹理压缩类型和缓存文件类型。实现思路如下:
通过ObliquePhotogrammetryBuilder的构造方法构造一个倾斜摄影数据操作类。在构造方法中需要传一个操作类型参数:ObliqueProcessType。也可以将这几个参数全部写进ObliqueProcessType数组,这样就可以操作裁剪、合并根节点、纹理压缩了。
实现代码如下:
String path = "G:\\Data\\Config.scp";String out = "G:\\test\\ConfigTest.scp";ObliqueProcessType processTypes = PRESS_TEXTURE;//纹理压缩ObliqueProcessType[] processTypes2 = {processTypes};ObliquePhotogrammetryBuilder builder = new ObliquePhotogrammetryBuilder(processTypes2);builder.setCombineLevel(1);builder.setTexCompressType(TextureCompressType.TEXTURECOMPRESS_DXT);//设置纹理压缩格式builder.setFileType(CacheFileType.S3M);//设置缓存文件格式,可以设置为OSGB、S3M、S3MBbuilder.build(path, out, 8);
3.3倾斜摄影数据合并根节点
合并根据点思路与纹理压缩一样,主要是使用ObliquePhotogrammetryBuilder.setCombineLevel(1);设置合并根节点的金字塔层数。
三、总结
倾斜摄影数据处理完后会在结果文件夹里面生成倾斜摄影数据索引文件,*.scp。可以通过场景的图层集合Layer3Ds来加载倾斜摄影数据,保存场景和工作空间后就可以通过SuperMap iserver发布三维服务了。