def is_3D(self): return bool(libvect.Vect_is_3d(self.c_mapinfo))
def is_3D(self): """Return if the Vector is 3D""" return bool(libvect.Vect_is_3d(self.c_mapinfo))
def _read_vector_info(name, mapset): """Read the vector map info from the file system and store the content into a dictionary This method uses the ctypes interface to the vector libraries to read the map metadata information :param name: The name of the map :param mapset: The mapset of the map :returns: The key value pairs of the map specific metadata, or None in case of an error """ kvp = {} if not libgis.G_find_vector(name, mapset): return None # The vector map structure Map = libvector.Map_info() # We open the maps always in topology mode first libvector.Vect_set_open_level(2) with_topo = True # Code lend from v.info main.c if libvector.Vect_open_old_head2(byref(Map), name, mapset, "1") < 2: # force level 1, open fully # NOTE: number of points, lines, boundaries, centroids, # faces, kernels is still available libvector.Vect_set_open_level(1) # no topology with_topo = False if libvector.Vect_open_old2(byref(Map), name, mapset, "1") < 1: logging.error( _("Unable to open vector map <%s>" % (libvector.Vect_get_full_name(byref(Map))))) return None # Release the vector spatial index memory when closed libvector.Vect_set_release_support(byref(Map)) # Read the extent information bbox = libvector.bound_box() libvector.Vect_get_map_box(byref(Map), byref(bbox)) kvp["north"] = bbox.N kvp["south"] = bbox.S kvp["east"] = bbox.E kvp["west"] = bbox.W kvp["top"] = bbox.T kvp["bottom"] = bbox.B kvp["map3d"] = bool(libvector.Vect_is_3d(byref(Map))) # Read number of features if with_topo: kvp["points"] = libvector.Vect_get_num_primitives( byref(Map), libvector.GV_POINT) kvp["lines"] = libvector.Vect_get_num_primitives( byref(Map), libvector.GV_LINE) kvp["boundaries"] = libvector.Vect_get_num_primitives( byref(Map), libvector.GV_BOUNDARY) kvp["centroids"] = libvector.Vect_get_num_primitives( byref(Map), libvector.GV_CENTROID) kvp["faces"] = libvector.Vect_get_num_primitives( byref(Map), libvector.GV_FACE) kvp["kernels"] = libvector.Vect_get_num_primitives( byref(Map), libvector.GV_KERNEL) # Summarize the primitives kvp["primitives"] = kvp["points"] + kvp["lines"] + \ kvp["boundaries"] + kvp["centroids"] if kvp["map3d"]: kvp["primitives"] += kvp["faces"] + kvp["kernels"] # Read topology information kvp["nodes"] = libvector.Vect_get_num_nodes(byref(Map)) kvp["areas"] = libvector.Vect_get_num_areas(byref(Map)) kvp["islands"] = libvector.Vect_get_num_islands(byref(Map)) kvp["holes"] = libvector.Vect_get_num_holes(byref(Map)) kvp["volumes"] = libvector.Vect_get_num_primitives( byref(Map), libvector.GV_VOLUME) else: kvp["points"] = None kvp["lines"] = None kvp["boundaries"] = None kvp["centroids"] = None kvp["faces"] = None kvp["kernels"] = None kvp["primitives"] = None kvp["nodes"] = None kvp["areas"] = None kvp["islands"] = None kvp["holes"] = None kvp["volumes"] = None libvector.Vect_close(byref(Map)) return kvp