GDAL 读取DXF

// gdal_sample.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "gdal_version.h"
#include "gdal_priv.h"
#include "gdal.h"
#include <iostream>
#include "ogrsf_frmts.h"
#include "dxf/ogr_dxf.h"

#define DYZ_DEBUG_SWITCH "ON"
#if 1
#define DYZ_TEST_DWG_FILE "D:\\code\\gdal-2.3.0\\x64\\Debug\\renwutu.dxf"
#else
#define DYZ_TEST_DWG_FILE "D:\\code\\gdal-2.3.0\\x64\\Debug\\wolunxiang.dwg"
#endif

int main()
{
    GDALAllRegister();
    CPLSetConfigOption("CPL_DEBUG", DYZ_DEBUG_SWITCH);
    GDALDatasetH hInDS = GDALOpenEx(DYZ_TEST_DWG_FILE, GDAL_OF_VECTOR | GDAL_OF_VERBOSE_ERROR, nullptr, nullptr, nullptr);
    //GDALDataset* cInDS = GDALDataset::FromHandle(hInDS);
    OGRDXFDataSource* cInDS = (OGRDXFDataSource*)(hInDS);
    if (NULL == cInDS)
    {    
        return -1;
    }

    const char* pcDrvName = cInDS->GetDriverName();
    if (NULL != pcDrvName)
    {
        std::cout << "Driver Name:" << pcDrvName  << std::endl;
    }

    std::map<CPLString, DXFBlockDefinition>& blkMap = cInDS->GetBlockMap();
    std::map<CPLString, DXFBlockDefinition>::iterator blkMapIter = blkMap.begin();
    for (;blkMap.end() != blkMapIter; ++blkMapIter)
    {
        std::cout << "first:" << blkMapIter->first << ", second size:" << blkMapIter->second.apoFeatures.size() << std::endl;
        std::vector<OGRDXFFeature *>::iterator dxfFtrIter = blkMapIter->second.apoFeatures.begin();
        for (;blkMapIter->second.apoFeatures.end() != dxfFtrIter; ++dxfFtrIter)
        {
            //std::cout << " block name: " << (*dxfFtrIter)->GetBlockName() <<std::endl;
        }
    }
    int nLayerCnt = cInDS->GetLayerCount();
    int nLayerIdx = 0;
    for (;nLayerIdx < nLayerCnt; ++nLayerIdx)
    {
        OGRLayer* curLayer = cInDS->GetLayer(nLayerIdx);
        GIntBig nFtrCount = curLayer->GetFeatureCount();
        OGRDXFLayer* curDxfLayer = new OGRDXFLayer((OGRDXFDataSource*)cInDS);
        OGRFeature * ftr = curDxfLayer->GetNextFeature();
        while (ftr)
        {
            OGRFeature::ConstFieldIterator iter = ftr->begin();
            for (; ftr->end() != iter; ++iter)
            {
                std::cout << "GetType:" << (*iter).GetDefn()->GetType() << std::endl;
            }
            ftr = curDxfLayer->GetNextFeature();
        }
        delete curDxfLayer;
    }

    GDALClose(hInDS);

    return 0;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值