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.

329 lines
7.8 KiB
C++

2 years ago
#include "StdAfx.h"
#include "Globe.h"
//<2F><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HWND g_viewHwnd;
//<2F><><EFBFBD><EFBFBD>
CBitmap g_bmpRed;
//<2F>̵<EFBFBD>
CBitmap g_bmpGreen;
//<2F>Ƶ<EFBFBD>
CBitmap g_bmpYellow;
//<2F>ҵ<EFBFBD>
CBitmap g_bmpGray;
//<2F><><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2><EFBFBD><EFBFBD>ʾ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
int g_refreshTimes;
//ң<><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
double g_mainFrameCountTime;
//<2F><>ͼ<EFBFBD><CDBC>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HWND g_mapHwnd;
//<2F><><EFBFBD><EFBFBD>վλ<D5BE><CEBB>
double g_gcsLon; //<2F><><EFBFBD><EFBFBD>
double g_gcsLat; //γ<><CEB3>
double g_gcsAlt; //<2F>߶<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><30>õ㣻1Ϊ<31><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0BCAD>ɾ<EFBFBD><C9BE>ģʽ
int g_ptModeInLineDesign;
//<2F><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
CString GetSoftwareCurrentDirectory()
{
TCHAR exeFullPath[MAX_PATH];
GetModuleFileName(NULL, exeFullPath, MAX_PATH);
CString str;
str.Format(_T("%s"), exeFullPath);
int index = str.ReverseFind('\\');
str.Delete(index, str.GetLength()-index);
return str;
}
//<2F><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>strDir
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>true<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
// false<73><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
bool SearchDirectory(const CString &strDir)
{
CFileFind fileFind;
if (fileFind.FindFile(strDir))
{
fileFind.Close();
return true;
}
else
{
fileFind.Close();
return false;
}
}
//<2F><><EFBFBD>ܣ<EFBFBD><DCA3>½<EFBFBD><C2BD>ļ<EFBFBD><C4BC><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>strDir
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>true<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
// false<73><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
extern bool CreateDirectory(const CString &strDir)
{
CString File_directory(strDir);
if (!PathIsDirectory(File_directory))//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
{
CreateDirectory(File_directory, NULL);
}
return true;
}
//<2F><>ȡû<C8A1>к<EFBFBD>׺<EFBFBD><D7BA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
/*
extern CString ExtractFileName(CString fileName)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
int dotIndex = fileName.ReverseFind(_T('.'));
// <20><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5>˵㣬<CBB5><E3A3AC><EFBFBD>ҵ㲻<D2B5>ǵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD>
if (dotIndex != -1)
{
// <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׺
CString fileNameWithoutExtension = fileName.Left(dotIndex);
return fileNameWithoutExtension;
}
else
{
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5>㣬˵<E3A3AC><CBB5>û<EFBFBD>к<EFBFBD>׺<EFBFBD><D7BA>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>ʾ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
return fileName;
}
}*/
2 years ago
//<2F><><EFBFBD>ܣ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽڷֳ<DAB7><38><CEBB><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֽ<EFBFBD>oneByte
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><38><CEBB>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>bitArray
void BYTE2BitArray(int *bitArray, const BYTE oneByte)
{
memset(bitArray,0,8);
bitArray[0] = oneByte&0X01;
bitArray[1] = (oneByte&0X02)>>1;
bitArray[2] = (oneByte&0X04)>>2;
bitArray[3] = (oneByte&0X08)>>3;
bitArray[4] = (oneByte&0X10)>>4;
bitArray[5] = (oneByte&0X20)>>5;
bitArray[6] = (oneByte&0X40)>>6;
bitArray[7] = (oneByte&0X80)>>7;
}
//<2F><><EFBFBD>ܣ<EFBFBD><DCA3>޷<EFBFBD><DEB7><EFBFBD>2<EFBFBD><32><EFBFBD>ֽڵ<D6BD><DAB5><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>飨16<31><36><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
//<2F><><EFBFBD><EFBFBD>޷<EFBFBD><DEB7>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD>usValue
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>16<31><36><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>һά<D2BB><CEAC><EFBFBD><EFBFBD>
void UnsignedShort2BitArray(int *pBitArray, const unsigned short usValue)
{
memset(pBitArray,0,16);
pBitArray[0] = usValue&0X01;
pBitArray[1] = (usValue&0X02)>>1;
pBitArray[2] = (usValue&0X04)>>2;
pBitArray[3] = (usValue&0X08)>>3;
pBitArray[4] = (usValue&0X10)>>4;
pBitArray[5] = (usValue&0X20)>>5;
pBitArray[6] = (usValue&0X40)>>6;
pBitArray[7] = (usValue&0X80)>>7;
pBitArray[8] = (usValue&0X100)>>8;
pBitArray[9] = (usValue&0X200)>>9;
pBitArray[10] = (usValue&0X400)>>10;
pBitArray[11] = (usValue&0X800)>>11;
pBitArray[12] = (usValue&0X1000)>>12;
pBitArray[13] = (usValue&0X2000)>>13;
pBitArray[14] = (usValue&0X4000)>>14;
pBitArray[15] = (usValue&0X8000)>>15;
}
//<2F><><EFBFBD>ܣ<EFBFBD>GPS UTCʱ<43><CAB1>ת<EFBFBD><D7AA><EFBFBD>ɱ<EFBFBD><C9B1><EFBFBD>ʱ<EFBFBD><CAB1>
//<2F><><EFBFBD>룺GPS UTCʱ<43><CAB1>utcTime
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
CString GPSUTCTime2BeijingTime(const double utcTime)
{
long nTimeGps = static_cast<long>(utcTime);
CString strBeijingTime = _T("");
strBeijingTime.Format(_T("%02d:%02d:%02d"), (nTimeGps/3600+8>=24?nTimeGps/3600+8-24:nTimeGps/3600+8), nTimeGps%3600/60, nTimeGps%3600%60);
return strBeijingTime;
}
//<2F><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߺţ<DFBA>1<EFBFBD><31>2<EFBFBD><32>3<EFBFBD><33>4<EFBFBD><34>5<EFBFBD><35>
CString GetFlyLineName( const int lineID )
{
CString str;
str.Format( "%d", lineID );
return (GetSoftwareCurrentDirectory() + _T( "\\route" ) + str + _T( ".txt" ));
}
CString GetFlyLineDirName( const int lineID )
{
CString str;
if (lineID<=5)
{
str.Format( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d", lineID );
}
else if (lineID == 11)
{
str = "Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
}
else if( lineID == 12 )
{
str = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD>";
}
else if (lineID == 14)
{
str = "<EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD><EFBFBD><EFBFBD>";
}
return (GetSoftwareCurrentDirectory() + _T( "\\Route\\" ) + str );
}
//<2F><>ȡ<EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
CString ExtractDirPath(CString strFullPath)
{
int n=strFullPath.ReverseFind('\\')+1;
return strFullPath.Left(n);
}
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
CString ExtractFileName(CString strFullPath,bool bIncludeType)
{
CString strFile;
int n=strFullPath.GetLength()-strFullPath.ReverseFind('\\')-1;
strFile=strFullPath.Right(n);
if (bIncludeType==false) //ȥ<><C8A5><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>׺
{
n = strFile.ReverseFind('.');
return strFile.Left(n);
}
else
{
return strFile;
}
}
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
CString ExtractFileType(CString strFullPath)
{
int n=strFullPath.GetLength()-strFullPath.ReverseFind('.')-1;
return strFullPath.Right(n);
}
2 years ago
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>
/************************************************************************/
structPoint g_structPointVisible[360];
structPoint g_structPointNotVisible[722];
structPoint g_structPointVisiReal[180];
structPoint g_structPointNotVisiReal[180];
structPoint g_structPointCrashReal[360];
long m_longGroundID = 0; //<2F><><EFBFBD><EFBFBD>վ<EFBFBD><D5BE><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
long m_visbleCircleLayerID = -1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
long m_notVisibleCircleLayerID = -1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
long m_visiRealCircleLayerID = -1; //ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
long m_notVisiRealCircleLayerID = -1; //ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
long m_RealCircleLayerID = -1; //ʵʱԲͼ<D4B2><CDBC>
long m_longContourLineID[20] = {-1}; //ͨ<>ӵȸ<D3B5><C8B8><EFBFBD>ͼ<EFBFBD><CDBC> ÿ500<30><30>һ<EFBFBD><D2BB> 500 1000 1500 2000 2500 .... 10000
long m_longContourTextID[20] = {0}; //ͨ<>ӵȸ<D3B5><C8B8>߱<EFBFBD>ǩͼ<C7A9><CDBC>
bool g_bSelectDropPoint = false; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ѡ<EFBFBD><D1A1>
long m_longSelectLineID = -1; //<2F><><EFBFBD><EFBFBD>վ<EFBFBD><D5BE>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
long m_longLabelPlotID = 0; //<2F><><EFBFBD><EFBFBD>վ<EFBFBD><D5BE>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߱<EFBFBD>עͼ<D7A2><CDBC>
long m_longLinePointID = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϵĵ<CFB5><C4B5><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
long m_crashAreaLayerID = -1; //ʵʱ<CAB5><CAB1>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
long m_fightRegionLayerID = -1; //<2F><><EFBFBD>÷<EFBFBD>Χͼ<CEA7><CDBC>
long m_DemRegionLayerID[500] = {-1}; //<2F>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
/************************************************************************/
//<2F><><EFBFBD><EFBFBD><EFBFBD>̷߳<DFB3><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>
/************************************************************************/
bool g_bDemAnalysising = false; //<2F>Ƿ<EFBFBD><C7B7>ڸ̷߳<DFB3><CCB7><EFBFBD><EFBFBD><EFBFBD>
int g_iDemPointNum = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD>̷߳<DFB3><CCB7><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>
//<2F><><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD>̷߳<DFB3><CCB7><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>
double g_dDemPtLon[g_iDemAltPtNum];
double g_dDemPtLat[g_iDemAltPtNum];
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>ͼ<EFBFBD><CDBC>
long g_lDemAltLayerID[g_iDemAltPtNum];
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶α<DFB6>ע<EFBFBD><D7A2><EFBFBD>뷽λͼ<CEBB><CDBC>
long g_lDemAltDisLayerID[g_iDemAltPtNum];
//<2F><><EFBFBD><EFBFBD><EFBFBD>ŵı<C5B5>עͼ<D7A2><CDBC>
long g_lDemPtNumLayerID[g_iDemAltPtNum];
/************************************************************************/
/*-------------------------------------------------------------------------------------------------------------
˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><EFBFBD><EFBFBD>
-------------------------------------------------------------------------------------------------------------*/
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>
bool g_bSelectMarker = false;
//<2F><><EFBFBD>ǵ<EFBFBD>ͼ<EFBFBD><CDBC>
long g_lMarkerLayerID[g_iMarkerPtNum];
//<2F>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ǵĵ<C7B5><C4B5><EFBFBD>
int g_iHaveMarkedPts = 0;
CString g_iMarkerName[g_iMarkerPtNum];
double g_iMarkerLon[g_iMarkerPtNum];
double g_iMarkerLat[g_iMarkerPtNum];
bool g_bMarkerPlot[g_iMarkerPtNum] = {false};
/*-------------------------------------------------------------------------------------------------------------
˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>ɻ<EFBFBD><EFBFBD>ͺű<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ø<EFBFBD><EFBFBD>Թ<EFBFBD><EFBFBD><EFBFBD>
-------------------------------------------------------------------------------------------------------------*/
bool g_b981ADesktop = true;
bool g_b981APad = false;
bool g_b981CDesktop = false;
bool g_b981AMulti = false;
//<2F><>ͼģ<CDBC><C4A3><EFBFBD><EFBFBD><E6B1BE> [<5B><><EFBFBD>汾.<2E>ΰ汾.<2E>޶<EFBFBD><DEB6><EFBFBD><E6B1BE><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD>]
CString mapVersion[3] = { "1.0.0","20240920", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ͼ"};