コード例 #1
0
    def testAddData(self):
        db = Database(MapDirectory(self.testdatadir), "db00", 'a')
        table = db.getTableByName("R_GR0")

        beforedata = [curs.getRow().asList() for curs in table.getCursor(0)]

        ## Add an empty row
        refrow = Row(table)
        refrow.setColumn(0, 1)
        table.writeRow(refrow)

        refdata = refrow.asList()

        db.close()

        db = Database(MapDirectory(self.testdatadir), "db00")
        table = db.getTableByName("R_GR0")

        aux = db.getTableByName("AUX_GR0")
        am = AuxTableManager(aux)

        afterdata = [curs.getRow().asList() for curs in table.getCursor(0)]

        for curs in table.getCursor(0):
            row = curs.getRow()

            index = row.asDict()['NAME_REF'] & 0xffffff
            offset = row.asDict()['NAME_REF'] >> 24

        self.assertEqual(beforedata + [refdata], afterdata)
コード例 #2
0
    def close(self):
        if self.isopen:
            if self.mode in ['w', 'a']:
                self.maintable.setMode('w')
                self.addtable.setMode('w')
                self.auxtable.setMode('w')

                aux = AuxTableManager(self.auxtable)

                # Write features to database
                addrow = 0
                for f in self.xfeatures:
                    textslot = aux.appendText(f.name,
                                              self.maintable.getRowCount() + 1)

                    # Update cell elements
                    for ref, e in zip(f.cellelementrefs,
                                      f.getCellElements(self.map)):
                        e.textslot = textslot
                        layer = self.map.getLayerByIndex(f.layerindex)
                        layer.updateCellElement(ref, e)

                    row = Row(self.maintable)
                    row.setColumnUInt(
                        self.maintable.getColumnIndex("NAME_REF"), textslot)

                    row.setColumnUInt(
                        self.maintable.getColumnIndex("OBJ_TYPE"),
                        f.getObjtypeIndex(self))

                    cellelementrefs = f.getCellElementRefs()
                    if len(cellelementrefs) == 1:
                        row.setColumnUInt(
                            self.maintable.getColumnIndex("CELL_NUM"),
                            cellelementrefs[0][0])
                        row.setColumnUInt(
                            self.maintable.getColumnIndex("N_IN_C"),
                            cellelementrefs[0][1] + 1)
                    else:
                        row.setColumnUInt(
                            self.maintable.getColumnIndex("CELL_NUM"),
                            0x80000000 | (addrow + 1))
                        row.setColumnUInt(
                            self.maintable.getColumnIndex("N_IN_C"),
                            len(cellelementrefs))
                        for cref in cellelementrefs:
                            rowrc = Row(self.addtable)
                            rowrc.setColumnUInt(
                                self.addtable.getColumnIndex("CELL_NUM"),
                                cref[0])
                            rowrc.setColumnUInt(
                                self.addtable.getColumnIndex("N_IN_C"),
                                cref[1] + 1)
                            self.addtable.writeRow(rowrc)
                            addrow += 1
                    self.maintable.writeRow(row)

            self.isopen = False
コード例 #3
0
    def testSimple(self):
        db = Database(MapDirectory(self.testdatadir), "db00")

        table = db.getTableByName("R_GR0")

        for curs in table.getCursor(0):
            row = curs.getRow()

            aux = db.getTableByName("AUX_GR0")

            am = AuxTableManager(aux)

            index = row.asDict()['NAME_REF'] & 0xffffff
            offset = row.asDict()['NAME_REF'] >> 24
コード例 #4
0
ファイル: POI.py プロジェクト: codingforfun/pymagellan
    def _initDB(self, db):
        maintablename = "POIPOINT_"

        # Create tables if opened in append mode
        if self.mode == "w" and not maintablename in db.getTableNames():
            createPOITables(db, self.poiprefix)

        # Open category manager
        self.catman.open(db, self.mode, poiprefix=self.poiprefix)

        self.auxtable = db.getTableByName("AUXTEXT_")
        self.maintable = db.getTableByName(maintablename)

        self.auxmanager = AuxTableManager(self.auxtable,
                                          endchar=chr(7),
                                          searchindex=False)
