GDAL使用笔记1

152 阅读1分钟

1,GDAL在文件不存在时,使用Driver进行创建出DataSet,然后在DataSet上面再CreateLayer(),注意默认使用WKB格式,可以自行用CSLSetNameValue()进行指定,如果要被Sqlite读写软件容易读取,应该设置为SQLITE格式。 char **papszOptions = nullptr; papszOptions = CSLSetNameValue( papszOptions, "FORMAT", "SPATIALITE" ); auto p_layer = p_dataset->CreateLayer(layername.c_str(), nullptr, feature_defn->GetGeomType(), papszOptions); CSLDestroy( papszOptions );

2,GDAL创建新图层时,默认图层名和属性名都是小写。也可以通过CSLSetNameValue()进行指定,不转换为小写。 papszOptions = CSLSetNameValue( papszOptions, "LAUNDER", "NO" );

3,GDAL创建新图层时,默认会创建OGR_FID字段,作为fid属性字段,且其值默认内部按某种规则生成,这个字段默认要遵守唯一性约束。如何避免生成本字段尚查不到资料。但要防止莫名违反唯一性约束的话,可以将该值用自己定义的主键来设置,调用SetFID().

4,复制一个旧文件,使用DeleteFeature()/ExecuteSQL(“DELETE from tablename;”)等方法来清空原距离,此时文件大小并不减少,插入新记录后,QGIS无法识别,目前尚不知原因。

参考链接:

gdal.org/drivers/vec… gdal.org/doxygen/cla…