亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? shpfile.cpp

?? windows mobile gis system
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
					 delete pPolygon;
					 continue;
                 } 
				 //計算對象內容實際長度
				 j = sizeof(SHPINFO) + shpIn.iNumParts*sizeof(int) ;
				 j += shpIn.iNumPoints*sizeof(SHPPOINT);  
                 
				 //判斷實際長度是否與索引文件中記錄的一致 
				 if ( RecordHeader.iContentLength*2 != j )
                 {
				     delete pPolygon;
					 continue;
				 }	 
				 //設置shp矩形范圍
				 objRectangle.SetLeft(shpIn.Box[0].dbX);
				 objRectangle.SetTop(shpIn.Box[0].dbY);
				 objRectangle.SetRight(shpIn.Box[1].dbX);
				 objRectangle.SetBottom(shpIn.Box[1].dbY); 
				 pPolygon->SetExtent(objRectangle);
				 pIParts = new int[shpIn.iNumParts];
				 if ( pIParts == NULL )
                 {
					delete pPolygon;
					return FALSE;
				 }
				 //讀入復合多邊型段索引
				 if ( fShp.Read(pIParts,shpIn.iNumParts*4) != (uint)(shpIn.iNumParts*4))
				 {
					delete pPolygon;
					return FALSE;
				 }

				 //點坐標存儲所占字節數
				 iLength = shpIn.iNumPoints*sizeof(SHPPOINT);
				 //初始化緩沖區數據
				 iDataLen = ReadPoint(pszBuffer,iLength,bEof);
				 if ( iDataLen < 0 )
                 {
					  delete pPolygon;
					  delete pIParts;
					  return FALSE;
				 
				 }	 
				 lpVer = pszBuffer;
				 for ( j = 0 ;  j < shpIn.iNumParts ; j++ )
				 {
					pParts  = new CMapParts();
					pPoints = new CMapPoints();
 					if ( pParts == NULL || pPoints == NULL)
						return FALSE;
					if ( j == shpIn.iNumParts - 1 )
                    {
					    k = pIParts[j];        //本段第一個頂點索引
					    m = shpIn.iNumPoints ; //下一個段第一個頂點索引 
                    }
              	    else
                    {
						k = pIParts[j];
						m = pIParts[j+1];
					}
					//處理第i段的頂點
				    for ( ; k < m ; k++)
                    {   
						pPoint = new CMapPoint();
						if ( pPoint == NULL )
							return FALSE;
						
						//需要讀入數據更新緩沖區
						if ( lpVer == pszBuffer + iDataLen && !bEof)
						{
							iDataLen = ReadPoint(pszBuffer,iLength,bEof);
							if ( iDataLen < 0 )
							{
								delete pPolygon;
								delete pIParts;
								return FALSE;
				 
							}	 
							lpVer = pszBuffer;
						}	
						dbTmp = *(double*)lpVer;
					    pPoint->SetX(dbTmp);
                        lpVer += 8;
						//需要讀入數據更新緩沖區
						if ( lpVer == pszBuffer + iDataLen && !bEof)
						{
							iDataLen = ReadPoint(pszBuffer,iLength,bEof);
							if ( iDataLen < 0 )
							{
								delete pPolygon;
								delete pIParts;
								return FALSE;
				 
							}	 
							lpVer = pszBuffer;
						}	
						dbTmp = *(double*)(lpVer);
                        pPoint->SetY(dbTmp); 
						pPoints->Add(pPoint); 
						lpVer += 8;
						
					}  
                    pParts->Add(pPoints);   
				    pPolygon->Add(pParts); 

				 }
				 m_ObList.AddTail( pPolygon);
			     delete []pIParts;
            }
			delete []pszBuffer;
			break;
		default:
			return FALSE;
			break;

    }    
	return TRUE;   

}