コード例 #5
0
    def _initDB(self, db):
        groupnumber = self.map.getGroupIndex(self)

        maintablename = "R_GR%d" % groupnumber
        addtablename = "RC_GR%d" % groupnumber
        auxtablename = "AUX_GR%d" % groupnumber
        # Create tables if opened in append mode
        if self.mode == "w" and not maintablename in db.getTableNames():

            # Build main table
            fields = [
                FieldStruct(name='NAME_REF', fd_type=FieldTypeLONGINT),
                FieldStruct(name='CELL_NUM', fd_type=FieldTypeLONGINT),
                FieldStruct(name='N_IN_C', fd_type=FieldTypeSHORTINT),
                FieldStruct(name='OBJ_TYPE', fd_type=FieldTypeCHARACTER)
            ] + self.extrafields
            db.addTable(name=maintablename,
                        filename=self.map.mapnumstr + "gr%d.ext" % groupnumber,
                        fieldstructlist=fields)

            # Build additional cells table
            fields = [
                FieldStruct(name='CELL_NUM', fd_type=FieldTypeLONGINT),
                FieldStruct(name='N_IN_C', fd_type=FieldTypeSHORTINT),
            ]
            db.addTable(name=addtablename,
                        filename=self.map.mapnumstr + "gr%d.clp" % groupnumber,
                        fieldstructlist=fields)

            # Build aux table
            fields = [
                FieldStruct(name='NAME_BUF',
                            fd_type=FieldTypeCHARACTER,
                            fd_dim1=248,
                            fd_dim2=1)
            ]
            db.addTable(name=auxtablename,
                        filename=self.map.mapnumstr + "gr%d.aux" % groupnumber,
                        fieldstructlist=fields)

        self.maintable = db.getTableByName(maintablename)
        self.addtable = db.getTableByName(addtablename)
        self.auxtable = db.getTableByName(auxtablename)
        self.auxmanager = AuxTableManager(self.auxtable)
コード例 #6
0
ファイル: POI.py プロジェクト: codingforfun/pymagellan
    def close(self):
        if self.mode in ['w', 'a']:
            self.maintable.clear()
            self.auxtable.clear()

            aux = AuxTableManager(self.auxtable,
                                  endchar=chr(7),
                                  searchindex=False)

            # sort categories, note that this will create new category ids
            # and the features have to be updated
            if self.sortcategories:
                cattrans, subcattrans = self.catman.sortCategories()

                # translate categories
                for f in self.features:
                    oldcatid = f.getCategoryId()
                    oldsubcatid = f.getSubCategoryId()

                    f.setCategoryId(cattrans[oldcatid])
                    f.setSubCategoryId(subcattrans[(oldcatid, oldsubcatid)])

            # Sort features on ids
            self.features.sort(lambda x, y: cmp(
                (x.getCategoryId(), x.getSubCategoryId(), x.name.upper()),
                (y.getCategoryId(), y.getSubCategoryId(), y.name.upper())))

            # Clear category statistics
            for cat in self.catman.getCategories():
                cat.clearStatistics()
                for subcat in cat.getSubCategories():
                    subcat.clearStatistics()

            # Write features to database
            slot = 1
            for f in self.features:
                # Update category statistics
                cat = self.catman.getCategory(f.getCategoryId())
                subcat = cat.getSubCategory(f.getSubCategoryId())
                cat.updateFromPOI(slot, f.getAux()[0])
                subcat.updateFromPOI(slot, f.getAux()[0])

                textslot = aux.appendText('\t'.join(f.getAux()) + '\t')

                # Update cell elements
                for ref, e in zip(f.cellelementrefs,
                                  f.getCellElements(self.map)):
                    e.textslot = textslot
                    e.setCategoryId(f.getCategoryId())
                    e.setSubCategoryId(f.getSubCategoryId())
                    layer = self.map.getPOILayers()[0]
                    layer.updateCellElement(ref, e)

                row = Row(self.maintable)
                row.setColumnUInt(self.maintable.getColumnIndex("TEXT_SLOT"),
                                  textslot)

                row.setColumnUInt(self.maintable.getColumnIndex("CATG_ID"),
                                  f.getCategoryId())
                row.setColumnUInt(self.maintable.getColumnIndex("SUBCAT_ID"),
                                  f.getSubCategoryId())

                cellelementrefs = f.getCellElementRefs()
                row.setColumnUInt(self.maintable.getColumnIndex("CELL_NUMBER"),
                                  cellelementrefs[0][0])
                row.setColumnUInt(
                    self.maintable.getColumnIndex("NUMBER_IN_CELL"),
                    cellelementrefs[0][1] + 1)
                self.maintable.writeRow(row)

                slot += 1

        self.catman.close()