shp向量資料打包壓縮

2021-10-25 19:40:25 字數 2954 閱讀 5948

最近專案中需要對生成的shp檔案進行打包壓縮成zip,gdal是可以直接操作zip、tar的,好像還不支援shp格式壓縮(可能我的方式不對,如果可以希望網友指點),所有我是用zlib庫來解決shp資料的壓縮的。

因為我用的gdal是網上已經編譯好的,已經包含了zlib庫,所以直接使用,在配置環境的時候需要鏈結minizip.lib。

標頭檔案如下:

extern "c"

/**

* @brief 新增檔案到zip

* @date 2020/03/12

* @return

* @param zf

* @param filenameinzip

* @param srcfile

* @note

**/void addfiletozip(zipfile zf, const char* filenameinzip, const char* srcfile)

//在zip檔案中建立新檔案

zipopennewfileinzip(zf, new_file_name, &zi, null, 0, null, 0, null, z_deflated, z_default_compression);

if (srcfile != null)

//讀入原始檔並寫入zip檔案

int size_buf = 0;

void* buf = null;

size_buf = 1024;

buf = (void*)malloc(size_buf);

int numbytes = 0;

while (!feof(srcfp))

//關閉原始檔

fclose(srcfp);

} //關閉zip檔案

zipclosefileinzip(zf);

}

最後是先把生成的shp檔案新增到zip中,然後再刪掉shp檔案(期待更好的方案)。

cplstring pszdirpath = cplgetdirname(pszfullpath);

cplstring pszzippath = cplformfilename(pszdirpath, pszfbasename, "zip");

cplstring pszshppath = cplformfilename(pszdirpath, pszfbasename, "shp");

cplstring pszdbfpath = cplformfilename(pszdirpath, pszfbasename, "dbf");

cplstring pszprjpath = cplformfilename(pszdirpath, pszfbasename, "prj");

cplstring pszshxpath = cplformfilename(pszdirpath, pszfbasename, "shx");

cplstring pszshpname = cplformcifilename("", pszfbasename, "shp");

cplstring pszdbfname = cplformcifilename("", pszfbasename, "dbf");

cplstring pszprjname = cplformcifilename("", pszfbasename, "prj");

cplstring pszshxname = cplformcifilename("", pszfbasename, "shx");

if (zf == null)

addfiletozip(zf, pszshpname, pszshppath);

addfiletozip(zf, pszdbfname, pszdbfpath);

addfiletozip(zf, pszprjname, pszprjpath);

addfiletozip(zf, pszshxname, pszshxpath);

zipclose(zf, 0);

//刪除本地生成的shp檔案

podriver->delete(pszfullpath);

上面**壓縮的zip,在解壓時會出現下圖的警告資訊:

解決方法:

addfiletozip函式在初始化寫入zip資訊的時候,是將時間都初始化為0,現在需要修改這個時間,如下:

time_t timep;

struct tm* p;

time(&timep);

//p = gmtime(&timep); // utc時間

p = localtime(&timep); // 本地時間

//初始化寫入zip的檔案資訊

zip_fileinfo zi;

zi.tmz_date.tm_year = 1900 + p->tm_yday;

zi.tmz_date.tm_mon = p->tm_mon;

zi.tmz_date.tm_mday = p->tm_mday;

zi.tmz_date.tm_hour = p->tm_hour;

zi.tmz_date.tm_min = p->tm_min;

zi.tmz_date.tm_sec = p->tm_sec;

= zi.tmz_date.tm_min = zi.tmz_date.tm_hour =

// zi.tmz_date.tm_mday = zi.tmz_date.tm_mon = zi.tmz_date.tm_year = 0;

zi.dosdate = 0;

zi.internal_fa = 0;

zi.external_fa = 0;

las點雲資料轉為shp向量點資料

1 用到的軟體 arcmap envi lidar 2 envi lidar開啟點雲資料 las 3 envi lidar 裡面的process data將點資料轉為txt 有很多選項,看好了儲存的格式 儲存的檔案路徑。4 arcgis開啟txt,右擊txt選擇display xy顯示點。需要注意的...

日誌打包壓縮

這幾天,伺服器日誌漲的很快。因為沒有日誌伺服器,都是寫在本地。要保留三個月,打包,壓縮能節省些空間。做個記錄。顯示當前系統前兩個的日期 date d 2 days ago y m d bin sh 會員服務的日誌 路徑 opt logs member ma logs 保留三天的日誌。打包壓縮存在當前...

檔案壓縮打包

1.gzip 1 gzip gzip 檔案 生成.gz檔案 2 gzip 6 預設級別 3 gzip d 壓縮檔案 解壓縮 4 gunzip 壓縮檔案 解壓縮 5 zcat 壓縮檔案 檢視壓縮檔案內容 2.bzip2 1 bzip2 檔案 生成.bz2檔案 2 bzip2 9 預設級別 3 bzip...