/*************************************************
  描述:         計算每條shp對象相對文件頭的偏移量
  輸入:         記錄索引值(從零開始)
  輸出:        該shp對象數據在文件中的位置  
*************************************************/
int CShpFile::SetRecordPos( int iRecord )
{
    unsigned int iOffset,iTmp;
	SHXRECORD shxRD;

	if ( iRecord < 0 )
		return 0;
    //獲得索引文件記錄偏移量相對文件頭
	if (iRecord == 1 )
    	iOffset = sizeof(SHPHEADER)  ;	 
	else
		iOffset = sizeof(SHPHEADER) + (iRecord-1)*sizeof(shxRecord) ;
	if ( iOffset > m_shxFileLength*2 - sizeof(shxRecord) )
		return 0;
	fShx.Seek( iOffset , CFile::begin );
	int m = sizeof(shxRD);
	fShx.Read( &shxRD , sizeof(shxRD));
	iTmp = shxRD.iOffset;
	SwapWord(sizeof(int),&iTmp);
	fShp.Seek(iTmp*2 ,  CFile::begin );
	iTmp = shxRD.iContentLength;
	SwapWord(sizeof(int),&iTmp);
   
	
	return iTmp*2;	
}

/*************************************************
  描述:         獲得每條shp對象記錄記錄頭的信息
  輸入:         記錄頭結構對象
  輸出:        成功返回TRUE 失敗返回FALSE    
*************************************************/

BOOL CShpFile::GetRecordHeader(SHPRECORDHEADER& RecordHeader )
{
	int iLength,iNum;

	if(fShp.Read(&RecordHeader,sizeof(RecordHeader))!= sizeof(RecordHeader))
		return FALSE;
	if ( !m_bBigEndian )
    {  
		iNum    = RecordHeader.iRecordNum;
        iLength = RecordHeader.iContentLength;
		SwapWord(sizeof(int),&iLength);
		SwapWord(sizeof(int),&iNum);
		RecordHeader.iRecordNum = iNum;
        RecordHeader.iContentLength = iLength;
	}
    return TRUE;


}
/*************************************************
  描述:         獲得每條shp對象描述信息
  輸入:         描述信息結構對象
  輸出:        成功返回TRUE 失敗返回FALSE    
*************************************************/

BOOL CShpFile::GetShpInfo(SHPINFO& varInfo)
{

	if(fShp.Read(&varInfo,sizeof(varInfo))!= sizeof(varInfo))
		return FALSE;
	return TRUE;
}

/*************************************************
  描述:         讀入點對象數據
  輸入:         數據緩沖區指針 緩沖區最大32K 
                如果超出需要分多次讀取,要讀取的長度、
				是否已讀取完成
  輸出:        讀取數據的實際長度   
*************************************************/

int  CShpFile::ReadPoint(char* pszBuffer,int& iLength,BOOL& bEof)
{
	if ( iLength > MAX_BUFFER_SIZE)
    {
		iLength -= MAX_BUFFER_SIZE;
		if ( fShp.Read(pszBuffer,MAX_BUFFER_SIZE) != MAX_BUFFER_SIZE )
			return FILE_READERR;
		bEof = FALSE;
		return MAX_BUFFER_SIZE;
    }
    else
    {   
		if ( fShp.Read(pszBuffer,iLength) != (uint)iLength )
			return FILE_READERR;
		bEof = TRUE;
		return iLength;
	}     
}


/*************************************************
  描述:         根據點對象查找shp對象是否選中
  輸入:         點對象
  輸出:        查找到shp對象的索引值 返回值-表示未查找到   
*************************************************/
int CShpFile::SearchShape(CMapPoint& pt )
{
	unsigned long iCount;
	POSITION pos;
    CMapPolygon *pPolygon;

	if ( GetShpType() != POLYGON ) //只判斷多邊形對象
		return -1;
	iCount = m_ObList.GetCount()-1;
	
	for ( pos = m_ObList.GetHeadPosition()  ; pos != NULL ;  )
    {
		pPolygon = (CMapPolygon*)m_ObList.GetAt(pos);
		if ( pPolygon->IsPointIn(pt) )
		 	return pPolygon->GetIndex(); 
		m_ObList.GetNext(pos); 
    } 
	return -1;

}

