Gdal中读取SHP文件并转换GeoJSON文件(C++实现)
网上资料较少,C++相关实现代码更少,一边学习一边记录吧。
GDAL命令行工具实现
ogr2ogr -f GeoJSON output.json input.shp
注意:shp文件并不单独存在,需要将相关文件置于同一文件夹下。
(https://www.kaggle.com/learn-forum/122966)
C++实现
源码很简单,读取 shp 文件并复制到 json 文件即可。
#include <iostream>
#include "gdal.h"
#include "gdal_priv.h"
#include "ogrsf_frmts.h"
using namespace std;
// 将 shp 文件转化为 json 文件输出
void parseShpfile2GeojsonFile(inFileName, outFileName) {
// 注册驱动
GDALAllRegister();
// 支持中文路径
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
// 属性表字段支持中文
CPLSetConfigOption("SHAPE_ENCODING", "");
// 打开文件,读取数据
GDALDataset *poSrcDS = (GDALDataset *)GDALOpenEx(inFileName, GDAL_OF_VECTOR, NULL, NULL, NULL);
// 判断是否读取成功
if (poSrcDS == NULL)
{
cout << "未能成功读取!" << endl;
return;
}
// json 驱动
GDALDriver* poDriver = GetGDALDriverManager()->GetDriverByName("GeoJSON");
// 复制 shp 文件到指定输出的 json 文件
GDALDataset* poDstDS = poDriver->CreateCopy(outFileName, poSrcDS, FALSE, NULL, NULL, NULL);
//释放内存
if( poDstDS != NULL )
GDALClose((GDALDatasetH) poDstDS);
GDALClose((GDALDatasetH) poSrcDS);
}
int main() {
shp 文件转化为 json 文件输出
parseShpfile2GeojsonFile("input.shp","output.json");
return 0;
}
编译执行:
g++ parse.cpp -lgdal -o parse
./parse
执行后即可看到转换后的 json 文件,亲测可行。
|