20 #include <sys/types.h> 23 #include <grass/vector.h> 24 #include <grass/dbmi.h> 25 #include <grass/glocale.h> 46 int i, layer, nLayers;
50 OGRDataSourceH Ogr_ds;
52 OGRFeatureDefnH Ogr_featuredefn;
53 OGRwkbGeometryType Ogr_geom_type;
56 Ogr_geom_type = wkbUnknown;
69 G_debug(2,
"V1_open_old_ogr(): dsn = %s layer = %s", ogr_info->
dsn,
79 ogr_info->
ds = Ogr_ds;
83 nLayers = OGR_DS_GetLayerCount(Ogr_ds);
84 G_debug(2,
"%d layers found in data source", nLayers);
86 for (i = 0; i < nLayers; i++) {
87 Ogr_layer = OGR_DS_GetLayer(Ogr_ds, i);
88 Ogr_featuredefn = OGR_L_GetLayerDefn(Ogr_layer);
89 if (strcmp(OGR_FD_GetName(Ogr_featuredefn), ogr_info->
layer_name) == 0) {
90 Ogr_geom_type = OGR_FD_GetGeomType(Ogr_featuredefn);
96 OGR_DS_Destroy(Ogr_ds);
100 G_debug(2,
"OGR layer %d opened", layer);
102 ogr_info->
layer = Ogr_layer;
103 if (update && OGR_L_TestCapability(ogr_info->
layer, OLCTransactions))
104 OGR_L_StartTransaction(ogr_info->
layer);
106 switch(Ogr_geom_type) {
107 case wkbPoint25D:
case wkbLineString25D:
case wkbPolygon25D:
108 case wkbMultiPoint25D:
case wkbMultiLineString25D:
case wkbMultiPolygon25D:
109 case wkbGeometryCollection25D:
141 G_debug(3,
"V2_open_old_ogr(): name = %s mapset = %s", Map->
name,
145 G_warning(
_(
"Unable to open feature index file for vector map <%s>"),
179 OGRSFDriverH Ogr_driver;
180 OGRDataSourceH Ogr_ds;
182 OGRFeatureDefnH Ogr_featuredefn;
188 G_debug(1,
"V1_open_new_ogr(): name = %s with_z = %d", name, with_z);
189 Ogr_driver = OGRGetDriverByName(ogr_info->
driver_name);
194 ogr_info->
driver = Ogr_driver;
197 Ogr_ds = OGR_Dr_CreateDataSource(Ogr_driver, ogr_info->
dsn,
NULL);
199 G_warning(
_(
"Unable to create OGR data source '%s'"),
203 ogr_info->
ds = Ogr_ds;
205 nlayers = OGR_DS_GetLayerCount(Ogr_ds);
206 for (i = 0; i < nlayers; i++) {
207 Ogr_layer = OGR_DS_GetLayer(Ogr_ds, i);
208 Ogr_featuredefn = OGR_L_GetLayerDefn(Ogr_layer);
209 if (strcmp(OGR_FD_GetName(Ogr_featuredefn), name) == 0) {
211 G_warning(
_(
"OGR layer <%s> already exists and will be overwritten"),
214 if (OGR_DS_DeleteLayer(Ogr_ds, i) != OGRERR_NONE) {
215 G_warning(
_(
"Unable to delete OGR layer <%s>"),
221 G_fatal_error(
_(
"OGR layer <%s> already exists in datasource '%s'"),
250 int Version_Major, Version_Minor, Back_Major, Back_Minor, byte_order;
255 G_debug(1,
"Vect_open_fidx(): name = %s mapset = %s format = %d",
262 G_debug(1,
"unable to open fidx file for vector map <%s>",
270 Version_Major = buf[0];
271 Version_Minor = buf[1];
277 if (Version_Major > 5 || Version_Minor > 0) {
278 if (Back_Major > 5 || Back_Minor > 0) {
279 G_fatal_error(
_(
"Feature index format version %d.%d is not supported by this release." 280 " Try to rebuild topology or upgrade GRASS."),
281 Version_Major, Version_Minor);
284 G_warning(
_(
"Your GRASS version does not fully support feature index format %d.%d of the vector." 285 " Consider to rebuild topology or upgrade GRASS."),
286 Version_Major, Version_Minor);
296 G_debug(4,
" header size %ld", length);
305 offset->
array = (
int *) G_malloc(offset->
array_num *
sizeof(
int));
int Vect_open_fidx(struct Map_info *Map, struct Format_info_offset *offset)
Open feature index file.
char * name
Map name (for 4.0)
void dig_init_portable(struct Port_info *, int)
Set Port_info structure to byte order of file.
#define GV_DIRECTORY
Name of vector directory.
int dig__fread_port_I(int *, size_t, struct gvfile *)
Read integers from the Portable Vector Format.
int dig__fread_port_C(char *, size_t, struct gvfile *)
Read chars from the Portable Vector Format.
int dig__fread_port_L(long *, size_t, struct gvfile *)
Read longs from the Portable Vector Format.
struct Format_info fInfo
Format info for non-native formats.
int V1_open_old_ogr(struct Map_info *Map, int update)
Open existing OGR layer on non-topological level.
int G_get_overwrite()
Get overwrite value.
void G_fatal_error(const char *msg,...)
Print a fatal error message to stderr.
int with_z
2D/3D vector data
int G_debug(int level, const char *msg,...)
Print debugging message.
int V2_open_old_ogr(struct Map_info *Map)
Open existing OGR layer on topological level.
void dig_file_init(struct gvfile *file)
Initialize gvfile strcuture.
char * mapset
Mapset name.
#define WITHOUT_Z
2D/3D vector data
struct dig_head head
Header info.
FILE * file
File descriptor.
void G_fseek(FILE *fp, off_t offset, int whence)
Change the file position of the stream.
int format
Map format (native, ogr, postgis)
int dig_set_cur_port(struct Port_info *)
Set current Port_info structure.
#define GV_FIDX_ELEMENT
External format (OGR), feature index.
void G_zero(void *buf, int i)
Zero out a buffer, buf, of length i.
FILE * G_fopen_old(const char *element, const char *name, const char *mapset)
Open a database file for reading.
int V1_open_new_ogr(struct Map_info *Map, const char *name, int with_z)
Prepare OGR datasource for creating new OGR layer (level 1)
void G_warning(const char *msg,...)
Print a warning message to stderr.