#include "stdafx.h"
#include "MapElevation.h"
#include <string>
using namespace std;
#include "QB_ImgProcessFun.h"

MapElevation::MapElevation()
{
	m_grid = nullptr;

	m_gisManager = GISManager::getInstance();

	m_isAdd = false;
}


MapElevation::~MapElevation()
{
	if(m_gisManager !=NULL)
	{
		m_gisManager->DestroyObject();
		m_gisManager = NULL;
	}

	ClearDem();
}


bool MapElevation::addDem(const char* fileName)
{
	m_grid.CreateInstance("MapWinGIS.Grid");
	if( !m_grid->Open((_bstr_t)fileName,mapWindow::GridDataType::FloatDataType,VARIANT_TRUE,mapWindow::GridFileType::GeoTiff,NULL))
	{
		return false;
	}

	m_isAdd = true;

	return true;
}


bool MapElevation::getElevation2(float& alt, const double& lon, const double& lat)
{
	long column = 0;
	long  row = 0;

	m_grid->ProjToCell(lon, lat, &column, &row);
	_variant_t value = m_grid->GetValue(column, row);
	alt = (float)value;

	//如果没有加载高程数据或者加载高程数据后计算出野值
	if(m_isAdd==false || alt < -99999)
	{
		return false;
	}

	return true;
}


bool MapElevation::getElevation(float& alt, const double& lon, const double& lat)
{
	USES_CONVERSION;

	CString _DEMpath = GetSoftwareCurrentDirectory() + _T("\\ElevationData");
	bool bGCSDem = GetElevation(alt, lon, lat, _DEMpath.GetBuffer());

	_DEMpath.ReleaseBuffer();

	return bGCSDem;
}