Browse Source

fix compilation of v.in.ogr and v.external agaist GDAL < 1.11

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@63618 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 10 years ago
parent
commit
ae4094dde2
2 changed files with 48 additions and 12 deletions
  1. 11 2
      vector/v.external/list.c
  2. 37 10
      vector/v.in.ogr/main.c

+ 11 - 2
vector/v.external/list.c

@@ -278,14 +278,18 @@ int list_layers_ogr(FILE *fd, const char *dsn, const char *layer, int print_type
     for (i = 0; i < nlayers; i++) {
     for (i = 0; i < nlayers; i++) {
 	Ogr_layer = OGR_DS_GetLayer(Ogr_ds, i);
 	Ogr_layer = OGR_DS_GetLayer(Ogr_ds, i);
 	Ogr_featuredefn = OGR_L_GetLayerDefn(Ogr_layer);
 	Ogr_featuredefn = OGR_L_GetLayerDefn(Ogr_layer);
+#if GDAL_VERSION_NUM < 1110000      
+        Ogr_geom_type = OGR_FD_GetGeomType(Ogr_featuredefn);
+#endif
 	layer_name = (char *) OGR_FD_GetName(Ogr_featuredefn);
 	layer_name = (char *) OGR_FD_GetName(Ogr_featuredefn);
 
 
 	if (fd) {
 	if (fd) {
 	    if (print_types) {
 	    if (print_types) {
                 int proj_same, igeom;
                 int proj_same, igeom;
 		OGRSpatialReferenceH Ogr_projection;
 		OGRSpatialReferenceH Ogr_projection;
+#if GDAL_VERSION_NUM >= 1110000
                 OGRGeomFieldDefnH Ogr_geomdefn;
                 OGRGeomFieldDefnH Ogr_geomdefn;
-                
+#endif
 		/* projection check */
 		/* projection check */
 		Ogr_projection = OGR_L_GetSpatialRef(Ogr_layer);
 		Ogr_projection = OGR_L_GetSpatialRef(Ogr_layer);
 		proj_same = 0;
 		proj_same = 0;
@@ -304,7 +308,7 @@ int list_layers_ogr(FILE *fd, const char *dsn, const char *layer, int print_type
 			proj_same = 0;
 			proj_same = 0;
 		}
 		}
 		G_suppress_warnings(FALSE);
 		G_suppress_warnings(FALSE);
-
+#if GDAL_VERSION_NUM >= 1110000
                 for (igeom = 0; igeom < OGR_FD_GetGeomFieldCount(Ogr_featuredefn); igeom++) {
                 for (igeom = 0; igeom < OGR_FD_GetGeomFieldCount(Ogr_featuredefn); igeom++) {
                     Ogr_geomdefn = OGR_FD_GetGeomFieldDefn(Ogr_featuredefn, igeom);
                     Ogr_geomdefn = OGR_FD_GetGeomFieldDefn(Ogr_featuredefn, igeom);
                     if (!Ogr_geomdefn) {
                     if (!Ogr_geomdefn) {
@@ -317,6 +321,11 @@ int list_layers_ogr(FILE *fd, const char *dsn, const char *layer, int print_type
                             feature_type(OGRGeometryTypeToName(Ogr_geom_type)),
                             feature_type(OGRGeometryTypeToName(Ogr_geom_type)),
                             proj_same, OGR_GFld_GetNameRef(Ogr_geomdefn));
                             proj_same, OGR_GFld_GetNameRef(Ogr_geomdefn));
                 }
                 }
+#else
+                    fprintf(fd, "%s,%s,%d,\n", layer_name,
+                            feature_type(OGRGeometryTypeToName(Ogr_geom_type)),
+                            proj_same);
+#endif
 	    }
 	    }
 	    else {
 	    else {
 		fprintf(fd, "%s\n", layer_name);
 		fprintf(fd, "%s\n", layer_name);

+ 37 - 10
vector/v.in.ogr/main.c

@@ -433,11 +433,18 @@ int main(int argc, char *argv[])
     if (Ogr_ds == NULL)
     if (Ogr_ds == NULL)
 	G_fatal_error(_("Unable to open data source <%s>"), dsn);
 	G_fatal_error(_("Unable to open data source <%s>"), dsn);
 
 
-    if (param.geom->answer &&
-        !OGR_DS_TestCapability(Ogr_ds, ODsCCreateGeomFieldAfterCreateLayer)) {
-        G_warning(_("Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."),
-                  param.geom->key, OGR_Dr_GetName(OGR_DS_GetDriver(Ogr_ds)));
+    if (param.geom->answer) {
+#if GDAL_VERSION_NUM >= 1110000
+        if (!OGR_DS_TestCapability(Ogr_ds, ODsCCreateGeomFieldAfterCreateLayer)) {
+            G_warning(_("Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."),
+                      param.geom->key, OGR_Dr_GetName(OGR_DS_GetDriver(Ogr_ds)));
+            param.geom->answer = NULL;
+        }
+#else
+        G_warning(_("Option <%s> will be ignored. Multiple geometry fields are supported by GDAL >= 1.11"),
+                  param.geom->key);
         param.geom->answer = NULL;
         param.geom->answer = NULL;
+#endif
     }
     }
 
 
     /* check encoding for given driver */
     /* check encoding for given driver */
@@ -830,13 +837,14 @@ int main(int argc, char *argv[])
 	Ogr_layer = OGR_DS_GetLayer(Ogr_ds, layer_id);
 	Ogr_layer = OGR_DS_GetLayer(Ogr_ds, layer_id);
 	Ogr_featuredefn = OGR_L_GetLayerDefn(Ogr_layer);
 	Ogr_featuredefn = OGR_L_GetLayerDefn(Ogr_layer);
         igeom = -1;
         igeom = -1;
+#if GDAL_VERSION_NUM >= 1110000
         if (param.geom->answer) {
         if (param.geom->answer) {
             igeom = OGR_FD_GetGeomFieldIndex(Ogr_featuredefn, param.geom->answer);
             igeom = OGR_FD_GetGeomFieldIndex(Ogr_featuredefn, param.geom->answer);
             if (igeom < 0)
             if (igeom < 0)
                 G_fatal_error(_("Geometry column <%s> not found in OGR layer <%s>"),
                 G_fatal_error(_("Geometry column <%s> not found in OGR layer <%s>"),
                               param.geom->answer, OGR_L_GetName(Ogr_layer));
                               param.geom->answer, OGR_L_GetName(Ogr_layer));
         }
         }
-
+#endif
 	n_features = feature_count = 0;
 	n_features = feature_count = 0;
 
 
 	n_features = OGR_L_GetFeatureCount(Ogr_layer, 1);
 	n_features = OGR_L_GetFeatureCount(Ogr_layer, 1);
@@ -849,18 +857,24 @@ int main(int argc, char *argv[])
 	    G_percent(feature_count++, n_features, 1);	/* show something happens */
 	    G_percent(feature_count++, n_features, 1);	/* show something happens */
 
 
             /* Geometry */
             /* Geometry */
+#if GDAL_VERSION_NUM >= 1110000
             for (i = 0; i < OGR_FD_GetGeomFieldCount(Ogr_featuredefn); i++) {
             for (i = 0; i < OGR_FD_GetGeomFieldCount(Ogr_featuredefn); i++) {
                 if (igeom > -1 && i != igeom)
                 if (igeom > -1 && i != igeom)
                     continue; /* use only geometry defined via param.geom */
                     continue; /* use only geometry defined via param.geom */
             
             
                 Ogr_geometry = OGR_F_GetGeomFieldRef(Ogr_feature, i);
                 Ogr_geometry = OGR_F_GetGeomFieldRef(Ogr_feature, i);
+#else
+                Ogr_geometry = OGR_F_GetGeometryRef(Ogr_feature);
+#endif
                 if (Ogr_geometry != NULL) {
                 if (Ogr_geometry != NULL) {
                     if (!flag.no_clean->answer)
                     if (!flag.no_clean->answer)
                         poly_count(Ogr_geometry, (type & GV_BOUNDARY));
                         poly_count(Ogr_geometry, (type & GV_BOUNDARY));
                     if (OGR_G_GetCoordinateDimension(Ogr_geometry) > 2)
                     if (OGR_G_GetCoordinateDimension(Ogr_geometry) > 2)
                         input3d = 1;
                         input3d = 1;
                 }
                 }
+#if GDAL_VERSION_NUM >= 1110000                
             }
             }
+#endif
             OGR_F_Destroy(Ogr_feature);
             OGR_F_Destroy(Ogr_feature);
 	}
 	}
 	G_percent(1, 1, 1);
 	G_percent(1, 1, 1);
@@ -924,9 +938,11 @@ int main(int argc, char *argv[])
 	Ogr_featuredefn = OGR_L_GetLayerDefn(Ogr_layer);
 	Ogr_featuredefn = OGR_L_GetLayerDefn(Ogr_layer);
 
 
         igeom = -1;
         igeom = -1;
+#if GDAL_VERSION_NUM >= 1110000
         if (param.geom->answer)
         if (param.geom->answer)
             igeom = OGR_FD_GetGeomFieldIndex(Ogr_featuredefn, param.geom->answer);
             igeom = OGR_FD_GetGeomFieldIndex(Ogr_featuredefn, param.geom->answer);
-
+#endif
+        
         if (param.key->answer) {
         if (param.key->answer) {
             const char *fid_column;
             const char *fid_column;
             fid_column = OGR_L_GetFIDColumn(Ogr_layer);
             fid_column = OGR_L_GetFIDColumn(Ogr_layer);
@@ -1121,12 +1137,15 @@ int main(int argc, char *argv[])
 	    G_percent(feature_count++, n_features, 1);	/* show something happens */
 	    G_percent(feature_count++, n_features, 1);	/* show something happens */
 
 
             /* Geometry */
             /* Geometry */
+#if GDAL_VERSION_NUM >= 1110000
             for (i = 0; i < OGR_FD_GetGeomFieldCount(Ogr_featuredefn); i++) {
             for (i = 0; i < OGR_FD_GetGeomFieldCount(Ogr_featuredefn); i++) {
                 if (igeom > -1 && i != igeom)
                 if (igeom > -1 && i != igeom)
                     continue; /* use only geometry defined via param.geom */
                     continue; /* use only geometry defined via param.geom */
             
             
                 Ogr_geometry = OGR_F_GetGeomFieldRef(Ogr_feature, i);
                 Ogr_geometry = OGR_F_GetGeomFieldRef(Ogr_feature, i);
-
+#else
+                Ogr_geometry = OGR_F_GetGeometryRef(Ogr_feature);
+#endif                
                 if (Ogr_geometry == NULL) {
                 if (Ogr_geometry == NULL) {
                     nogeom++;
                     nogeom++;
                 }
                 }
@@ -1139,8 +1158,9 @@ int main(int argc, char *argv[])
                     geom(Ogr_geometry, Out, layer + 1, cat, min_area, type,
                     geom(Ogr_geometry, Out, layer + 1, cat, min_area, type,
                          flag.no_clean->answer);
                          flag.no_clean->answer);
                 }
                 }
+#if GDAL_VERSION_NUM >= 1110000              
             }
             }
-
+#endif
 	    /* Attributes */
 	    /* Attributes */
 	    if (!flag.notab->answer) {
 	    if (!flag.notab->answer) {
 		sprintf(buf, "insert into %s values ( %d", Fi->table, cat);
 		sprintf(buf, "insert into %s values ( %d", Fi->table, cat);
@@ -1374,9 +1394,11 @@ int main(int argc, char *argv[])
             Ogr_featuredefn = OGR_L_GetLayerDefn(Ogr_layer);
             Ogr_featuredefn = OGR_L_GetLayerDefn(Ogr_layer);
 
 
             igeom = -1;
             igeom = -1;
+#if GDAL_VERSION_NUM >= 1110000
             if (param.geom->answer)
             if (param.geom->answer)
                 igeom = OGR_FD_GetGeomFieldIndex(Ogr_featuredefn, param.geom->answer);
                 igeom = OGR_FD_GetGeomFieldIndex(Ogr_featuredefn, param.geom->answer);
-
+#endif
+            
 	    n_features = OGR_L_GetFeatureCount(Ogr_layer, 1);
 	    n_features = OGR_L_GetFeatureCount(Ogr_layer, 1);
 	    OGR_L_ResetReading(Ogr_layer);
 	    OGR_L_ResetReading(Ogr_layer);
 
 
@@ -1386,17 +1408,22 @@ int main(int argc, char *argv[])
 		cat++;
 		cat++;
 		G_percent(cat, n_features, 2);
 		G_percent(cat, n_features, 2);
 		/* Geometry */
 		/* Geometry */
+#if GDAL_VERSION_NUM >= 1110000
                 for (i = 0; i < OGR_FD_GetGeomFieldCount(Ogr_featuredefn); i++) {
                 for (i = 0; i < OGR_FD_GetGeomFieldCount(Ogr_featuredefn); i++) {
                     if (igeom > -1 && i != igeom)
                     if (igeom > -1 && i != igeom)
                         continue; /* use only geometry defined via param.geom */
                         continue; /* use only geometry defined via param.geom */
             
             
                     Ogr_geometry = OGR_F_GetGeomFieldRef(Ogr_feature, i);
                     Ogr_geometry = OGR_F_GetGeomFieldRef(Ogr_feature, i);
+#else
+                    Ogr_geometry = OGR_F_GetGeometryRef(Ogr_feature);
+#endif
                     if (Ogr_geometry != NULL) {
                     if (Ogr_geometry != NULL) {
                         centroid(Ogr_geometry, Centr, &si, layer + 1, cat,
                         centroid(Ogr_geometry, Centr, &si, layer + 1, cat,
                                  min_area, type);
                                  min_area, type);
                     }
                     }
+#if GDAL_VERSION_NUM >= 1110000
                 }
                 }
-
+#endif
 		OGR_F_Destroy(Ogr_feature);
 		OGR_F_Destroy(Ogr_feature);
 	    }
 	    }
 	}
 	}