void print_info(const struct Map_info *Map) { int i, map_type; char line[1024]; char timebuff[256]; struct TimeStamp ts; int time_ok, first_time_ok, second_time_ok; struct bound_box box; char tmp1[1024], tmp2[1024]; time_ok = first_time_ok = second_time_ok = FALSE; map_type = Vect_maptype(Map); /* Check the Timestamp */ time_ok = G_read_vector_timestamp(Vect_get_name(Map), NULL, "", &ts); /* Check for valid entries, show none if no timestamp available */ if (time_ok == TRUE) { if (ts.count > 0) first_time_ok = TRUE; if (ts.count > 1) second_time_ok = TRUE; } divider('+'); sprintf(line, "%-17s%s", _("Name:"), Vect_get_name(Map)); printline(line); sprintf(line, "%-17s%s", _("Mapset:"), Vect_get_mapset(Map)); printline(line); sprintf(line, "%-17s%s", _("Location:"), G_location()); printline(line); sprintf(line, "%-17s%s", _("Database:"), G_gisdbase()); printline(line); sprintf(line, "%-17s%s", _("Title:"), Vect_get_map_name(Map)); printline(line); sprintf(line, "%-17s1:%d", _("Map scale:"), Vect_get_scale(Map)); printline(line); sprintf(line, "%-17s%s", _("Name of creator:"), Vect_get_person(Map)); printline(line); sprintf(line, "%-17s%s", _("Organization:"), Vect_get_organization(Map)); printline(line); sprintf(line, "%-17s%s", _("Source date:"), Vect_get_map_date(Map)); printline(line); /* This shows the TimeStamp (if present) */ if (time_ok == TRUE && (first_time_ok || second_time_ok)) { G_format_timestamp(&ts, timebuff); sprintf(line, "%-17s%s", _("Timestamp (first layer): "), timebuff); printline(line); } else { strcpy(line, _("Timestamp (first layer): none")); printline(line); } divider('|'); if (map_type == GV_FORMAT_OGR || map_type == GV_FORMAT_OGR_DIRECT) { sprintf(line, "%-17s%s (%s)", _("Map format:"), Vect_maptype_info(Map), Vect_get_finfo_format_info(Map)); printline(line); /* for OGR format print also datasource and layer */ sprintf(line, "%-17s%s", _("OGR layer:"), Vect_get_finfo_layer_name(Map)); printline(line); sprintf(line, "%-17s%s", _("OGR datasource:"), Vect_get_finfo_dsn_name(Map)); printline(line); sprintf(line, "%-17s%s", _("Feature type:"), Vect_get_finfo_geometry_type(Map)); printline(line); } else if (map_type == GV_FORMAT_POSTGIS) { int topo_format; char *toposchema_name, *topogeom_column; int topo_geo_only; const struct Format_info *finfo; finfo = Vect_get_finfo(Map); sprintf(line, "%-17s%s (%s)", _("Map format:"), Vect_maptype_info(Map), Vect_get_finfo_format_info(Map)); printline(line); /* for PostGIS format print also datasource and layer */ sprintf(line, "%-17s%s", _("DB table:"), Vect_get_finfo_layer_name(Map)); printline(line); sprintf(line, "%-17s%s", _("DB name:"), Vect_get_finfo_dsn_name(Map)); printline(line); sprintf(line, "%-17s%s", _("Geometry column:"), finfo->pg.geom_column); printline(line); sprintf(line, "%-17s%s", _("Feature type:"), Vect_get_finfo_geometry_type(Map)); printline(line); topo_format = Vect_get_finfo_topology_info(Map, &toposchema_name, &topogeom_column, &topo_geo_only); if (topo_format == GV_TOPO_POSTGIS) { sprintf(line, "%-17s%s (%s %s%s)", _("Topology:"), "PostGIS", _("schema:"), toposchema_name, topo_geo_only ? ", topo-geo-only: yes" : ""); printline(line); sprintf(line, "%-17s%s", _("Topology column:"), topogeom_column); } else sprintf(line, "%-17s%s", _("Topology:"), "pseudo (simple features)"); printline(line); } else { sprintf(line, "%-17s%s", _("Map format:"), Vect_maptype_info(Map)); printline(line); } divider('|'); sprintf(line, " %s: %s (%s: %i)", _("Type of map"), _("vector"), _("level"), Vect_level(Map)); printline(line); if (Vect_level(Map) > 0) { printline(""); sprintf(line, " %-24s%-9d %-22s%-9d", _("Number of points:"), Vect_get_num_primitives(Map, GV_POINT), _("Number of centroids:"), Vect_get_num_primitives(Map, GV_CENTROID)); printline(line); sprintf(line, " %-24s%-9d %-22s%-9d", _("Number of lines:"), Vect_get_num_primitives(Map, GV_LINE), _("Number of boundaries:"), Vect_get_num_primitives(Map, GV_BOUNDARY)); printline(line); sprintf(line, " %-24s%-9d %-22s%-9d", _("Number of areas:"), Vect_get_num_areas(Map), _("Number of islands:"), Vect_get_num_islands(Map)); printline(line); if (Vect_is_3d(Map)) { sprintf(line, " %-24s%-9d %-22s%-9d", _("Number of faces:"), Vect_get_num_primitives(Map, GV_FACE), _("Number of kernels:"), Vect_get_num_primitives(Map, GV_KERNEL)); printline(line); sprintf(line, " %-24s%-9d %-22s%-9d", _("Number of volumes:"), Vect_get_num_volumes(Map), _("Number of holes:"), Vect_get_num_holes(Map)); printline(line); } printline(""); sprintf(line, " %-24s%s", _("Map is 3D:"), Vect_is_3d(Map) ? _("Yes") : _("No")); printline(line); sprintf(line, " %-24s%-9d", _("Number of dblinks:"), Vect_get_num_dblinks(Map)); printline(line); } printline(""); /* this differs from r.info in that proj info IS taken from the map here, not the location settings */ /* Vect_get_proj_name() and _zone() are typically unset?! */ if (G_projection() == PROJECTION_UTM) { int utm_zone; utm_zone = Vect_get_zone(Map); if (utm_zone < 0 || utm_zone > 60) strcpy(tmp1, _("invalid")); else if (utm_zone == 0) strcpy(tmp1, _("unspecified")); else sprintf(tmp1, "%d", utm_zone); sprintf(line, " %s: %s (%s %s)", _("Projection"), Vect_get_proj_name(Map), _("zone"), tmp1); } else sprintf(line, " %s: %s", _("Projection"), Vect_get_proj_name(Map)); printline(line); printline(""); Vect_get_map_box(Map, &box); G_format_northing(box.N, tmp1, G_projection()); G_format_northing(box.S, tmp2, G_projection()); sprintf(line, " %c: %17s %c: %17s", 'N', tmp1, 'S', tmp2); printline(line); G_format_easting(box.E, tmp1, G_projection()); G_format_easting(box.W, tmp2, G_projection()); sprintf(line, " %c: %17s %c: %17s", 'E', tmp1, 'W', tmp2); printline(line); if (Vect_is_3d(Map)) { format_double(box.B, tmp1); format_double(box.T, tmp2); sprintf(line, " %c: %17s %c: %17s", 'B', tmp1, 'T', tmp2); printline(line); } printline(""); format_double(Vect_get_thresh(Map), tmp1); sprintf(line, " %s: %s", _("Digitization threshold"), tmp1); printline(line); sprintf(line, " %s:", _("Comment")); printline(line); sprintf(line, " %s", Vect_get_comment(Map)); printline(line); divider('+'); fprintf(stdout, "\n"); }
int display_label(struct Map_info *Map, int type, struct cat_list *Clist, LATTR *lattr, int chcat) { int ltype; struct line_pnts *Points; struct line_cats *Cats; int ogr_centroids; const struct Format_info *finfo; Points = Vect_new_line_struct(); Cats = Vect_new_cats_struct(); Vect_rewind(Map); ogr_centroids = FALSE; finfo = Vect_get_finfo(Map); if (Vect_maptype(Map) == GV_FORMAT_OGR || (Vect_maptype(Map) == GV_FORMAT_POSTGIS && finfo->pg.toposchema_name == NULL)) { if (Vect_level(Map) < 2) G_warning(_("Topology level required for drawing centroids " "for OGR layers")); else if (Vect_get_num_primitives(Map, GV_CENTROID) > 0 && type & GV_CENTROID) /* label centroids from topo, don't label boundaries */ ogr_centroids = TRUE; } while (TRUE) { ltype = Vect_read_next_line(Map, Points, Cats); if (ltype == -1) G_fatal_error(_("Unable to read vector map")); else if (ltype == -2) /* EOF */ break; if (!(type & ltype) && !((type & GV_AREA) && (ltype & GV_CENTROID))) continue; /* used for both lines and labels */ if (ogr_centroids && ltype == GV_BOUNDARY) /* do not label boundaries */ continue; process_line(ltype, Points, Cats, lattr, chcat, Clist); } if (ogr_centroids) { /* show label for centroids stored in topo (for OGR layers only) */ int line, nlines; struct bound_box box; struct boxlist *list; list = Vect_new_boxlist(FALSE); /* bboxes not needed */ Vect_get_constraint_box(Map, &box); nlines = Vect_select_lines_by_box(Map, &box, GV_CENTROID, list); G_debug(3, "ncentroids (ogr) = %d", nlines); for (line = 0; line < nlines; line++) { ltype = Vect_read_line(Map, Points, Cats, list->id[line]); process_line(ltype, Points, Cats, lattr, chcat, Clist); } Vect_destroy_boxlist(list); } Vect_destroy_line_struct(Points); Vect_destroy_cats_struct(Cats); return 0; }
void print_shell(const struct Map_info *Map, const char *field_opt) { int map_type; int time_ok, first_time_ok, second_time_ok; char timebuff[256]; struct field_info *fi; struct TimeStamp ts; time_ok = first_time_ok = second_time_ok = FALSE; /* Check the Timestamp */ time_ok = G_read_vector_timestamp(Vect_get_name(Map), NULL, "", &ts); /* Check for valid entries, show none if no timestamp available */ if (time_ok == TRUE) { if (ts.count > 0) first_time_ok = TRUE; if (ts.count > 1) second_time_ok = TRUE; } map_type = Vect_maptype(Map); fprintf(stdout, "name=%s\n", Vect_get_name(Map)); fprintf(stdout, "mapset=%s\n", Vect_get_mapset(Map)); fprintf(stdout, "location=%s\n", G_location()); fprintf(stdout, "database=%s\n", G_gisdbase()); fprintf(stdout, "title=%s\n", Vect_get_map_name(Map)); fprintf(stdout, "scale=1:%d\n", Vect_get_scale(Map)); fprintf(stdout, "creator=%s\n", Vect_get_person(Map)); fprintf(stdout, "organization=%s\n", Vect_get_organization(Map)); fprintf(stdout, "source_date=%s\n", Vect_get_map_date(Map)); /* This shows the TimeStamp (if present) */ if (time_ok == TRUE && (first_time_ok || second_time_ok)) { G_format_timestamp(&ts, timebuff); fprintf(stdout, "timestamp=%s\n", timebuff); } else { fprintf(stdout, "timestamp=none\n"); } if (map_type == GV_FORMAT_OGR || map_type == GV_FORMAT_OGR_DIRECT) { fprintf(stdout, "format=%s,%s\n", Vect_maptype_info(Map), Vect_get_finfo_format_info(Map)); fprintf(stdout, "ogr_layer=%s\n", Vect_get_finfo_layer_name(Map)); fprintf(stdout, "ogr_dsn=%s\n", Vect_get_finfo_dsn_name(Map)); fprintf(stdout, "feature_type=%s\n", Vect_get_finfo_geometry_type(Map)); } else if (map_type == GV_FORMAT_POSTGIS) { int topo_format; char *toposchema_name, *topogeom_column; const struct Format_info *finfo; finfo = Vect_get_finfo(Map); fprintf(stdout, "format=%s,%s\n", Vect_maptype_info(Map), Vect_get_finfo_format_info(Map)); fprintf(stdout, "pg_table=%s\n", Vect_get_finfo_layer_name(Map)); fprintf(stdout, "pg_dbname=%s\n", Vect_get_finfo_dsn_name(Map)); fprintf(stdout, "geometry_column=%s\n", finfo->pg.geom_column); fprintf(stdout, "feature_type=%s\n", Vect_get_finfo_geometry_type(Map)); topo_format = Vect_get_finfo_topology_info(Map, &toposchema_name, &topogeom_column, NULL); if (topo_format == GV_TOPO_POSTGIS) { fprintf(stdout, "pg_topo_schema=%s\n", toposchema_name); fprintf(stdout, "pg_topo_column=%s\n", topogeom_column); } } else { fprintf(stdout, "format=%s\n", Vect_maptype_info(Map)); } fprintf(stdout, "level=%d\n", Vect_level(Map)); if (Vect_level(Map) > 0) { fprintf(stdout, "num_dblinks=%d\n", Vect_get_num_dblinks(Map)); if (Vect_get_num_dblinks(Map) > 0) { fi = Vect_get_field2(Map, field_opt); if(fi != NULL) { fprintf(stdout, "attribute_layer_number=%i\n",fi->number); fprintf(stdout, "attribute_layer_name=%s\n",fi->name); fprintf(stdout, "attribute_database=%s\n",fi->database); fprintf(stdout, "attribute_database_driver=%s\n",fi->driver); fprintf(stdout, "attribute_table=%s\n",fi->table); fprintf(stdout, "attribute_primary_key=%s\n",fi->key); } } } fprintf(stdout, "projection=%s\n", Vect_get_proj_name(Map)); if (G_projection() == PROJECTION_UTM) { fprintf(stdout, "zone=%d\n", Vect_get_zone(Map)); } fprintf(stdout, "digitization_threshold=%f\n", Vect_get_thresh(Map)); fprintf(stdout, "comment=%s\n", Vect_get_comment(Map)); }