• 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();        
    }
  • 相关阅读:
    vue-router路由器的使用
    组件间数据传递
    引用模块和动态组件
    vue自定义全局和局部指令
    vue实例的属性和方法
    vue生命周期以及vue的计算属性
    vue 发送ajax请求
    安装vue-cli脚手架
    vue指令详解
    scrapy-redis组件的使用
  • 原文地址:https://www.cnblogs.com/lwngreat/p/4615325.html
Copyright © 2020-2023  润新知