Пример #1
0
 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
         }
Пример #2
0
 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()
Пример #3
0
    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, '空间元数据处理完毕!')
Пример #4
0
    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))
Пример #5
0
                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()))