// Add additional Geometry table for Interlis 1 void AddGeomTable(CPLString layerName, const char* psFieldName, OGRwkbGeometryType eType, bool bRefTIDField = false) { OGRFeatureDefn* poGeomTableDefn = new OGRFeatureDefn(layerName); OGRFieldDefn fieldDef("_TID", OFTString); poGeomTableDefn->AddFieldDefn(&fieldDef); if (bRefTIDField) { OGRFieldDefn fieldDefRef("_RefTID", OFTString); poGeomTableDefn->AddFieldDefn(&fieldDefRef); } poGeomTableDefn->DeleteGeomFieldDefn(0); OGRGeomFieldDefn fieldDefGeom(psFieldName, eType); poGeomTableDefn->AddGeomFieldDefn(&fieldDefGeom); CPLDebug( "OGR_ILI", "Adding geometry table %s for field %s", poGeomTableDefn->GetName(), psFieldName); poGeomFieldInfos[psFieldName].geomTable = poGeomTableDefn; }
OGRILI1Layer* ILI1Reader::AddGeomTable(const char* datalayername, const char* geomname, OGRwkbGeometryType eType) { static char layername[512]; layername[0] = '\0'; strcat(layername, datalayername); strcat(layername, "_"); strcat(layername, geomname); OGRILI1Layer* geomlayer = new OGRILI1Layer(layername, NULL, 0, eType, NULL); AddLayer(geomlayer); OGRFieldDefn fieldDef("_TID", OFTString); geomlayer->GetLayerDefn()->AddFieldDefn(&fieldDef); if (eType == wkbPolygon) { OGRFieldDefn fieldDefRef("_RefTID", OFTString); geomlayer->GetLayerDefn()->AddFieldDefn(&fieldDefRef); } OGRFieldDefn fieldDef2("ILI_Geometry", OFTString); //in write mode only? geomlayer->GetLayerDefn()->AddFieldDefn(&fieldDef2); return geomlayer; }