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.

532 lines
12 KiB
C++

2 years ago
#include "stdafx.h"
#include "LineManage.h"
#include "Globe.h"
CLineManage::CLineManage(void)
{
PtStruct pt;
line.AddTail(pt);
line.RemoveAll();
}
CLineManage::~CLineManage(void)
{
//2015.11.27 <20><>ֹ<EFBFBD>ڴ<EFBFBD>й©
MakeListNull();
}
void CLineManage::MakeListNull()
{
if (line.GetCount()>0)
{
line.RemoveAll();
}
}
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC>еĺ<D0B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EBA3BA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>strFileName
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>pLineData
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>true<75><65><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ȡ<EFBFBD>ɹ<EFBFBD>
// false<73><65><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ȡʧ<C8A1><CAA7>
bool CLineManage::ReadLineDataFromFile(DrawLineDataStruct &pLineData, const CString strFileName)
{
int ptNum = 0;
//<2F><>ʼ<EFBFBD><CABC>
memset(&pLineData, 0, sizeof(DrawLineDataStruct));
//<2F><EFBFBD><E6B4A2><EFBFBD>ߵĺ<DFB5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PtStruct pts[257];
memset(pts, 0, sizeof(PtStruct)*257);
FILE *fpReadFlyLine = fopen(strFileName, "r");
if (fpReadFlyLine != NULL)
{
while (!feof(fpReadFlyLine))
{
if (!ReadLinePtAndCheckData(pts[ptNum], fpReadFlyLine))
{
BCGPMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߺ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ʾ<EFBFBD>ĺ<EFBFBD><EFBFBD>߲<EFBFBD>һ<EFBFBD><EFBFBD>"));
return false;
}
ptNum ++;
}
//<2F>ر<EFBFBD><D8B1>ļ<EFBFBD>
fclose(fpReadFlyLine);
}
else //<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
return false;
}
//<2F>Զ<EFBFBD>ȡ<EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>
if (CheckFlyLine(pts, ptNum))
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ɱ<EFBFBD><C9B1><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>
LinePoint2DrawLinePoints(pLineData, pts, ptNum);
return true;
}
else
{
return false;
}
}
//<2F><><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CLineManage::LinePoint2DrawLinePoints(DrawLineDataStruct &lineDataArr, const PtStruct *pLinePoints, const int linePointNum)
{
//<2F><><EFBFBD>߱<EFBFBD><DFB1><EFBFBD>
lineDataArr.lineID = pLinePoints[0].nL;
//<2F>жϵ<D0B6>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊԭ<CEAA><D4AD>
if (pLinePoints[0].nPt == 0)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
lineDataArr.pointNum = linePointNum-1;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(lineDataArr.pts, pLinePoints+1, sizeof(PtStruct)*lineDataArr.pointNum);
//<2F><><EFBFBD>ߵĺ<DFB5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
lineDataArr.linePointNum = linePointNum-1;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵĺ<DFB5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(lineDataArr.linePts, pLinePoints+1, sizeof(PtStruct)*lineDataArr.pointNum);
//<2F><><EFBFBD>ݺ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3>жϺ<D0B6><CFBA>߱<EFBFBD>ע<EFBFBD>ıպ<C4B1><D5BA><EFBFBD>״<EFBFBD><D7B4><EFBFBD>ǡ<EFBFBD><C7A1>պϺ<D5BA>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>ǡ<EFBFBD><C7A1><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>
if ((pLinePoints[linePointNum-1].ch2 == 0x01)||(pLinePoints[linePointNum-1].ch2 == 0x0B))
{
/*
if (lineDataArr.lineID>11)
{
lineDataArr.linePts[lineDataArr.linePointNum] = pLinePoints[1];
}
else
{
lineDataArr.linePts[lineDataArr.linePointNum] = pLinePoints[linePointNum-1/ *1* /];
}*/
if (pLinePoints[linePointNum-1].ch1 == 0x02)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD>ڶ<EFBFBD>λ<EFBFBD><CEBB>0x02<30><32>Ϊ<EFBFBD><CEAA><EFBFBD>պϱ<D5BA>־
{
lineDataArr.linePts[lineDataArr.linePointNum] = pLinePoints[linePointNum - 1];
}
else
{
lineDataArr.linePts[lineDataArr.linePointNum] = pLinePoints[1];
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
lineDataArr.linePointNum ++;
}
// else if (pLinePoints[linePointNum-1].ch2&0X01 == 0x01) //<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
else if (pLinePoints[linePointNum-1].ch2 == 0x00) //<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD> 2016.02.20
{
lineDataArr.linePts[lineDataArr.linePointNum].dX = g_gcsLon;
lineDataArr.linePts[lineDataArr.linePointNum].dY = g_gcsLat;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
lineDataArr.linePointNum ++;
}
}
else
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
lineDataArr.pointNum = linePointNum;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(lineDataArr.pts, pLinePoints, sizeof(PtStruct)*lineDataArr.pointNum);
//<2F><><EFBFBD>ߵĺ<DFB5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
lineDataArr.linePointNum = linePointNum;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵĺ<DFB5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(lineDataArr.linePts, pLinePoints, sizeof(PtStruct)*lineDataArr.pointNum);
//<2F><><EFBFBD>ݺ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3>жϺ<D0B6><CFBA>߱<EFBFBD>ע<EFBFBD>ıպ<C4B1><D5BA><EFBFBD>״<EFBFBD><D7B4><EFBFBD>ǡ<EFBFBD><C7A1>պϺ<D5BA>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>ǡ<EFBFBD><C7A1><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>
if (pLinePoints[linePointNum-1].ch2 == 0)
{
lineDataArr.linePts[lineDataArr.linePointNum] = pLinePoints[0];
//<2F><><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
lineDataArr.linePointNum ++;
}
// else if (pLinePoints[linePointNum-1].ch2&0X01 == 1) //<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
else if (pLinePoints[linePointNum-1].ch2 == 0x01) //<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
{
lineDataArr.linePts[lineDataArr.linePointNum].dX = g_gcsLon;
lineDataArr.linePts[lineDataArr.linePointNum].dY = g_gcsLat;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
lineDataArr.linePointNum ++;
}
}
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD> //2017.07.05
int CLineManage::ReadAirLinePoint(FILE *fp, PtStruct &pt)
{
return fscanf(fp, "%d, %d, %lf, %lf, %lf, %d, %02X, %02X\n", &pt.nL,
&pt.nPt, &pt.dX, &pt.dY, &pt.nH, &pt.nV, &pt.ch1, &pt.ch2);
}
//<2F><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>ȡ<EFBFBD><C8A1>·<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>м<EFBFBD><D0BC><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EBA3BA>·<EFBFBD>ļ<EFBFBD>ָ<EFBFBD><D6B8>fp
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pt
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>true<75><65><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
// false<73><65><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
bool CLineManage::ReadLinePtAndCheckData(PtStruct &pt, FILE *fp)
{
int redFlag = 0; //<2F><>·<EFBFBD>ļ<EFBFBD><C4BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>ı<EFBFBD>ʶ
int nums = 8;
redFlag = ReadAirLinePoint(fp, pt);
if (redFlag != nums) //<2F><>·<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD>
{
return false;
}
else
{
return true;
}
}
//<2F><><EFBFBD>ܣ<EFBFBD><DCA3>Ժ<EFBFBD>·<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EBA3BA>·<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pts<74><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptNum
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD>·<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pts
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>true<75><65><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD>·<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
// false<73><65><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD>·<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>ȷ
//<2F><><EFBFBD><EFBFBD><EFBFBD>
// 1<><31><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA>߱<EFBFBD><DFB1><EFBFBD><EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
// 2<><32><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
// 3<><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A3AC><EFBFBD><EFBFBD><E0BABD><EFBFBD>ĺ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><D0BA><EFBFBD><E3A1B1>
// 4<><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>պϺ<D5BA>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8>ijɡ<C4B3><C9A1>պϺ<D5BA>·<EFBFBD><C2B7>
bool CLineManage::CheckFlyLine(PtStruct *pts, const int ptNum)
{
//<2F><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>ΧΪ[0,255]<5D><>256<35><36>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>ΧΪ<CEA7><CEAA>2,256<35><36>
if ((ptNum>257) || (ptNum<2))
{
return false;
}
int i=0;
int j=0;
//<2F>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>м<EFBFBD><D0BC><EFBFBD>
for (i=0; i<ptNum; i++)
{
if (!CheckOnePointValue(pts[i]))
{
return false;
}
}
//<2F>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA>߱<EFBFBD><DFB1>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA>߱<EFBFBD><DFB1>Ų<EFBFBD>һ<EFBFBD><D2BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false
int ptLineID = pts[0].nL;
for (i=1; i<ptNum; i++)
{
if (ptLineID != pts[i].nL)
{
return false;
}
}
//<2F>Ժ<EFBFBD><D4BA>ߵĺ<DFB5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>жϹ<D0B6><CFB9><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD>1
//<2F><><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD>Ϲ<EFBFBD><CFB9><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false
if ( (pts[0].nPt != 0) && (pts[0].nPt != 1) )
{
return false;
}
int toComparePtId = pts[0].nPt + 1;
for (i=1; i<ptNum; i++)
{
if (pts[i].nPt != toComparePtId)
{
return false;
}
else
{
toComparePtId++;
}
}
return true; //2016.02.17
//-------------delete in 2016.02.17-------------------//
//<2F><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ж<EFBFBD>
/*
// //<2F>Գ<EFBFBD><D4B3><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><D0BA><EFBFBD><E3A1B1>
// for (i=0; i<ptNum-1; i++)
// {
// if ((pts[i].ch2 & 0x02) == 0) //<2F><><EFBFBD>պϺ<D5BA>·<EFBFBD><C2B7>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>false
// {
// return false;
// }
// }
//
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Һ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>պϺ<D5BA>·<EFBFBD><C2B7>
// //<2F><><EFBFBD>ǡ<EFBFBD><C7A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>պϺ<D5BA>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false
// if ((pts[ptNum-1].ch2 & 0x02) == 0)
// {
// //2015.12.02
// // if ((pts[ptNum-1].ch2 & 0x01) != 0) //<2F><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǡ<EFBFBD><C7A1>պϺ<D5BA>·<EFBFBD><C2B7>
// // {
// // return false;
// // }
// // else //<2F><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>պϺ<D5BA>·<EFBFBD><C2B7>
// // {
// // return true;
// // }
//
// return true;
// }
// else
// {
// return false;
// }*/
}
//<2F><><EFBFBD>ܣ<EFBFBD><DCA3>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>Ч<EFBFBD><D0A7>Χ<EFBFBD><CEA7><EFBFBD>м<EFBFBD><D0BC><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EBA3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pt
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>true<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>Χ<EFBFBD><CEA7>
// false<73><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
bool CLineManage::CheckOnePointValue(const PtStruct pt)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ݷ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD>м<EFBFBD><D0BC><EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>
//<2F>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޾͵<DEBE><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󣬲<EFBFBD><F3A3ACB2><EFBFBD><EFBFBD><EFBFBD>
if ( (pt.nL<1) || (pt.nL>14)
|| (pt.nPt<0) || (pt.nPt>255)
|| (pt.dX<-180) || (pt.dX>180)
|| (pt.dY<-90) || (pt.dY>90)
|| (pt.nH<-500) || (pt.nH>10000)
|| (pt.nV<0) || (pt.nV>360)
|| (pt.ch1<0) || (pt.ch1>255)
|| (pt.ch2<0) || (pt.ch2>255) )
{
return false;
}
else
{
return true;
}
}
//<2F><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˻<EFBFBD><CBBB><EFBFBD>·<EFBFBD>ļ<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EBA3BA>·<EFBFBD>ļ<EFBFBD><C4BC>ľ<EFBFBD><C4BE><EFBFBD>·<EFBFBD><C2B7>str
// <09><><EFBFBD>߱<EFBFBD><DFB1><EFBFBD>nL:1<><31>2<EFBFBD><32>3<EFBFBD><33>4<EFBFBD><34>5
// <09><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ·<D7B0><C2B7><EFBFBD>ı<EFBFBD>ʶbFromLocalDir<69><72>true<75><65><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD>false<73><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <09><><EFBFBD>У<EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װĿ¼<C4BF>¼<EFBFBD><C2BC>صĺ<D8B5><C4BA><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ҫ<EFBFBD><D2AA>ԭ<EFBFBD><D4AD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EBB2BB>Ҫ<EFBFBD>ж<EFBFBD>
// 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װĿ¼<C4BF>¼<EFBFBD><C2BC>صĺ<D8B5><C4BA><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ҫ<EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>ID<49><44><EFBFBD>м<EFBFBD><D0BC><EFBFBD><E9A3AC><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EBB2BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ洢<DDB4><E6B4A2><EFBFBD><EFBFBD><EFBFBD>ĵij<C4B5>Աline<6E><65>
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>true
// ʧ<>ܡ<EFBFBD><DCA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false
bool CLineManage::OpenFlyLineFile(const CString &str, const int &nL, const bool &bFromLocalDir)
{
MakeListNull(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
FILE* fp;
PtStruct pt;
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
fp = fopen(str, "r");
if (fp == NULL)
{
return false;
}
int linePtNum = 0;
while(!feof(fp))
{
if (!ReadLinePtAndCheckData(pt, fp))
{
return WrongLineDataProcess(fp);
}
AddPt(pt);
linePtNum++;
}
//return true;
PtStruct *linePts = new PtStruct[LINEPTNUM];
memset(linePts, 0, sizeof(PtStruct)*LINEPTNUM);
ListData2ArrayData(linePts, linePtNum, 1);
//<2F>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8>ļ<EFBFBD><C4BC><EFBFBD>
if (CheckFlyLine(linePts, linePtNum))
{
if (bFromLocalDir) //<2F><><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>صĺ<D8B5><C4BA><EFBFBD><EFBFBD>ļ<EFBFBD>
{
if (CheckOrgPtIsExisted(linePts, linePtNum) &&
CheckFlyLineIDCorrect(linePts, linePtNum, nL))
{
fclose(fp);
if (linePts != NULL)
{
delete []linePts;
linePts = NULL;
}
return true;
}
else
{
if (linePts != NULL)
{
delete []linePts;
linePts = NULL;
}
return WrongLineDataProcess(fp);
}
}
else
{
//<2F><>·<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ȡ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>ȷ
if (linePts != NULL)
{
delete []linePts;
linePts = NULL;
}
fclose(fp);
return true;
}
}
else
{
if (linePts != NULL)
{
delete []linePts;
linePts = NULL;
}
return WrongLineDataProcess(fp);
}
}
//<2F><><EFBFBD>ܣ<EFBFBD><DCA3>ļ<EFBFBD><C4BC><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ȡ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
bool CLineManage::WrongLineDataProcess(FILE *fp)
{
//ɾ<><C9BE>ԭ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
MakeListNull();
//<2F>ر<EFBFBD><D8B1>ļ<EFBFBD>
fclose(fp);
return false;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CLineManage::AddPt(PTLIST *other)
{
MakeListNull();
POSITION pos = other->GetHeadPosition();
for (int i=0; i<other->GetCount(); i++)
{
PtStruct pt = other->GetNext(pos);
//<2F><><EFBFBD>߱<EFBFBD><DFB1>Ŷ<EFBFBD><C5B6><EFBFBD>Ϊ0
pt.nL = 0;
line.AddTail(pt); //<2F><>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
//<2F><><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>
void CLineManage::AddPt(PtStruct pt)
{
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
line.AddTail(pt); //<2F><>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><E3BABD>
void CLineManage::AddPt(const double &L, const double &B,const float& H, const int &ptId)
{
PtStruct pt;
memset(&pt,0,sizeof(PtStruct));
pt.ch2 = 0x03; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><D0BA>
pt.dX = L;
pt.dY = B;
pt.nPt = ptId;
pt.nH = H;
//WGS84<38><34><EFBFBD><EFBFBD>תBJ54<35><34><EFBFBD><EFBFBD>
if (ptId == 0) //ԭ<><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//wgs84AndBj54.Wgs84TransToBj54(&pt.dX, &pt.dY); //WGS84תBJ54<35><34><EFBFBD><EFBFBD>
}
line.AddTail(pt); //<2F><>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
//<2F><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>coordType=0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wgs84<38><34><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>coordType=1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bj54<35><34><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EBA3BA><EFBFBD><EFBFBD>ϵcoordType<70><65>0Ϊwgs84;1Ϊbj54<35><34><EFBFBD><EFBFBD>ϵ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pts<74><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptNum
void CLineManage::ListData2ArrayData(PtStruct *pts, int &ptNum, const int &coordType)
{
ptNum = line.GetCount();
int i=0;
POSITION ps = line.GetHeadPosition();
for (i=0; i<ptNum; ++i)
{
pts[i] = line.GetNext(ps);
}
//<2F><><EFBFBD><EFBFBD>WGS84<38><34><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BJ54<35><34>WGS84<38><34><EFBFBD>ı
if (coordType == 0)
{
for (i=0; i<ptNum; ++i)
{
//wgs84AndBj54.Bj54TransToWgs84(&pts[i].dX, &pts[i].dY);
}
}
}
//<2F><><EFBFBD><EFBFBD>:<3A>жϺ<D0B6><CFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĵ<DDB5>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊԭ<CEAA><D4AD>
//<2F><><EFBFBD><EFBFBD><EBA3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pts<74><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptNum
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>true<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>
// false<73><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CLineManage::CheckOrgPtIsExisted(const PtStruct *pts, const int &ptNum)
{
if (pts[0].nPt == 0) //ԭ<><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
{
return true;
}
else
{
return false;
}
}
//<2F><><EFBFBD><EFBFBD>:<3A>жϺ<D0B6><CFBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĺ<DDB5><C4BA>߱<EFBFBD><DFB1><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>õĺ<C3B5><C4BA>߱<EFBFBD><DFB1><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EBA3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pts<74><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ptNum
//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>true<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>
// false<73><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CLineManage::CheckFlyLineIDCorrect(const PtStruct *pts, const int &ptNum, const int &nL)
{
for (int i=0; i<ptNum; ++i)
{
if (pts[i].nL != nL)
{
return false;
}
}
return true;
}