123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /*
- ****************************************************************************
- *
- * MODULE: Vector library
- *
- * AUTHOR(S): Radim Blazek
- *
- * PURPOSE: Lower level functions for reading/writing/manipulating vectors.
- *
- * COPYRIGHT: (C) 2001, 2012 by the GRASS Development Team
- *
- * This program is free software under the GNU General
- * Public License (>=v2). Read the file COPYING that
- * comes with GRASS for details.
- *
- *****************************************************************************/
- #include <string.h>
- #include <stdio.h>
- #include <grass/vector.h>
- #include <grass/glocale.h>
- /*!
- \brief Read external vector format file
-
- \param dascii format file (frmt)
- \param[out] finfo pointer to Format_info structure
- \return format code
- \return -1 on error
- */
- int dig_read_frmt_ascii(FILE * dascii, struct Format_info *finfo)
- {
- char buff[2001], buf1[2001];
- char *ptr;
- int frmt = -1;
- G_debug(3, "dig_read_frmt_ascii()");
- /* read first line which must be FORMAT: */
- if (G_getl2(buff, 2000, dascii)) {
- G_chop(buff);
- if (!(ptr = strchr(buff, ':'))) {
- G_warning(_("Vector format not recognized: %s"), buff);
- return -1;
- }
- strcpy(buf1, buff);
- buf1[ptr - buff] = '\0';
- ptr++; /* Search for the start of text */
- while (*ptr == ' ')
- ptr++;
- if (G_strcasecmp(buf1, "FORMAT") == 0) {
- #ifdef HAVE_OGR
- if (G_strcasecmp(ptr, "ogr") == 0) {
- frmt = GV_FORMAT_OGR;
- }
- #endif
- #ifdef HAVE_POSTGRES
- if (G_strcasecmp(ptr, "postgis") == 0) {
- frmt = GV_FORMAT_POSTGIS;
- }
- #endif
- }
- }
- if (frmt == -1) {
- G_warning(_("Vector format not recognized: %s"), buff);
- return -1;
- }
- /* init format info values */
- #ifdef HAVE_OGR
- G_zero(&(finfo->ogr), sizeof(struct Format_info_ogr));
- #else
- if (frmt == GV_FORMAT_OGR) {
- G_warning(_("Vector format '%s' not supported"), ptr);
- return -1;
- }
- #endif
- #ifdef HAVE_POSTGRES
- G_zero(&(finfo->pg), sizeof(struct Format_info_pg));
- #else
- if (frmt == GV_FORMAT_POSTGIS) {
- G_warning(_("Vector format '%s' not supported"), ptr);
- return -1;
- }
- #endif
- while (G_getl2(buff, 2000, dascii)) {
- G_chop(buff);
- if (!(ptr = strchr(buff, ':'))) {
- G_warning(_("Format definition is not correct: %s"), buff);
- continue;
- }
- strcpy(buf1, buff);
- buf1[ptr - buff] = '\0';
- ptr++; /* Search for the start of text */
- while (*ptr == ' ')
- ptr++;
- #ifdef HAVE_OGR
- if (frmt == GV_FORMAT_OGR) {
- if (G_strcasecmp(buf1, "DSN") == 0)
- finfo->ogr.dsn = G_store(ptr);
- if (G_strcasecmp(buf1, "LAYER") == 0)
- finfo->ogr.layer_name = G_store(ptr);
- if (G_strcasecmp(buf1, "WHERE") == 0)
- finfo->ogr.where = G_store(ptr);
- }
- #endif
- #ifdef HAVE_POSTGRES
- if (frmt == GV_FORMAT_POSTGIS) {
- if (G_strcasecmp(buf1, "CONNINFO") == 0)
- finfo->pg.conninfo = G_store(ptr);
- if (G_strcasecmp(buf1, "SCHEMA") == 0)
- finfo->pg.schema_name = G_store(ptr);
- if (G_strcasecmp(buf1, "TABLE") == 0)
- finfo->pg.table_name = G_store(ptr);
- if (G_strcasecmp(buf1, "FID") == 0)
- finfo->pg.fid_column = G_store(ptr);
- if (G_strcasecmp(buf1, "WHERE") == 0)
- finfo->pg.where = G_store(ptr);
- }
- #endif
- }
- #ifdef HAVE_POSTGRES
- /* if schema not defined, use 'public' */
- if (frmt == GV_FORMAT_POSTGIS &&
- !finfo->pg.schema_name) {
- finfo->pg.schema_name = G_store("public");
- }
- /* if fid column not defined, use default value */
- if (frmt == GV_FORMAT_POSTGIS &&
- !finfo->pg.fid_column) {
- finfo->pg.fid_column = G_store(GV_PG_FID_COLUMN);
- }
- #endif
- return frmt;
- }
- /* Write vector format, currently does not work
- * Parse also connection string.
- *
- * Returns: 0 OK
- * -1 on error
- */
- int dig_write_frmt_ascii(FILE * dascii, struct Format_info *finfo, int format)
- {
- G_debug(3, "dig_write_frmt_ascii()");
- G_fatal_error("Format not supported by dig_write_frmt_ascii()");
- return 0;
- }
|