You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
map-display/geospatialanalysis.cpp

63 lines
1.9 KiB
C++

#include "geospatialanalysis.h"
#include <QMessageBox>
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;
}