三维视域分析要解决在一个特定的视角是否能看到某个位置上的建筑。 如果需求合理,数据完备这个三维视域分析的接口完全可以实现我描述的情况。(需求合理指的是视距和视角可及的范围)。
三维视域怎么进行分析先要搞清楚视域分析流程。
第一步:从某一视角观看真实场景 如下图,绿色都是可见的。
这个时候我们使用一个函数根据这个位置和相关参数创建一分析结果。
//观察位置
IPosition65 ViewerPosition = sg65.Navigate.GetPosition(AltitudeTypeCode .ATC_PIVOT_RELATIVE);
//横向视域范围
double FieldOfViewX = 80.0;
//纵向视域范围
double FieldOfViewY = 60.0;
//可视距离
double Distance = 2000;
Create3DViewshed(ViewerPosition, FieldOfViewX, FieldOfViewY, Distance, "" , "3DViewshed");
第二步:创建完分析结果返回一个I3DViewshed65对象,
StartViewshedVisibilityQuery来控制I3DViewshed65对象的查询,执行完接口就可以开始进行可视位置的查询工作了。
第三步:对可视位置的查询,
QueryPointVisibility(QueryPosition);
//空间中的任意位置
IPosition65 QueryPosition
将要查询的位置进行查询后会返回 4类情况,visible,no visble,outside,error。
第四步:关闭查询EndVisibilityQuery()
感兴趣的skyline开发者可以自己尝试三维视域分析这个接口。如果有相关的需求应该可以做出很酷的功能。
如需要以上的代码,可以积分下载