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;
}


### 回答1: GDAL (Geospatial Data Abstraction Library)是一个在GIS领域非常流行的开源库,用于读写几乎所有的栅格和矢量数据格式。在这其中,GDAL也支持读取BigTIFF格式的栅格数据。 BigTIFF是一种扩展了TIFF(Tagged Image File Format)格式的大型栅格数据格式,用于存储高分辨率、多波段的卫星遥感影像等大型栅格数据。正常的TIFF格式规定了文件的大小不超过4GB,而BigTIFF则支持存储超出4GB的数据,使得对于大型栅格数据集的读取和处理成为可能。 要使用GDAL读取BigTIFF,需要安装GDAL库,并且使用GDAL提供的命令行工具或API接口进行文件读取。可以直接使用gdalinfo命令查看BigTIFF文件的相关信息: ```gdalinfo filename.tif``` 其中,filename.tif就是要查看的BigTIFF文件的名称。可以在命令行中看到该文件的基本信息,包括数据类型、地理坐标等信息。如果要在代码中使用GDAL读取BigTIFF,则需要根据GDAL提供的API进行编程操作。 总之,GDAL读取BigTIFF格式的栅格数据提供了底层支持,通过它可以方便地获取地图数据中的地理信息,进行地图数据的预处理、图像处理和应用开发。 ### 回答2: GDAL是一个用于读取和写入各种GIS格式文件的开源库。当需要读取大于4GB大小的TIFF格式文件时,需要用到GDAL读取BigTIFF。 首先,确保已经安装了最新版本的GDAL库。然后,使用以下Python代码来读取BigTIFF文件: ```python import gdal #打开BigTIFF文件 dataset = gdal.Open('bigtiff_file.tif', gdal.GA_ReadOnly) #获取文件信息 cols = dataset.RasterXSize rows = dataset.RasterYSize bands = dataset.RasterCount print("图像尺寸:{} x {}, 波段数:{}".format(cols, rows, bands)) #读取数据 band = dataset.GetRasterBand(1) data = band.ReadAsArray(0, 0, cols, rows) #释放资源 dataset = None ``` 此代码打开名为“bigtiff_file.tif”的文件,并打印出图像的尺寸和波段信息。然后,它读取第一个波段的数据,并将其存储在一个名为“data”的数组中。最后,它释放了所有资源。 需要注意的是,由于BigTIFF文件的尺寸巨大,读取和处理数据时需要充分利用计算机的内存和处理能力。建议使用64位的Python版本和大容量的计算机硬件。 ### 回答3: GDAL(Geospatial Data Abstraction Library)是一个在操作各种格式的遥感数据时常用的软件库。当遇到Bigtiff格式时,我们可以使用GDAL来轻松读取数据。 要使用GDAL读取Bigtiff格式的数据,我们可以按照以下步骤进行操作: 1. 安装GDAL。可以从官方网站下载适用于不同操作系统的安装程序或源代码。安装后,在命令行中输入“gdalinfo”可以检查是否安装成功。 2. 准备Bigtiff格式的文件。确保文件名称符合规范,并且文件中包含合法的数据。如果文件过大,可能需要额外的软件支持。 3. 在命令行中输入“gdal_translate filename outputname”命令,将Bigtiff格式的文件转换为GDAL支持的格式,比如GeoTIFF格式。 4. 在代码中使用GDAL的相关函数读取数据。比如使用GDALOpen函数打开已经转换为GeoTIFF格式的文件,使用GDALReadBlock函数读取数据块等。 总的来说,GDAL是一个非常强大和灵活的工具,可以轻松地读取各种遥感数据格式,包括Bigtiff。通过上述步骤,我们可以用GDAL读取Bigtiff文件,并进行必要的数据处理和分析。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值