[GRASS-SVN] r71597 - grass/trunk/vector/v.out.ogr

svn_grass at osgeo.org svn_grass at osgeo.org
Wed Oct 25 14:32:54 PDT 2017


Author: neteler
Date: 2017-10-25 14:32:54 -0700 (Wed, 25 Oct 2017)
New Revision: 71597

Modified:
   grass/trunk/vector/v.out.ogr/args.c
   grass/trunk/vector/v.out.ogr/list.c
   grass/trunk/vector/v.out.ogr/local_proto.h
   grass/trunk/vector/v.out.ogr/main.c
   grass/trunk/vector/v.out.ogr/v.out.ogr.html
Log:
v.out.ogr: Set OGC GeoPackage as default export format (see #3428); contributed by jachym and mmetz

Modified: grass/trunk/vector/v.out.ogr/args.c
===================================================================
--- grass/trunk/vector/v.out.ogr/args.c	2017-10-25 19:03:46 UTC (rev 71596)
+++ grass/trunk/vector/v.out.ogr/args.c	2017-10-25 21:32:54 UTC (rev 71597)
@@ -32,8 +32,8 @@
     options->format->type = TYPE_STRING;
     options->format->required = YES;
     options->format->multiple = NO;
-    options->format->answer = "ESRI_Shapefile";
     options->format->options = OGR_list_write_drivers();
+    options->format->answer = default_driver();
     options->format->description = _("Data format to write");
     
     options->layer = G_define_option();

Modified: grass/trunk/vector/v.out.ogr/list.c
===================================================================
--- grass/trunk/vector/v.out.ogr/list.c	2017-10-25 19:03:46 UTC (rev 71596)
+++ grass/trunk/vector/v.out.ogr/list.c	2017-10-25 21:32:54 UTC (rev 71597)
@@ -9,7 +9,11 @@
 {
     int i, count;
     size_t len;
+#if GDAL_VERSION_NUM >= 2000000
+    GDALDriverH hDriver;
+#else
     OGRSFDriverH Ogr_driver;
+#endif
     char buf[2000];
     
     char **list, *ret;
@@ -17,7 +21,33 @@
     list = NULL;
     count = len = 0;
     
-    /* Open OGR DSN */
+#if GDAL_VERSION_NUM >= 2000000
+    /* get GDAL driver names */
+    GDALAllRegister();
+    G_debug(2, "driver count = %d", GDALGetDriverCount());
+    for (i = 0; i < GDALGetDriverCount(); i++) {
+	hDriver = GDALGetDriver(i);
+	/* only fetch read/write drivers */
+	if (!GDALGetMetadataItem(hDriver, GDAL_DCAP_VECTOR, NULL))
+	    continue;
+
+	if (!GDALGetMetadataItem(hDriver, GDAL_DCAP_CREATE, NULL) &&
+	    !GDALGetMetadataItem(hDriver, GDAL_DCAP_CREATECOPY, NULL))
+	    continue;
+	
+	G_debug(2, "driver %d/%d : %s", i, GDALGetDriverCount(),
+		GDALGetDriverShortName(hDriver));
+	
+	list = G_realloc(list, (count + 1) * sizeof(char *));
+
+	/* chg white space to underscore in GDAL driver names */
+	sprintf(buf, "%s", GDALGetDriverShortName(hDriver));
+	G_strchg(buf, ' ', '_');
+	list[count++] = G_store(buf);
+	len += strlen(buf) + 1; /* + ',' */
+    }
+#else
+    /* get OGR driver names */
     OGRRegisterAll();
     G_debug(2, "driver count = %d", OGRGetDriverCount());
     for (i = 0; i < OGRGetDriverCount(); i++) {
@@ -37,6 +67,7 @@
 	list[count++] = G_store(buf);
 	len += strlen(buf) + 1; /* + ',' */
     }
+#endif
 
     qsort(list, count, sizeof(char *), cmp);
 
@@ -65,6 +96,19 @@
     return (strcmp(*(char **)a, *(char **)b));
 }
 
+char *default_driver(void)
+{
+#if GDAL_VERSION_NUM >= 2000000
+    if (GDALGetDriverByName("GPKG")) {
+#else
+    if (OGRGetDriverByName("GPKG")) {
+#endif
+	return G_store("GPKG");
+    }
+
+    return G_store("ESRI_Shapefile");
+}
+
 void list_formats(void)
 {
     int iDriver;

Modified: grass/trunk/vector/v.out.ogr/local_proto.h
===================================================================
--- grass/trunk/vector/v.out.ogr/local_proto.h	2017-10-25 19:03:46 UTC (rev 71596)
+++ grass/trunk/vector/v.out.ogr/local_proto.h	2017-10-25 21:32:54 UTC (rev 71597)
@@ -35,6 +35,7 @@
 /* list.c */
 char *OGR_list_write_drivers();
 void list_formats(void);
+char *default_driver(void);
 
 /* create.c */
 void create_ogr_layer(const char *, const char *, const char *,

Modified: grass/trunk/vector/v.out.ogr/main.c
===================================================================
--- grass/trunk/vector/v.out.ogr/main.c	2017-10-25 19:03:46 UTC (rev 71596)
+++ grass/trunk/vector/v.out.ogr/main.c	2017-10-25 21:32:54 UTC (rev 71597)
@@ -85,7 +85,7 @@
 
     module->label =
 	_("Exports a vector map layer to any of the supported OGR vector formats.");
-    module->description = _("By default a vector map layer is exported to Esri Shapefile format.");
+    module->description = _("By default a vector map layer is exported to OGC GeoPackage format.");
     module->overwrite = TRUE;
     
     /* parse & read options */

Modified: grass/trunk/vector/v.out.ogr/v.out.ogr.html
===================================================================
--- grass/trunk/vector/v.out.ogr/v.out.ogr.html	2017-10-25 19:03:46 UTC (rev 71596)
+++ grass/trunk/vector/v.out.ogr/v.out.ogr.html	2017-10-25 21:32:54 UTC (rev 71597)
@@ -2,7 +2,7 @@
 
 <em>v.out.ogr</em> converts GRASS vector map layer to any of the
 supported <a href="http://www.gdal.org/">OGR</a> vector formats
-(like a Esri Shapefile, SpatiaLite or GML).
+(including OGC GeoPackage, ESRI Shapefile, SpatiaLite or GML).
 
 <p>
 OGR (Simple Features Library) is part of the
@@ -13,6 +13,7 @@
 The OGR library supports many various formats including:
 
 <ul>
+  <li><a href="http://www.gdal.org/drv_geopackage.html">OGC GeoPackage</a></li>
   <li><a href="http://www.gdal.org/drv_shapefile.html">ESRI Shapefile</a></li>
   <li><a href="http://www.gdal.org/drv_pg.html">PostGIS</a></li>
   <li><a href="http://www.gdal.org/drv_sqlite.html">SpatiaLite</a></li>
@@ -62,12 +63,35 @@
 
 <h2>EXAMPLES</h2>
 
+<h3>Export to OGC GeoPackage</h3>
+
+Export lines from a GRASS vector map to OGC GeoPackage format:
+
+<div class="code"><pre>
+v.out.ogr input=roadsmajor type=line output=roadsmajor.gpkg
+</pre></div>
+
+<p>
+Export areas from GRASS vector map to OGC GeoPackage format, converting
+islands (holes) to filled polygons:
+
+<div class="code"><pre>
+v.out.ogr -c input=areas_islands type=area output=areas_islands.gpkg
+</pre></div>
+
+<p>
+Export mixed geometry type GRASS vector map to OGC GeoPackage format:
+
+<div class="code"><pre>
+v.out.ogr input=generic_vector output=mixed_geometry.gpkg
+</pre></div>
+
 <h3>Export to ESRI Shapefile</h3>
 
 Export lines from GRASS vector map to Shapefile format:
 
 <div class="code"><pre>
-v.out.ogr input=lines type=line output=lines.shp
+v.out.ogr input=roadsmajor type=line format=ESRI_Shapefile output=lines.shp
 </pre></div>
 
 <p>
@@ -75,34 +99,34 @@
 islands (holes) to filled polygons:
 
 <div class="code"><pre>
-v.out.ogr -c input=areas_islands type=area output=areas_islands.shp
+v.out.ogr -c input=areas_islands type=area format=ESRI_Shapefile output=areas_islands.shp
 </pre></div>
 
 <p>
 Export 3D lines from GRASS vector map to Shapefile format:
 
 <div class="code"><pre>
-v.out.ogr input=lines_3d type=line output=lines_3d.shp lco="SHPT=ARCZ"
+v.out.ogr input=lines_3d type=line format=ESRI_Shapefile output=lines_3d.shp lco="SHPT=ARCZ"
 </pre></div>
 
 <p>
 Export 3D points (e.g., Lidar points) from GRASS vector map to Shapefile format
 
 <div class="code"><pre>
-v.out.ogr points_3d type=point output=points_3d.shp lco="SHPT=POINTZ"
+v.out.ogr points_3d type=point format=ESRI_Shapefile output=points_3d.shp lco="SHPT=POINTZ"
 </pre></div>
 
 <p>
 Export 3D faces from GRASS vector map to Shapefile format:
 <div class="code"><pre>
-v.out.ogr input=objects_3d type=face output=faces_3d.shp lco="SHPT=POLYGONZ"
+v.out.ogr input=objects_3d type=face format=ESRI_Shapefile output=faces_3d.shp lco="SHPT=POLYGONZ"
 </pre></div>
 
 <p>
 Export 3D faces from GRASS vector map to Shapefile format, automatic 3D setting:
 
 <div class="code"><pre>
-v.out.ogr input=objects_3d type=face output=faces_3d.shp"
+v.out.ogr input=objects_3d type=face format=ESRI_Shapefile output=faces_3d.shp"
 </pre></div>
 
 <h3>Export to GML</h3>



More information about the grass-commit mailing list