|
@@ -28,6 +28,9 @@
|
|
|
#include "grid_structs.h"
|
|
|
#include "local_proto.h"
|
|
|
|
|
|
+/* Write attribute data in batches per 20 */
|
|
|
+#define BATCH_SIZE 20
|
|
|
+
|
|
|
int main(int argc, char *argv[])
|
|
|
{
|
|
|
|
|
@@ -36,7 +39,9 @@ int main(int argc, char *argv[])
|
|
|
|
|
|
/* store filename and path */
|
|
|
char *dig_file;
|
|
|
+
|
|
|
char buf[2000];
|
|
|
+ int batch_fill;
|
|
|
|
|
|
/* Other local variables */
|
|
|
int attCount, nbreaks;
|
|
@@ -64,15 +69,14 @@ int main(int argc, char *argv[])
|
|
|
module = G_define_module();
|
|
|
G_add_keyword(_("vector"));
|
|
|
G_add_keyword(_("geometry"));
|
|
|
- module->description =
|
|
|
- _("Creates a vector map of a user-defined grid.");
|
|
|
+ module->description = _("Creates a vector map of a user-defined grid.");
|
|
|
|
|
|
vectname = G_define_standard_option(G_OPT_V_OUTPUT);
|
|
|
vectname->key = "map";
|
|
|
|
|
|
grid = G_define_option();
|
|
|
grid->key = "grid";
|
|
|
- grid->key_desc = "rows,columns";
|
|
|
+ grid->key_desc = _("rows,columns");
|
|
|
grid->type = TYPE_INTEGER;
|
|
|
grid->required = YES;
|
|
|
grid->multiple = NO;
|
|
@@ -88,9 +92,9 @@ int main(int argc, char *argv[])
|
|
|
position_opt->description = _("Where to place the grid");
|
|
|
desc = NULL;
|
|
|
G_asprintf(&desc,
|
|
|
- "region;%s;coor;%s",
|
|
|
- _("current region"),
|
|
|
- _("use 'coor' and 'box' options"));
|
|
|
+ "region;%s;coor;%s",
|
|
|
+ _("current region"),
|
|
|
+ _("use 'coor' and 'box' options"));
|
|
|
position_opt->descriptions = desc;
|
|
|
|
|
|
coord = G_define_option();
|
|
@@ -104,7 +108,7 @@ int main(int argc, char *argv[])
|
|
|
|
|
|
box = G_define_option();
|
|
|
box->key = "box";
|
|
|
- box->key_desc = "width,height";
|
|
|
+ box->key_desc = _("width,height");
|
|
|
box->type = TYPE_DOUBLE;
|
|
|
box->required = NO;
|
|
|
box->multiple = NO;
|
|
@@ -124,10 +128,10 @@ int main(int argc, char *argv[])
|
|
|
breaks->required = NO;
|
|
|
breaks->description =
|
|
|
_("Number of horizontal vertex points per grid cell");
|
|
|
- breaks->options = "3-30";
|
|
|
+ breaks->options = "0-60";
|
|
|
breaks->answer = "3";
|
|
|
|
|
|
- points_fl = G_define_flag ();
|
|
|
+ points_fl = G_define_flag();
|
|
|
points_fl->key = 'p';
|
|
|
points_fl->description =
|
|
|
_("Create grid of points instead of areas and centroids");
|
|
@@ -158,10 +162,15 @@ int main(int argc, char *argv[])
|
|
|
/* Position */
|
|
|
if (position_opt->answer[0] == 'r') { /* region */
|
|
|
if (coord->answer)
|
|
|
- G_warning("'coor' option ignored with 'position=region'");
|
|
|
+ G_fatal_error(_("'coor' and 'position=region' are exclusive options"));
|
|
|
|
|
|
if (box->answer)
|
|
|
- G_warning("'box' option ignored with 'position=region'");
|
|
|
+ G_fatal_error(_("'box' and 'position=region' are exclusive options"));
|
|
|
+
|
|
|
+ if (grid_info.angle != 0.0) {
|
|
|
+ G_fatal_error(_("'angle' and 'position=region' are exclusive options"));
|
|
|
+ grid_info.angle = 0.0;
|
|
|
+ }
|
|
|
|
|
|
grid_info.origin_x = window.west;
|
|
|
grid_info.origin_y = window.south;
|
|
@@ -171,11 +180,6 @@ int main(int argc, char *argv[])
|
|
|
|
|
|
G_debug(2, "x = %e y = %e l = %e w = %e", grid_info.origin_x,
|
|
|
grid_info.origin_y, grid_info.length, grid_info.width);
|
|
|
-
|
|
|
- if (grid_info.angle != 0.0) {
|
|
|
- G_warning("'angle' ignored ");
|
|
|
- grid_info.angle = 0.0;
|
|
|
- }
|
|
|
}
|
|
|
else {
|
|
|
if (!coord->answer)
|
|
@@ -256,7 +260,7 @@ int main(int argc, char *argv[])
|
|
|
G_fatal_error(_("Unable to grant privileges on table <%s>"),
|
|
|
Fi->table);
|
|
|
|
|
|
- if (! points_p) {
|
|
|
+ if (!points_p) {
|
|
|
/* create areas */
|
|
|
write_grid(&grid_info, &Map, nbreaks);
|
|
|
}
|
|
@@ -266,6 +270,7 @@ int main(int argc, char *argv[])
|
|
|
|
|
|
/* Write out centroids and attributes */
|
|
|
attCount = 0;
|
|
|
+ batch_fill = 0;
|
|
|
for (i = 0; i < grid_info.num_rows; ++i) {
|
|
|
for (j = 0; j < grid_info.num_cols; ++j) {
|
|
|
double x, y;
|
|
@@ -284,27 +289,51 @@ int main(int argc, char *argv[])
|
|
|
Vect_cat_set(Cats, 1, attCount + 1);
|
|
|
Vect_write_line(&Map, point_type, Points, Cats);
|
|
|
|
|
|
- if (grid_info.num_rows < 27 && grid_info.num_cols < 27) {
|
|
|
+ if (batch_fill == 0) {
|
|
|
+ sprintf(buf, "insert into %s values ", Fi->table);
|
|
|
+ if (db_set_string(&sql, buf) != DB_OK)
|
|
|
+ G_fatal_error(_("Unable to fill attribute table"));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (batch_fill > 0)
|
|
|
+ if (db_append_string(&sql, ", ") != DB_OK)
|
|
|
+ G_fatal_error(_("Unable to fill attribute table"));
|
|
|
+
|
|
|
+ if (grid_info.num_rows < 27 && grid_info.num_cols < 27) {
|
|
|
sprintf(buf,
|
|
|
- "insert into %s values ( %d, %d, %d, '%c', '%c' )",
|
|
|
- Fi->table, attCount + 1, grid_info.num_rows - i,
|
|
|
+ "( %d, %d, %d, '%c', '%c' )",
|
|
|
+ attCount + 1, grid_info.num_rows - i,
|
|
|
j + 1, 'A' + grid_info.num_rows - i - 1, 'A' + j);
|
|
|
}
|
|
|
else {
|
|
|
- sprintf(buf, "insert into %s values ( %d, %d, %d )",
|
|
|
- Fi->table, attCount + 1, i + 1, j + 1);
|
|
|
- }
|
|
|
- db_set_string(&sql, buf);
|
|
|
-
|
|
|
- G_debug(3, "SQL: %s", db_get_string(&sql));
|
|
|
-
|
|
|
- if (db_execute_immediate(Driver, &sql) != DB_OK) {
|
|
|
- G_fatal_error(_("Unable to insert new record: %s"),
|
|
|
- db_get_string(&sql));
|
|
|
+ sprintf(buf, "( %d, %d, %d )",
|
|
|
+ attCount + 1, i + 1, j + 1);
|
|
|
}
|
|
|
+ if (db_append_string(&sql, buf) != DB_OK)
|
|
|
+ G_fatal_error(_("Unable to fill attribute table"));
|
|
|
+ batch_fill++;
|
|
|
+
|
|
|
+ if (batch_fill == BATCH_SIZE) {
|
|
|
+ G_debug(3, "SQL: %s", db_get_string(&sql));
|
|
|
+
|
|
|
+ if (db_execute_immediate(Driver, &sql) != DB_OK) {
|
|
|
+ G_fatal_error(_("Unable to insert new record: %s"),
|
|
|
+ db_get_string(&sql));
|
|
|
+ }
|
|
|
+ batch_fill = 0;
|
|
|
+ }
|
|
|
attCount++;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if (batch_fill > 0) {
|
|
|
+ G_debug(3, "SQL: %s", db_get_string(&sql));
|
|
|
+
|
|
|
+ if (db_execute_immediate(Driver, &sql) != DB_OK) {
|
|
|
+ G_fatal_error(_("Unable to insert new record: %s"),
|
|
|
+ db_get_string(&sql));
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
db_close_database_shutdown_driver(Driver);
|
|
|
|