加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ArcGIS Flex API for 3D—DEM&RS

发布时间:2020-12-15 01:18:11 所属栏目:百科 来源:网络整理
导读:基本的思路是,前面提到Plane的geometry是存储了一个vertices数组,这个数组代表的是所有Plane的顶点,Plane本身就是一个三角网,一旦这些vertices的z值代表了实际的高程数据,就会实现真实的高低起伏,因此就是要将DEM的高程信息赋给相应的点;Plane是可以

基本的思路是,前面提到Plane的geometry是存储了一个vertices数组,这个数组代表的是所有Plane的顶点,Plane本身就是一个三角网,一旦这些vertices的z值代表了实际的高程数据,就会实现真实的高低起伏,因此就是要将DEM的高程信息赋给相应的点;Plane是可以选用不同材料渲染的,使用BitmapFileMaterial可以将RS影像与DEM叠加。

如何获取RS影像和DEM信息:本地数据和ArcGISServer服务两种方式。

①本地数据

影像获取比较简单,支持jpg、png、bmp等格式,只需要其地址(虚拟地址or本地地址)。


获取影像

var bmpfm:BitmapFileMaterial = new BitmapFileMaterial("http://heyb/FlexData/pv3d-rs.jpg");
bmpfm.interactive = true;
m_heatMapPlane = new Plane(bmpfm,460,500,46,50);

DEM的信息获取是个难点,AS没有办法直接读取DEM的文件格式。ArcGIS提供了一个GP工具Sample,对DEM重采样,输出为一个GeodatabseTable表。


Sample工具

目前能够处理dbf格式的本地路径Table表(Tips:测试发现,将dbf文件的后缀改为swf,可以处理虚拟路径),处理dbf的核心程序位于srcorgvanrijkomdbf。


处理dbf文件

urlloader.load(new URLRequest("E: PaperVision3Dpv3d-rs-dem.dbf"));

var bdfByteArray:ByteArray = urlloader.data as ByteArray;
var dbfhdr:DbfHeader = new DbfHeader(bdfByteArray);
var vertices:Array = new Array();
for( var ii : int = 0; ii < dbfhdr.recordCount; ii++)
{ 
var dbfRecord : DbfRecord = DbfTools.getRecord( bdfByteArray,dbfhdr,ii );
var vertex:Vertex3D = new Vertex3D(dbfRecord.values.X,dbfRecord.values.Y,dbfRecord.values.ELE); 
	vertices.push(vertex);
}        

如果要以虚拟路径的方式load,可以将Sample后的Table存储在geodatabase当中,然后导出为XMLRecordset Document,AS处理XM文件就轻松多了。


Export To XML Recordset Document



处理XML文件

urlloader.load(new URLRequest("http://heyb/FlexData/pv3d-ele.xml"));

var xml:XML = new XML(e.target.data);		
var fields:XMLList = xml.Data.Fields.FieldArray.Field;	
var records:XMLList = xml.Data.Records.Record;	
var vertices:Array = new Array();				
for (var ii:int = 0; recordIndex < records.length(); ii++)
{
	var recordValues:XMLList = records[recordIndex].Values.Value;
	var vertex:Vertex3D = new Vertex3D(recordValues[1],recordValues[2],recordValues[3]);
     vertices.push(vertex);
}		

②ArcGIS Server服务

同样,影像获取比较简单,mapserver的export方法,可以获取图片的虚拟地址,其它实现类似①。

DEM的信息获取有几个思路:

a、等待rest的支持,如果未来ESRI能够支持rest直接获取dem的信息(比如返回json的字符串),那会简单得多。

b、GP服务的方式,构建一个Sample模型发布成服务。


通过GP服务获取高程信息

var params:Object = new Object();
gp.execute(params,new AsyncResponder(onDEMSampleResult,onFault));  

var pv:ParameterValue = gpResult.parameterValues[0];                    
var fs:FeatureSet = pv.value as FeatureSet;  
var attributes:Array = fs.attributes;		
var vertices:Array = new Array();
for (var recordIndex:int = 0; recordIndex < attributes.length; recordIndex++)
{
var record:Object = attributes[recordIndex];
var vertex:Vertex3D = new Vertex3D(record.x,record.y,record.g_g_g2); 
vertices.push(vertex);
}


c、其它,最终DEM的高程信息是用来改变Plane的z坐标的,如果有其它任何方式使得DEM的高程信息被AS很简单地处理,就可以考虑。

其它具体实现参见代码。

功能如图,DEM&RS还具有飞行模式,沿设定飞行路径改变相机参数,拍摄到的场景也会改变:



(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读