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;
}
转载自:https://blog.csdn.net/durongze/article/details/80740270