zoukankan      html  css  js  c++  java
  • 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();        
    }
  • 相关阅读:
    ApkAnalyser 一键提取安卓应用中可能存在的敏感信息(URLhash等)
    PostgreSQL创建只读权限的用户
    记一次 Centos7 Postgresql v11 数据库备份、还原
    Linux下安装pgadmin,并外部访问
    CentOS7中安装PostgreSQL客户端
    java.io.FileNotFoundException: Too many open files
    centos批量删除文件
    Centos7下Redis缓存清理_FZlion
    解决启动Apache遇到的问题Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:8888
    CentOS 卸载软件
  • 原文地址:https://www.cnblogs.com/lwngreat/p/4615325.html
Copyright © 2011-2022 走看看