GDAL - 그리드 벡터

5393 단어 GIS
전언
최근에 학생들을 도와 몇 개의 작은 프로그램을 썼는데, 이는 GDAL로 격자 데이터의 벡터 데이터를 실현하는 것을 포함한다.인터넷에 관련 글이 많지 않고 대부분 버전 등 일련의 원인으로 인해 버그가 많다.나는 관련 글과 GDAL 홈페이지의 함수 설명을 참고하여 완전한 프로그램을 쓰고 기록했다.
코드
#include "gdal_priv.h"  
#include "ogrsf_frmts.h" //for ogr  
#include "gdal_alg.h"  //for GDALPolygonize  

int Raster2Vector(const char * pszSrcFile, const char* pszDstFile, const char* pszFormat);//     

int main()
{
    const char* pszSrcFile = "C:\\Users\\liuwei\\Desktop\\2.jpg";//        
    const char* pszDstFile = "C:\\Users\\liuwei\\Desktop\\shp\\out.shp";//        
    Raster2Vector(pszSrcFile, pszDstFile, "ESRI Shapefile");
    return 0;
}

int Raster2Vector(const char * pszSrcFile, const char* pszDstFile, const char* pszFormat)
{
    GDALAllRegister();//    
    CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");//        

    GDALDataset* poSrcDS = (GDALDataset*)GDALOpen(pszSrcFile, GA_ReadOnly);
    if (poSrcDS == NULL)
    {
        return 0;
    }
    //   Shapefile            
    GDALDriver *poDriver;
    poDriver = GetGDALDriverManager()->GetDriverByName(pszFormat);
    if (poDriver == NULL)
    {
        printf("%s driver not available.
"
, pszFormat); exit(1); } // GDALDataset* poDstDS = poDriver->Create(pszDstFile, 0, 0, 0, GDT_Unknown, NULL); if (poDstDS == NULL) { printf("Creation of output file failed.
"
); exit(1); } // , OGRSpatialReference *poSpatialRef = new OGRSpatialReference(poSrcDS->GetProjectionRef()); if (poSpatialRef == NULL) { return 0; } OGRLayer* poLayer = poDstDS->CreateLayer("DstLayer", poSpatialRef, wkbPolygon, NULL);// if (poDstDS == NULL) { GDALClose(poSrcDS); GDALClose(poDstDS); delete poSpatialRef; return 0; } OGRFieldDefn oField("value", OFTInteger);// , “value”, if (poLayer->CreateField(&oField) != OGRERR_NONE) { printf("Creating Name field failed.
"
); exit(1); } GDALRasterBandH hSrcBand = (GDALRasterBandH)poSrcDS->GetRasterBand(1); // GDALPolygonize(hSrcBand, NULL, (OGRLayerH)poLayer, 0, NULL, NULL, NULL); // GDALClose(poSrcDS); // GDALClose(poDstDS); return 1; }

설명
1. 그리드 벡터는 GDAL 라이브러리를 사용하여 이루어진 것으로 GDAL 환경 설정은 다음과 같은 블로그를 참고할 수 있다. GDAL 환경 설정.2. 관건은 GDALPolygonize()라는 격자 벡터화 함수로 GDAL 홈페이지 Files 디렉터리 gdalalg.h에서 함수 상세 정보를 보십시오.3. 인터넷 GDAL 자료가 들쭉날쭉하니 직접 홈페이지에 가서 관련 클래스와 함수를 확인하는 것을 권장합니다.

좋은 웹페이지 즐겨찾기