def test_parse_point2obj(self):
        parser = Sps21Parser()
        record = 'S  21528.00  27830.00  1P1             0       756755.8 2561875.5 138.1265120558'

        obj = parser.parse_point2obj(record)

        self.assertEqual('S', obj.type)
        self.assertEqual(21528.00, obj.line)
        self.assertEqual(27830.00, obj.point)
        self.assertEqual(1, obj.point_idx)
        self.assertEqual('P1', obj.point_code)
        self.assertEqual(None, obj.static_cor)
        self.assertEqual(None, obj.point_depth)
        self.assertEqual(None, obj.datum)
        self.assertEqual(0, obj.uphole_time)
        self.assertEqual(None, obj.water_depth)
        self.assertEqual(756755.8, obj.easting)
        self.assertEqual(2561875.5, obj.northing)
        self.assertEqual(138.1, obj.elevation)
        self.assertEqual(265, obj.day_of_year)
        self.assertEqual('120558', obj.time)

        record = 'H  21528.00  27830.00  1P1             0       756755.8 2561875.5 138.1265120558'

        obj = parser.parse_point2obj(record)
        self.assertIsNone(obj)
    def test_get_fields(self):
        parser = Sps21Parser()
        fields = parser.get_fields_point()

        self.assertEqual(15, len(fields))
        self.assertEqual(['RECORD_ID', 'LINE', 'POINT', 'POINT_IDX', 'POINT_CODE', 'STATIC_COR', 'POINT_DEPTH', 'DATUM',
                          'UPHOLE_TIME', 'WATER_DEPTH', 'EASTING', 'NORTHING', 'ELEVATION', 'DAY_OF_YEAR', 'TIME'],
                         fields)
    def test_csv_point(self):
        parser = Sps21Parser()

        data = parser.get_fields_point()
        csv = parser.csv_from_array(data)
        self.assertEqual(
            'RECORD_ID,LINE,POINT,POINT_IDX,POINT_CODE,STATIC_COR,POINT_DEPTH,DATUM,UPHOLE_TIME,WATER_DEPTH,EASTING,NORTHING,ELEVATION,DAY_OF_YEAR,TIME',
            csv
        )
    def test_parsing_empty_string(self):
        parser = Sps21Parser()
        record = ''

        data = parser.parse_point(record)
        self.assertIsNone(data)

        data = parser.parse_relation(record)
        self.assertIsNone(data)
    def test_csv_relation(self):
        parser = Sps21Parser()

        data = parser.get_fields_relation()
        csv = parser.csv_from_array(data)

        self.assertEqual(
            'RECORD_ID,TAPE_NUMBER,RECORD_NUMBER,RECORD_INCREMENT,INSTRUMENT_CODE,S_LINE,POINT,POINT_IDX,FROM_CHANNEL,TO_CHANNEL,CHANNEL_INCREMENT,R_LINE,FROM_RECEIVER,TO_RECEIVER,RECEIVER_IDX',
            csv
        )
    def test_format_point(self):
        parser = Sps21Parser()
        record = 'S  21528.00  27830.00  1P1             0       756755.8 2561875.5 138.1265120558'
        point = Point(parser.parse_point(record))
        formatted = parser.format_point(point)
        self.assertEqual(record, formatted)

        record = 'S  21528.00  27830.00  1P1                     756755.8 2561875.5 138.1265120558'
        expected = 'S  21528.00  27830.00  1P1             0       756755.8 2561875.5 138.1265120558'
        point = Point(parser.parse_point(record))
        formatted = parser.format_point(point)
        self.assertEqual(expected, formatted)
Beispiel #7
0
    def process(self, sps_file, fast):
        engine = create_engine('sqlite:///' + self.db_file)
        session = sessionmaker()
        session.configure(bind=engine)
        Base.metadata.create_all(engine)
        s = session()

        parser = Sps21Parser()

        with open(sps_file) as sps:
            line = sps.readline()
            sps_counter = 0

            while line:
                sps_data = parser.parse_point(line)
                if sps_data is not None:
                    line = str(int(sps_data[1]))
                    point = str(int(sps_data[2]))
                    line_point = line + point
                    easting = sps_data[10]
                    northing = sps_data[11]

                    p = Plan(lp=line_point, easting=easting, northing=northing)
                    try:
                        s.add(p)
                        if fast is False:
                            s.commit()
                    except:
                        pass

                    sps_counter += 1
                    self.ui.progressBar.setValue(sps_counter)

                line = sps.readline()

        if fast is True:
            try:
                s.commit()
            except:
                self.warning_process()

        sps.close()

        return sps_counter
    def test_parse_point(self):
        parser = Sps21Parser()
        record = 'S  21528.00  27830.00  1P1             0       756755.8 2561875.5 138.1265120558'

        data = parser.parse_point(record)
        self.assertEqual('S', data[0])
        self.assertEqual(21528.00, data[1])
        self.assertEqual(27830.00, data[2])
        self.assertEqual(1, data[3])
        self.assertEqual('P1', data[4])
        self.assertEqual(None, data[5])
        self.assertEqual(None, data[6])
        self.assertEqual(None, data[7])
        self.assertEqual(0, data[8])
        self.assertEqual(None, data[9])
        self.assertEqual(756755.8, data[10])
        self.assertEqual(2561875.5, data[11])
        self.assertEqual(138.1, data[12])
        self.assertEqual(265, data[13])
        self.assertEqual('120558', data[14])
    def test_parse_relation(self):
        parser = Sps21Parser()
        record = 'X  1001   8287311  19248.00  27516.001    1  4351  27023.00  18875.00  19743.001'

        data = parser.parse_relation(record)

        self.assertEqual('X', data[0])
        self.assertEqual('1001', data[1])
        self.assertEqual(82873, data[2])
        self.assertEqual(1, data[3])
        self.assertEqual('1', data[4])
        self.assertEqual(19248.00, data[5])
        self.assertEqual(27516.00, data[6])
        self.assertEqual(1, data[7])
        self.assertEqual(1, data[8])
        self.assertEqual(435, data[9])
        self.assertEqual(1, data[10])
        self.assertEqual(27023.00, data[11])
        self.assertEqual(18875.00, data[12])
        self.assertEqual(19743.00, data[13])
        self.assertEqual(1, data[14])
