#include "geospatialanalysis.h" #include GeoSpatialAnalysis::GeoSpatialAnalysis() { } /*@brief 两点间的可视性 * @param pntView 观察点 * @param pntObject 目标点 */ UG3DAnalyst::SingleResult *GeoSpatialAnalysis::DoublePointVisibility(QMapControl* pMapControl,UGPoint2D pntView, UGPoint2D pntObject) { //通过下面的方法首先判断点所在的位置是否存在高程数据; UGDatasetRasterPtr viewPtDataset = pMapControl->getDemDataSet(pntView); UGDatasetRasterPtr objectPtDataset = pMapControl->getDemDataSet(pntObject); if(viewPtDataset == NULL || objectPtDataset == NULL) { QMessageBox::about(NULL,"提示","无高程数据 "); return NULL;//-1 } if(viewPtDataset != objectPtDataset) { QMessageBox::about(NULL,"提示","观测点与被观测点不属于同一个高程数据集 "); return NULL;//-1 } UGDatasetRasterPtr datasetRaster = viewPtDataset; //3D分析分析实例对象 UG3DAnalyst visAnalsyt; UGPoint3D pntView3D,pntObject3D; //高程值需根据x,y查询数据集得到 //得到当前测量点的高程值 // 1.首先将坐标点转换为栅格数据集对应的行和列 UGPoint pntviewImg; double altitude; datasetRaster->XYToImg(pntView,pntviewImg); altitude = datasetRaster->GetValue(pntviewImg.x,pntviewImg.y); pntView3D.x = pntView.x; pntView3D.y = pntView.y; pntView3D.z = altitude; UGPoint pntObjectImg; //坐标点转换为栅格数据集对应的行和列 datasetRaster->XYToImg(pntObject,pntObjectImg); altitude = datasetRaster->GetValue(pntObjectImg.x,pntObjectImg.y); pntObject3D.x = pntObject.x; pntObject3D.y = pntObject.y; pntObject3D.z = altitude; //进行通视分析查询; UG3DAnalyst::SingleResult* result = visAnalsyt.IsVisible(datasetRaster,pntView3D,pntObject3D); return result; }