15 #include "../postgis_config.h"
18 #include "../liblwgeom/liblwgeom.h"
24 printf(
_(
"USAGE: shp2pgsql [<options>] <shapefile> [[<schema>.]<table>]\n"
26 printf(
_(
" -s [<from>:]<srid> Set the SRID field. Defaults to %d.\n"
27 " Optionally reprojects from given SRID (cannot be used with -D).\n"),
29 printf(
_(
" (-d|a|c|p) These are mutually exclusive options:\n"
30 " -d Drops the table, then recreates it and populates\n"
31 " it with current shape file data.\n"
32 " -a Appends shape file into current table, must be\n"
33 " exactly the same table schema.\n"
34 " -c Creates a new table and populates it, this is the\n"
35 " default if you do not specify any options.\n"
36 " -p Prepare mode, only creates the table.\n" ));
37 printf(
_(
" -g <geocolumn> Specify the name of the geometry/geography column\n"
38 " (mostly useful in append mode).\n" ));
39 printf(
_(
" -D Use postgresql dump format (defaults to SQL insert statements).\n" ));
40 printf(
_(
" -e Execute each statement individually, do not use a transaction.\n"
41 " Not compatible with -D.\n" ));
42 printf(
_(
" -G Use geography type (requires lon/lat data or -s to reproject).\n" ));
43 printf(
_(
" -k Keep postgresql identifiers case.\n" ));
44 printf(
_(
" -i Use int4 type for all integer dbf fields.\n" ));
45 printf(
_(
" -I Create a spatial index on the geocolumn.\n" ));
46 printf(
_(
" -m <filename> Specify a file containing a set of mappings of (long) column\n"
47 " names to 10 character DBF column names. The content of the file is one or\n"
48 " more lines of two names separated by white space and no trailing or\n"
49 " leading space. For example:\n"
50 " COLUMNNAME DBFFIELD1\n"
51 " AVERYLONGCOLUMNNAME DBFFIELD2\n" ));
52 printf(
_(
" -S Generate simple geometries instead of MULTI geometries.\n" ));
53 printf(
_(
" -t <dimensionality> Force geometry to be one of '2D', '3DZ', '3DM', or '4D'\n" ));
55 printf(
_(
" -w Output WKT instead of WKB. Note that this can result in\n"
56 " coordinate drift.\n" ));
57 printf(
_(
" -W <encoding> Specify the character encoding of Shape's\n"
58 " attribute column. (default: \"UTF-8\")\n" ));
59 printf(
_(
" -N <policy> NULL geometries handling policy (insert*,skip,abort).\n" ));
60 printf(
_(
" -n Only import DBF file.\n" ));
61 printf(
_(
" -T <tablespace> Specify the tablespace for the new table.\n"
62 " Note that indexes will still use the default tablespace unless the\n"
63 " -X flag is also used.\n"));
64 printf(
_(
" -X <tablespace> Specify the tablespace for the table's indexes.\n"
65 " This applies to the primary key, and the spatial index if\n"
66 " the -I flag is used.\n" ));
67 printf(
_(
" -? Display this help screen.\n" ));
69 printf(
_(
" An argument of `--' disables further option processing.\n" ));
70 printf(
_(
" (useful for unusual file names starting with '-')\n" ));
75 main (
int argc,
char **argv)
79 char *header, *footer, *record;
84 setlocale (LC_ALL,
"");
85 bindtextdomain (PACKAGE, PGSQL_LOCALEDIR);
101 while ((c =
pgis_getopt(argc, argv,
"-acdeg:ikm:nps:t:wDGIN:ST:W:X:")) != EOF)
136 sscanf(ptr,
"%d", &config->
sr_id);
147 fprintf(stderr,
"The -s parameter must be specified in the form [FROM_SRID:]TO_SRID\n");
195 fprintf(stderr,
"Unsupported NULL geometry handling policy.\nValid policies: insert, skip, abort\n");
219 fprintf(stderr,
"Unsupported output type: %s\nValid output types are 2D, 3DZ, 3DM and 4D\n",
pgis_optarg);
249 fprintf(stderr,
"Invalid argument combination - cannot use both -D and -e\n");
255 fprintf(stderr,
"Invalid argument combination - cannot use -D with -s FROM_SRID:TO_SRID\n");
275 char *chrptr = strchr(strptr,
'.');
280 if ( chrptr == strptr )
289 config->
schema = strdup(strptr);
290 config->
table = strdup(chrptr+1);
294 config->
table = strdup(strptr);
302 char *shp_file = strdup(config->
shp_file);
306 for ( ptr = shp_file + strlen(shp_file); ptr > shp_file; ptr-- )
316 for ( ptr = shp_file + strlen(shp_file); ptr > shp_file; ptr-- )
318 if ( *ptr ==
'/' || *ptr ==
'\\' )
324 config->
table = strdup(ptr);
345 fprintf(stderr,
"%s\n", state->
message);
355 fprintf(stderr,
"Postgis type: %s[%d]\n", state->
pgtype, state->
pgdims);
362 fprintf(stderr,
"%s\n", state->
message);
368 printf(
"%s", header);
381 fprintf(stderr,
"%s\n", state->
message);
387 printf(
"%s", header);
400 printf(
"%s\n", record);
406 fprintf(stderr,
"%s\n", state->
message);
412 fprintf(stderr,
"%s\n", state->
message);
413 printf(
"%s\n", record);
437 fprintf(stderr,
"%s\n", state->
message);
443 printf(
"%s", footer);
int pgis_getopt(int argc, char **argv, char *opts)
int main(int argc, char *argv[])
#define SRID_UNKNOWN
Unknown SRID value.
const char SHPAPI_CALL1 * SHPTypeName(int nSHPType);const char SHPAPI_CALL1(*) SHPPartTypeName(int nPartType
int ShpLoaderGetRecordCount(SHPLOADERSTATE *state)
void ShpLoaderDestroy(SHPLOADERSTATE *state)
int ShpLoaderGetSQLCopyStatement(SHPLOADERSTATE *state, char **strheader)
int ShpLoaderOpenShape(SHPLOADERSTATE *state)
int ShpLoaderGenerateSQLRowStatement(SHPLOADERSTATE *state, int item, char **strrecord)
void set_loader_config_defaults(SHPLOADERCONFIG *config)
int ShpLoaderGetSQLFooter(SHPLOADERSTATE *state, char **strfooter)
SHPLOADERSTATE * ShpLoaderCreate(SHPLOADERCONFIG *config)
int ShpLoaderGetSQLHeader(SHPLOADERSTATE *state, char **strheader)
#define POLICY_NULL_ABORT
#define SHPLOADERRECISNULL
#define POLICY_NULL_INSERT
#define SHPLOADERRECDELETED
#define POSTGIS_LIB_VERSION
char * column_map_filename
char message[SHPLOADERMSGLEN]