Beispiel #10
0
def main():
    parser = Sps21Parser()
    filename = 'data/data.S'
    with open(filename) as sps:
        line = sps.readline()
        while line:
            parsed = parser.parse_point(line)
            if parsed is not None:
                point = Point(parsed)
                print(point.line, point.point)
            line = sps.readline()

    filename = 'data/data.X'

    with open(filename) as sps:
        line = sps.readline()
        while line:
            parsed = parser.parse_relation(line)
            if parsed is not None:
                relation = Relation(parsed)
                print(relation.type, relation.line, relation.ffid)
            line = sps.readline()
    def test_parse_relation(self):
        parser = Sps21Parser()
        record = 'X  1001   8287311  19248.00  27516.001    1  4351  27023.00  18875.00  19743.001'

        data = parser.parse_relation(record)

        self.assertEqual('X', data[0])
        self.assertEqual('1001', data[1])
        self.assertEqual(82873, data[2])
        self.assertEqual(1, data[3])
        self.assertEqual('1', data[4])
        self.assertEqual(19248.00, data[5])
        self.assertEqual(27516.00, data[6])
        self.assertEqual(1, data[7])
        self.assertEqual(1, data[8])
        self.assertEqual(435, data[9])
        self.assertEqual(1, data[10])
        self.assertEqual(27023.00, data[11])
        self.assertEqual(18875.00, data[12])
        self.assertEqual(19743.00, data[13])
        self.assertEqual(1, data[14])

        relation = Relation(data)
        self.assertEqual('X', relation.type)
        self.assertEqual('1001', relation.tape)
        self.assertEqual(82873, relation.ffid)
        self.assertEqual(1, relation.ffid_increment)
        self.assertEqual('1', relation.instrument)
        self.assertEqual(19248.00, relation.line)
        self.assertEqual(27516.00, relation.point)
        self.assertEqual(1, relation.point_idx)
        self.assertEqual(1, relation.from_channel)
        self.assertEqual(435, relation.to_channel)
        self.assertEqual(1, relation.channel_increment)
        self.assertEqual(27023.00, relation.rcv_line)
        self.assertEqual(18875.00, relation.from_rcv)
        self.assertEqual(19743.00, relation.to_rcv)
        self.assertEqual(1, relation.rcv_idx)
    def check(self, limit_x, limit_y):
        connection = db.create_connection(self.db_file)
        parser = Sps21Parser()
        check_file = self.sps_file + CHECK_EXT
        not_in_db_file = self.sps_file + NOT_IN_DB_EXT

        common.csv_file_create(check_file, CHECK_CSV_HEADER)
        common.csv_file_create(not_in_db_file, NOT_IN_DB_CSV_HEADER)

        with open(self.sps_file) as sps:
            line = sps.readline()
            sps_counter = 0
            not_in_db_counter = 0
            offset_counter_x = 0
            offset_counter_y = 0
            while line:
                stats = parser.parse_point(line)
                if stats is not None:
                    point = Point(stats)

                    stats = db.get_record_for_point(connection, point)

                    if stats is None:
                        sps_counter += 1
                        not_in_db_counter += 1
                        record = "%.2f,%.2f,%.1f,%.1f" \
                                 % (
                                     point.line, point.point, point.easting, point.northing)
                        common.csv_file_record_add(not_in_db_file, record)
                        line = sps.readline()
                        continue
                    de = point.easting - stats[0]
                    dn = point.northing - stats[1]

                    error_easting = 0
                    if abs(de) > limit_x:
                        offset_counter_x += 1
                        error_easting = 1

                    error_northing = 0
                    if abs(dn) > limit_y:
                        offset_counter_y += 1
                        error_northing = 1

                    record = "%.2f,%.2f,%.1f,%.1f,%.1f,%.1f,%d,%d" \
                             % (
                                 point.line, point.point, point.easting, point.northing, de, dn, error_easting,
                                 error_northing)
                    common.csv_file_record_add(check_file, record)

                    sps_counter += 1
                    self.ui.progressBar.setValue(sps_counter)

                line = sps.readline()

            sps.close()

            stats = {
                'PC': sps_counter,
                'NDB': not_in_db_counter,
                'OCX': offset_counter_x,
                'OCY': offset_counter_y
            }

            connection.close()

            return stats
    def test_format_not_implemented(self):
        parser = Sps21Parser()

        with self.assertRaises(Exception):
            parser.format([])
    def test_parse_not_implemented(self):
        parser = Sps21Parser()
        record = 'X  21528.00  27830.00  1P1             0       756755.8 2561875.5 138.1265120558'

        with self.assertRaises(Exception):
            parser.parse(record)
    def test_parse_wrong_record_point(self):
        parser = Sps21Parser()
        record = 'B  21528.00  27830.00  1P1             0       756755.8 2561875.5 138.1265120558'

        data = parser.parse_point(record)
        self.assertIsNone(data)
    def test_parse_wrong_record_relation(self):
        parser = Sps21Parser()
        record = 'B  1001   8287311  19248.00  27516.001    1  4351  27023.00  18875.00  19743.001'

        data = parser.parse_relation(record)
        self.assertIsNone(data)