GDAL显示线性shp文件

http://pan.baidu.com/s/1qWIDphU  (工程文件在vs2008中编写)

1、使用到的技术

GDAL:读取矢量数据

GDI:    绘制矢量数据

2、详细解释

GDI绘图:

void CDisplayShpDialogDlg::initialCDC(void)
{
    m_slider_r.SetRange(0,255,FALSE);  //对slider范围的设定
    m_slider_g.SetRange(0,255,FALSE);
    m_slider_b.SetRange(0,255,FALSE);
    m_pDC = m_picDraw.GetDC();      //获取图形控件的DC
    m_picDraw.GetClientRect(m_rectPicture);        //获取图形控件的大小
}

 

GDAL数据读取:

void CDisplayShpDialogDlg::DrawShp()
{
    //定义画笔的颜色
    newPen.CreatePen(PS_SOLID,1,RGB(m_slider_r.GetPos(),m_slider_g.GetPos(),m_slider_b.GetPos()));    //给CDC设置会画时的画笔
    pOldPen = m_pDC->SelectObject(&newPen);                                    //将CDC与画笔关联起来

    CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO" );                         //使GDAL支持中文
    OGRRegisterAll();
    //打开数据
    GDALDataset *poDS ;              //定义一个图形数据集
    poDS = (GDALDataset *)GDALOpenEx(m_filePathName.GetBuffer(),GDAL_OF_VECTOR,NULL,NULL,NULL);   //打开矢量数据并返回指针给数据集
    if (poDS==NULL)
    {
        MessageBox("Open Failed");
        exit(1);
    }
    OGRLayer *poLayer = poDS->GetLayer(0);    //从数据集中获取图层
    poLayer->GetExtent(envelope);        //获取图层的坐标范围到envelop指向的内存中

    poLayer->ResetReading();
    OGRFeature *poFeature;            //定义要素指针
    while((poFeature = poLayer->GetNextFeature())!=NULL)  //从图层中获取要素
    {
        OGRGeometry *poGeometry=poFeature->GetGeometryRef();   //从要素中获取几何图形
        if (poGeometry!=NULL)
        {
            switch (wkbFlatten(poGeometry->getGeometryType()))   //判别几何图形的类型
            {case wkbLineString:                   //如果几何图形的类型为线状执行下面程序
                    OGRLineString *poLine = (OGRLineString*)poGeometry;
                    for(int i = 0;i<poLine->getNumPoints();i++)
                    {
                        double staX = poLine->getX(i);
                        double staY = poLine->getY(i);
                        TransformCoordinate(&staX,&staY);    //坐标转换
                        if(i==0)
                        {
                            m_pDC->MoveTo(staX,staY);             //使用CDC类进行绘图
                        }
                        else
                        {
                            m_pDC->LineTo(staX,staY);
                        }
                    }
                    OGRFeature::DestroyFeature( poFeature );
                    break;
            }
        }

    }
    m_pDC->SelectObject(pOldPen);
    newPen.DeleteObject();        
}

 

posted @ 2015-07-02 10:29  lwn6  阅读(2078)  评论(1编辑  收藏  举报
什么是幸福?天天在做自己想做的事情,家人、同事、朋友、客户、网友都和和睦睦,身体健康、钱包鼓鼓、女朋友天天开心、生活无忧无虑就是最大的幸福