/*************************************************
  描述:         繪制shp對象
  輸入:         設備指針、圖例對象指針、坐標變換參數結構對象
  輸出:        無
*************************************************/
void CShpFile::DrawShp(CDC*pDC ,  CMapRender* m_pRender , DrawParam& draw )
 {           
    
	 int iDrawMode;

	 //計算當前屏幕的實際坐標范圍
	 m_CurMapExtent.SetLeft(draw.m_StartX );
	 m_CurMapExtent.SetBottom(draw.m_StartY);
	 m_CurMapExtent.SetRight(draw.m_StartX + draw.m_ScreenWidth * draw.m_Scale);
	 m_CurMapExtent.SetTop(draw.m_StartY - draw.m_ScreenHeigh *draw.m_Scale);  
	 
	 //設置繪制模式
	 iDrawMode = pDC->SetROP2(R2_COPYPEN);
	 
	 switch ( m_shpType )
     {
		 case POINT: 
			{
                DrawPoint(pDC , m_pRender ,  draw );
			}	
			break;
         case POLYLINE: 
			{
			    DrawPLine(pDC , m_pRender ,  draw );
				
			} 
            break;
		 case POLYGON: 
			{
			    DrawPolygon(pDC , m_pRender ,  draw );

			}  
		    break;   	 
        default:
			break;
	 }
	 pDC->SetROP2(iDrawMode);
	 //int r = RGB_GETRED(16773020);
	 //int g = RGB_GETGREEN(16773020);
	 //int b = RGB_GETBLUE(16773020);

    
 
 }

/*************************************************
  描述:         對選中的shp對象閃爍
  輸入:         設備指針、坐標變換參數結構對象、
                shp對象的索引值
  輸出:        無
*************************************************/

void  CShpFile::FlashShp(CDC*pDC , DrawParam& draw , int iIndex)
{
	
	 int i,j,k,m,iCount,iDrawMode;
	 CMapPoint *pPoint;
	 CMapPoints *pPoints;
	 CMapParts *pParts;
	 //CMapLine  *pPline;
	 CMapPolygon *pPolygon;
	 CMapRectangle MapExtent;
	 CPoint    *pPtArray;  //頂點數組
	 int       *pPolygonCount; //每個多邊型的頂點數組
	 CRect  rc;
	 POSITION pos;
	 CBrush br1(RGB(0,0,0));
     CBrush br2(RGB(255,255,255));
	 CBrush *pOldBrush;
	
	  if ( iIndex < 0 )
		  return;
	 iDrawMode = pDC->SetROP2(R2_XORPEN);
	 switch ( m_shpType )
	 {
		case POINT: {
					}
		break;	
		case POLYLINE: {
					   }
        break; 
		case POLYGON: {
			for ( pos = m_ObList.GetHeadPosition()  ; pos != NULL ;  )
			{
				pPolygon = (CMapPolygon*)m_ObList.GetAt(pos);
		        if (iIndex == pPolygon->GetIndex() )
				{
						iCount = pPolygon->GetCount(); //多邊形個數
                    pPolygonCount = new int[iCount];
					if ( pPolygonCount == NULL )
						return;
					
					//計算復合多邊型每部分的頂點數,和總頂點數
					
					for ( m= 0,i = 0 ; i < pPolygon->GetCount() ; i++ )
					{
						pParts =  pPolygon->GetParts(i);
						k = 0;
						for ( j = 0 ; j < pParts->GetCount() ; j++)
						{
							pPoints = pParts->Get(j); 
                            k += pPoints->GetCount();
						} 
						pPolygonCount[i] = k;
						m += k;
					}
					pPtArray = new CPoint[m];
                    if ( pPtArray == NULL )
                    { 
						delete []pPolygonCount;
						return ;
					}
					
					for ( m= 0 , i = 0 ; i < pPolygon->GetCount() ; i++ )
					{
						pParts =  pPolygon->GetParts(i);
						for ( j = 0 ; j < pParts->GetCount() ; j++)
						{
							pPoints = pParts->Get(j); 
                            for ( k = 0 ; k < pPoints->GetCount(); k++ )
                            {
								pPoint = pPoints->Get(k); 
								pPtArray[m].x = (int)((pPoint->GetX() - draw.m_StartX)/draw.m_Scale);
                                pPtArray[m++].y =  (long)((draw.m_StartY - pPoint->GetY() )/draw.m_Scale);
								
							}	
						} 
						
					}
					pOldBrush = pDC->SelectObject(&br1); 
					if ( pPolygon->GetCount() > 1)
                    { 
						
						pDC->PolyPolygon(pPtArray,pPolygonCount,iCount);
                        i = 0;
						Sleep(200);	
						pDC->PolyPolygon(pPtArray,pPolygonCount,iCount);
						pDC->SelectObject(&br2);
						pDC->PolyPolygon(pPtArray,pPolygonCount,iCount);
						i = 0;
						Sleep(500);
						pDC->PolyPolygon(pPtArray,pPolygonCount,iCount);
					
					}	
					else
                    {      
					   pDC->Polygon(pPtArray, m);
					   i = 0;
					   Sleep(200);
					   pDC->Polygon(pPtArray, m);
					   pDC->SelectObject(&br2);
					   pDC->Polygon(pPtArray, m);
					   i = 0;
					   Sleep(500);
					   pDC->Polygon(pPtArray, m);

					}	
					delete []pPolygonCount;
					delete []pPtArray;
                    pDC->SelectObject(pOldBrush); 
					break;   
                }
				m_ObList.GetNext(pos); 
			} 

		
		}
		break;
        default:
		break;	

	 } 
	 pDC->SetROP2(iDrawMode); 

}

