def set_value_from_file(self, file_name: str, file_format: str, file_encoding: str): """ 设置value为文件内容 . 根据文件格式, 可以加载文件内容 . 如果文件格式为二进制, 则value存储文件名 :param file_name: :param file_format: :param file_encoding: :return: """ if CUtils.equal_ignore_case(file_format, CResource.FileFormat_TXT): self._value = { CResource.Name_Text: CFile.file_2_str(file_name), CResource.Name_Type: CResource.DataValueType_SQL } elif CUtils.equal_ignore_case(file_format, CResource.FileFormat_XML): self._value = { CResource.Name_Text: CXml.file_2_str(file_name), CResource.Name_Type: CResource.DataValueType_SQL } elif CUtils.equal_ignore_case(file_format, CResource.FileFormat_Json): self._value = { CResource.Name_Text: CJson.file_2_str(file_name), CResource.Name_Type: CResource.DataValueType_SQL } else: self._value = { CResource.Name_Text: file_name, CResource.Name_Type: CResource.DataValueType_File }
def set_metadata_bus_file(self, metadata_bus_extract_result: int, metadata_bus_extract_memo: str, metadata_type: int, file_name): self.__metadata_bus_extract_result__ = metadata_bus_extract_result self.__metadata_bus_extract_memo__ = metadata_bus_extract_memo self.__metadata_bus_type__ = metadata_type if self.__metadata_bus_type__ == self.MetaDataFormat_Json: self.__metadata_bus_text__ = '' self.__metadata_bus_xml__ = CXml() self.__metadata_bus_json__.load_file(file_name) elif self.__metadata_bus_type__ == self.MetaDataFormat_XML: self.__metadata_bus_text__ = '' self.__metadata_bus_xml__.load_file(file_name) self.__metadata_bus_json__ = CJson() else: self.__metadata_bus_text__ = CFile.file_2_str(file_name) self.__metadata_bus_xml__ = CXml() self.__metadata_bus_json__ = CJson()
def save_metadata_spatial(self) -> str: """ 完成空间元数据的入库更新操作 :return: """ mdt_spatial_result, mdt_spatial_memo, mdt_spatial = self.metadata.metadata_spatial() params = { 'dsoid': self.object_id, 'dso_spatial_result': mdt_spatial_result, 'dso_spatial_parsermemo': mdt_spatial_memo, 'dso_prj_wkt': mdt_spatial.prj_wkt, 'dso_prj_proj4': mdt_spatial.prj_proj4, 'dso_prj_project': mdt_spatial.prj_project, 'dso_prj_coordinate': mdt_spatial.prj_coordinate, 'dso_prj_degree': mdt_spatial.prj_degree, 'dso_prj_zone': mdt_spatial.prj_zone, 'dso_prj_source': mdt_spatial.prj_source } database = CFactory().give_me_db(self.file_info.db_server_id) params['dso_center_native'] = CFile.file_2_str(mdt_spatial.native_center) params['dso_geo_bb_native'] = CFile.file_2_str(mdt_spatial.native_box) params['dso_geo_native'] = CFile.file_2_str(mdt_spatial.native_geom) if CFile.file_or_path_exist(mdt_spatial.wgs84_center): dso_center_wgs84 = database.sql.func_wkt2geometry( CUtils.quote(CFile.file_2_str(mdt_spatial.wgs84_center)), self.SRID_WGS84) else: dso_center_wgs84 = 'null' if CFile.file_or_path_exist(mdt_spatial.wgs84_bbox): dso_geo_bb_wgs84 = database.sql.func_wkt2geometry( CUtils.quote( CFile.file_2_str(mdt_spatial.wgs84_bbox)), self.SRID_WGS84) else: dso_geo_bb_wgs84 = 'null' if CFile.file_or_path_exist(mdt_spatial.wgs84_geom): dso_geo_wgs84 = database.sql.func_wkt2geometry( CUtils.quote( CFile.file_2_str(mdt_spatial.wgs84_geom)), self.SRID_WGS84) else: dso_geo_wgs84 = 'null' # 所有元数据入库 CFactory().give_me_db(self.file_info.db_server_id).execute( ''' update dm2_storage_object set dso_spatial_result = :dso_spatial_result , dso_spatial_parsermemo = :dso_spatial_parsermemo , dso_center_native = :dso_center_native , dso_geo_bb_native = :dso_geo_bb_native , dso_geo_native = :dso_geo_native , dso_center_wgs84 = {0} , dso_geo_bb_wgs84 = {1} , dso_geo_wgs84 = {2} , dso_prj_wkt = :dso_prj_wkt , dso_prj_proj4 = :dso_prj_proj4 , dso_prj_project = :dso_prj_project , dso_prj_coordinate = :dso_prj_coordinate , dso_prj_degree = :dso_prj_degree , dso_prj_zone = :dso_prj_zone , dso_prj_source = :dso_prj_source where dsoid = :dsoid '''.format(dso_center_wgs84, dso_geo_bb_wgs84, dso_geo_wgs84), params ) return CResult.merge_result(self.Success, '空间元数据处理完毕!')
def open_source(self) -> CDataSetSeqReader: option_source = CUtils.dict_value_by_name(self.__config, self.Name_Source, None) if option_source is None: raise Exception('数据源未设置, 请检查修正后重试! ') type_source = CUtils.dict_value_by_name(option_source, self.Name_Type, self.Name_Table) if CUtils.equal_ignore_case(type_source, self.Name_ShapeFile): source_data_option = CUtils.dict_value_by_name(option_source, type_source, None) source_data_filename = CUtils.dict_value_by_name(source_data_option, self.Name_Name, None) if CUtils.equal_ignore_case(source_data_filename, ''): raise Exception('[{0}]类型数据源未设置文件名, 请检查修正后重试! '.format(type_source)) if not CFile.file_or_path_exist(source_data_filename): raise Exception('[{0}]类型数据源设置的文件[{1}]不存在, 请检查修正后重试! '.format(type_source, source_data_filename)) cpg_file_name = CFile.change_file_ext(source_data_filename, 'cpg') encoding = CResource.Encoding_GBK if CFile.file_or_path_exist(cpg_file_name): encoding = CFile.file_2_str(cpg_file_name) self.__source_data = CVectorDataSets(source_data_filename) self.__source_data.open(encoding) return self.__source_data.layer_by_index(0) elif CUtils.equal_ignore_case(type_source, self.Name_Vector_DataSet): source_data_option = CUtils.dict_value_by_name(option_source, type_source, None) source_data_filename = CUtils.dict_value_by_name(source_data_option, self.Name_Name, None) source_data_layer = CUtils.dict_value_by_name(source_data_option, self.Name_Layer, None) if CUtils.equal_ignore_case(source_data_filename, ''): raise Exception('[{0}]类型数据源未设置文件名, 请检查修正后重试! '.format(type_source)) if CUtils.equal_ignore_case(source_data_layer, ''): raise Exception('[{0}]类型数据源未设置图层名, 请检查修正后重试! '.format(type_source)) if not CFile.file_or_path_exist(source_data_filename): raise Exception('[{0}]类型数据源设置的文件[{1}]不存在, 请检查修正后重试! '.format(type_source, source_data_filename)) self.__source_data = CVectorDataSets(source_data_filename) self.__source_data.open() layer_data = self.__source_data.layer_by_name(source_data_layer) if layer_data is None: raise Exception('[{0}]类型数据源设置的图层[{1}]不存在, 请检查修正后重试! '.format(type_source, source_data_layer)) return layer_data elif CUtils.equal_ignore_case(type_source, self.Name_Table): source_data_option = CUtils.dict_value_by_name(option_source, type_source, None) source_database = CUtils.dict_value_by_name(source_data_option, self.Name_DataBase, self.DB_Server_ID_Default) source_data_table_name = CUtils.dict_value_by_name(source_data_option, self.Name_Name, None) if CUtils.equal_ignore_case(source_data_table_name, ''): raise Exception('[{0}]类型数据源未设置数据表名, 请检查修正后重试! '.format(self.Name_Table)) data_set = CFactory().give_me_db(source_database).all_row( 'select * from {0}'.format(self.replace_placeholder(source_data_table_name)), self.__params ) self.__source_data = CDBDataSetSeqReader(data_set) return self.__source_data elif CUtils.equal_ignore_case(type_source, self.Name_Table): source_data_option = CUtils.dict_value_by_name(option_source, type_source, None) source_database = CUtils.dict_value_by_name(source_data_option, self.Name_DataBase, self.DB_Server_ID_Default) source_data_sql = CUtils.dict_value_by_name(source_data_option, self.Name_SQL, None) if CUtils.equal_ignore_case(source_data_sql, ''): raise Exception('[{0}]类型数据源未设置查询语句, 请检查修正后重试! '.format(type_source)) data_set = CFactory().give_me_db(source_database).all_row( self.replace_placeholder(source_data_sql), self.__params ) self.__source_data = CDBDataSetSeqReader(data_set) return self.__source_data else: raise Exception('系统不支持类型为[{0}]的数据源, 请检查修正后重试! '.format(type_source))
return False elif CUtils.equal_ignore_case(layer_name, 'Selections'): return False elif CUtils.equal_ignore_case(layer_name, 'SelectedObjects'): return False return True if __name__ == '__main__': file_name = '/Users/wangxiya/Documents/我的测试数据/31.混合存储/测试数据/通用数据/矢量数据集/生态治理和水土保持监测数据库_黑岱沟露天煤矿_10017699_2020d1_2020-01-01.mdb' # file_name = '/Users/wangxiya/Documents/我的测试数据/31.混合存储/测试数据/通用数据/矢量/矢量数据/正确数据/生态治理和水土保持监测数据库_利民煤矿_10017574_2020d1_2020-08-05/取排口.shp' cpg_file_name = CFile.change_file_ext(file_name, 'cpg') encoding = CResource.Encoding_GBK if CFile.file_or_path_exist(cpg_file_name): encoding = CFile.file_2_str(cpg_file_name) vector_datasets = CVectorDataSets(file_name) vector_datasets.open(encoding) for vector_layer_index in range(vector_datasets.size()): vector_dataset = vector_datasets.layer_by_index(vector_layer_index) print('*' * 30) print('{0}-{1}'.format(vector_dataset.dataset_name, vector_dataset.size())) print('*' * 10) for field_index in range(vector_dataset.field_count()): print('{0}.{1}'.format(vector_dataset.dataset_name, vector_dataset.field_name(field_index))) vector_dataset = vector_datasets.layer_by_index(0) print('*' * 30) print('{0}-{1}'.format(vector_dataset.dataset_name, vector_dataset.size()))