[GRASS-SVN] r52810 - grass/trunk/vector/v.in.ogr
svn_grass at osgeo.org
svn_grass at osgeo.org
Tue Aug 21 05:45:50 PDT 2012
Author: mmetz
Date: 2012-08-21 05:45:49 -0700 (Tue, 21 Aug 2012)
New Revision: 52810
Modified:
grass/trunk/vector/v.in.ogr/main.c
Log:
v.in.ogr: add safety checks and warnings
Modified: grass/trunk/vector/v.in.ogr/main.c
===================================================================
--- grass/trunk/vector/v.in.ogr/main.c 2012-08-21 10:50:43 UTC (rev 52809)
+++ grass/trunk/vector/v.in.ogr/main.c 2012-08-21 12:45:49 UTC (rev 52810)
@@ -416,11 +416,13 @@
cellhd.cols = 20;
cellhd.ns_res = (cellhd.north - cellhd.south) / cellhd.rows;
cellhd.ew_res = (cellhd.east - cellhd.west) / cellhd.cols;
+
/* use OGR extents if possible, needed to skip corrupted data
* in OGR dsn/layer */
have_ogr_extent = 1;
}
- else {
+
+ if (!have_ogr_extent) {
cellhd.north = 1.;
cellhd.south = 0.;
cellhd.west = 0.;
@@ -440,12 +442,21 @@
}
/* set spatial filter */
- if (flag.region->answer && !param.spat->answer) {
+ if (flag.region->answer) {
if (param.spat->answer)
G_fatal_error(_("Select either the current region flag or the spatial option, not both"));
+ if (nlayers > 1)
+ G_warning(_("The region flag is applied only to the first OGR layer"));
G_get_window(&cur_wind);
if (have_ogr_extent) {
+ /* check for any overlap */
+ if (cur_wind.west > xmax || cur_wind.east < xmin ||
+ cur_wind.south > ymax || cur_wind.north < ymin) {
+ G_warning(_("The current region does not overlap with OGR input. Nothing to import."));
+ OGR_DS_Destroy(Ogr_ds);
+ exit(EXIT_SUCCESS);
+ }
if (xmin < cur_wind.west)
xmin = cur_wind.west;
if (xmax > cur_wind.east)
@@ -463,51 +474,56 @@
}
}
if (param.spat->answer) {
- double coor;
+ double spatxmin = xmin,
+ spatxmax = xmax,
+ spatymin = ymin,
+ spatymax = ymax;
+
+ if (nlayers > 1)
+ G_warning(_("The 'spatial' option is applied only to the first OGR layer"));
+
/* See as reference: gdal/ogr/ogr_capi_test.c */
/* cut out a piece of the map */
/* order: xmin,ymin,xmax,ymax */
- arg_s_num = 0;
i = 0;
while (param.spat->answers[i]) {
- if (!have_ogr_extent) {
- if (i == 0)
- xmin = atof(param.spat->answers[i]);
- if (i == 1)
- ymin = atof(param.spat->answers[i]);
- if (i == 2)
- xmax = atof(param.spat->answers[i]);
- if (i == 3)
- xmax = atof(param.spat->answers[i]);
- }
- else {
- if (i == 0) {
- coor = atof(param.spat->answers[i]);
- if (xmin < coor)
- xmin = coor;
- }
- if (i == 1) {
- coor = atof(param.spat->answers[i]);
- if (ymin < coor)
- ymin = coor;
- }
- if (i == 2) {
- coor = atof(param.spat->answers[i]);
- if (xmax > coor)
- xmax = coor;
- }
- if (i == 3) {
- coor = atof(param.spat->answers[i]);
- if (ymax > coor)
- ymax = coor;
- }
- }
- arg_s_num++;
+ if (i == 0)
+ spatxmin = atof(param.spat->answers[i]);
+ if (i == 1)
+ spatymin = atof(param.spat->answers[i]);
+ if (i == 2)
+ spatxmax = atof(param.spat->answers[i]);
+ if (i == 3)
+ spatymax = atof(param.spat->answers[i]);
i++;
}
- if (arg_s_num != 4)
+ if (i != 4)
G_fatal_error(_("4 parameters required for 'spatial' parameter"));
+
+ if (!have_ogr_extent) {
+ xmin = spatxmin;
+ ymin = spatymin;
+ xmax = spatxmax;
+ ymax = spatymax;
+ }
+ else {
+ /* check for any overlap */
+ if (spatxmin > xmax || spatxmax < xmin ||
+ spatymin > ymax || spatymax < ymin) {
+ G_warning(_("The 'spatial' parameters do not overlap with OGR input. Nothing to import."));
+ OGR_DS_Destroy(Ogr_ds);
+ exit(EXIT_SUCCESS);
+ }
+ if (xmin < spatxmin)
+ xmin = spatxmin;
+ if (ymin < spatymin)
+ ymin = spatymin;
+ if (xmax > spatxmax)
+ xmax = spatxmax;
+ if (ymax > spatymax)
+ ymax = spatymax;
+ }
}
if (param.spat->answer || flag.region->answer || have_ogr_extent) {
G_debug(2, "cut out with boundaries: xmin:%f ymin:%f xmax:%f ymax:%f",
@@ -528,6 +544,9 @@
if (param.where->answer) {
/* select by attribute */
+ if (nlayers > 1)
+ G_warning(_("The 'where' option is applied only to the first OGR layer"));
+
OGR_L_SetAttributeFilter(Ogr_layer, param.where->answer);
}
More information about the grass-commit
mailing list