/*************************************************
  描述:         繪制點對象
  輸入:         設備指針、圖例對象指針、坐標變換參數結構對象
  輸出:        無
*************************************************/
void CShpFile::DrawPoint(CDC*pDC ,  CMapRender* m_pRender , DrawParam& draw )
{
	
	int    iIndex,iField;
	CBrush *pOldBrush;
	SIMPLERENDER simpleRender;
	CBrush brSimple;
	CPen   pen;
	CBrush br(RGB(255,239,156));
	CMapFields *pFields;
    CMapField  *pField;
    CMapPoint *pPoint;
	POSITION pos;
	CString csValue;
	RENDERINFO *rInfo;
	
	if ( m_pRender == NULL )
    {
		pOldBrush = pDC->SelectObject(&br);
		for( pos = m_ObList.GetHeadPosition(); pos != NULL; )
		{  
			pPoint = (CMapPoint*)m_ObList.GetAt(pos);
			//判斷要繪制的的對象是否在當前屏幕范圍內
			if ( !m_CurMapExtent.IsPointIn(*pPoint)) 
            {
			
				m_ObList.GetNext(pos);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区免费网站| 18欧美乱大交hd1984| 久久综合资源网| 国产亚洲va综合人人澡精品| 欧美国产日韩精品免费观看| 中文字幕佐山爱一区二区免费| 亚洲一二三专区| 国产一区激情在线| 欧美午夜片在线看| 久久久一区二区| 天堂一区二区在线免费观看| 成人av在线播放网站| 欧美日本在线看| 亚洲欧美综合在线精品| 日本视频一区二区| 精品视频一区 二区 三区| 国产日韩精品视频一区| 爽爽淫人综合网网站| 色婷婷久久久综合中文字幕| 久久影院电视剧免费观看| 日韩国产欧美三级| 欧美日韩午夜精品| 亚洲欧美国产高清| 成人高清在线视频| 一区二区三区在线高清| 久久国产婷婷国产香蕉| 日韩限制级电影在线观看| 亚洲国产精品一区二区www| 不卡一区二区三区四区| 中文av一区特黄| 国产精品69久久久久水密桃| 国产精品欧美久久久久无广告| 国内精品写真在线观看| 久久女同精品一区二区| 国产成人免费在线观看不卡| 久久久99精品久久| 国产盗摄一区二区| 亚洲丝袜美腿综合| 在线免费精品视频| 亚洲一区二区视频在线观看| 欧美美女网站色| 久久精品国产亚洲aⅴ| 亚洲国产精品成人综合| 色素色在线综合| 欧美96一区二区免费视频| 国产三级三级三级精品8ⅰ区| 成人黄色网址在线观看| 亚洲成人av一区二区| 亚洲欧洲日韩在线| 日韩视频永久免费| 99久久国产综合精品色伊| 一区二区在线观看不卡| 日韩一区二区视频| 成人高清视频在线| 天堂在线亚洲视频| 综合久久久久久| 26uuu国产一区二区三区| 欧美在线观看禁18| 成人三级伦理片| 国产一区二区三区免费播放| 最新高清无码专区| 久久九九影视网| 日韩欧美在线一区二区三区| 色哦色哦哦色天天综合| 99久久精品一区二区| 国产精品中文字幕一区二区三区| 日韩成人午夜精品| 日韩精品色哟哟| 亚洲一卡二卡三卡四卡无卡久久| 国产亚洲福利社区一区| 久久嫩草精品久久久久| 日韩三级视频在线观看| 欧美制服丝袜第一页| 在线免费精品视频| 成人国产精品免费观看动漫| 国产成人三级在线观看| 福利一区二区在线| 91丝袜高跟美女视频| 欧美性生活影院| 欧美精品色综合| 日韩精品一区在线观看| 精品第一国产综合精品aⅴ| 欧美一区二区三区啪啪| 欧美www视频| 国产午夜三级一区二区三| 久久精品亚洲乱码伦伦中文| 国产日本欧洲亚洲| 亚洲一区二区三区四区五区黄| 亚洲国产综合在线| 国产精品亚洲一区二区三区在线| 国产一区二区三区| 色婷婷久久久亚洲一区二区三区| 欧美日韩视频不卡| 一级中文字幕一区二区| 日本va欧美va精品发布| 本田岬高潮一区二区三区| 欧美日韩精品高清| 2023国产精品自拍| 亚洲精品国产a| 国内精品免费在线观看| 欧美日韩精品免费观看视频| 日本一区二区三区视频视频| 亚洲福中文字幕伊人影院| 国产精品1区2区3区在线观看| 91国内精品野花午夜精品 | 欧美在线短视频| 久久亚洲二区三区| 日日夜夜精品免费视频| 91小视频免费观看| 精品成人一区二区三区四区| 亚洲精品久久久久久国产精华液| 香蕉影视欧美成人| 色婷婷综合久久久中文一区二区| 精品电影一区二区三区| 日韩专区中文字幕一区二区| 91免费精品国自产拍在线不卡| 欧美成人官网二区| 日韩 欧美一区二区三区| 欧美午夜在线一二页| 一区二区在线观看视频| 97久久人人超碰| ...av二区三区久久精品| 国产在线观看免费一区| 久久综合久久综合久久综合| 国产精品99久久不卡二区| 欧美sm美女调教| 成人一区二区三区| 精品99999| 国产精品一区久久久久| 国产精品国产三级国产普通话99 | 亚洲乱码国产乱码精品精的特点| 国产精品亚洲综合一区在线观看| 国产亚洲欧美色| 99re在线精品| 亚洲mv在线观看| 国产日韩欧美高清| 欧美制服丝袜第一页| 六月丁香综合在线视频| 久久精品夜色噜噜亚洲a∨| av资源网一区| 久久草av在线| 中文字幕免费一区| 欧美日韩卡一卡二| 国产精品资源在线观看| 亚洲午夜激情网站| 久久精品欧美一区二区三区麻豆| 99国产精品国产精品久久| 午夜精品视频在线观看| 亚洲精品在线电影| 欧美日韩国产首页在线观看| 精品一区二区三区免费视频| 欧美午夜电影网| 在线免费不卡电影| 欧美日韩高清一区二区不卡 | 无吗不卡中文字幕| 亚洲欧美另类久久久精品2019| xnxx国产精品| 欧美精品一区二区三区在线| 欧美综合色免费| www.日韩在线| 国产激情精品久久久第一区二区| 美腿丝袜一区二区三区| 亚洲v日本v欧美v久久精品| 亚洲男人天堂av| 国产色产综合色产在线视频| 国产精品污www在线观看| 亚洲国产电影在线观看| 亚洲国产欧美一区二区三区丁香婷| 亚洲欧洲精品一区二区三区| 亚洲美女偷拍久久| 午夜精品福利一区二区蜜股av| 午夜精品久久久久久久99樱桃| 日本女人一区二区三区| 蜜桃精品视频在线| 99久久国产综合精品女不卡| 欧美在线观看一区| 国产午夜三级一区二区三| 亚洲一二三区不卡| 国产乱码精品一区二区三区av | 亚洲成av人影院| 国产一区视频在线看| eeuss鲁片一区二区三区在线观看| 欧美中文字幕亚洲一区二区va在线| 欧美日本一区二区三区四区| 国产午夜久久久久| 天堂va蜜桃一区二区三区| www.欧美色图| 精品少妇一区二区三区免费观看| 亚洲免费在线视频| 国产成人8x视频一区二区 | 精品国产欧美一区二区| 国产三级一区二区三区| 麻豆91在线播放| 欧美精选在线播放| 日韩在线一区二区三区| 欧美亚洲禁片免费| 亚洲免费电影在线| 色诱亚洲精品久久久久久| 国产精品私人自拍| 成人99免费视频|