Exemplo n.º 1
0
    def test_no_magic(self):
        gpkg = (
            b''
            b'\x00'
            b'\x01'
            b'\xe6\x10\x00\x00'
            b'\x01\x01\x00\x00\x00\xf0\x9e\xa0\xa7\x05;#@hZ\xbd\x93\x83GC@')

        with self.assertRaises(ValueError) as exc:
            geopackage.loads(gpkg)

        self.assertEquals(
            str(exc.exception),
            ("Could not read Geopackage geometry because of errors: "
             "Missing Geopackage header magic bytes"))
Exemplo n.º 2
0
    def test_loads_2d_envelope_with_srid(self):
        gpkg = (
            b'GP'
            b'\x00'
            b'\x03'
            b'\xe6\x10\x00\x00'
            b'\xf0\x9e\xa0\xa7\x05;#@hZ\xbd\x93\x83GC@'  # Envelope
            b'\xf0\x9e\xa0\xa7\x05;#@hZ\xbd\x93\x83GC@'  # Envelope
            b'\x01\x01\x00\x00\x00\xf0\x9e\xa0\xa7\x05;#@hZ\xbd\x93\x83GC@'  # WKB
        )
        expected = {
            'type':
            'Point',
            'bbox': (9.615277517659223, 38.55870291467437, 9.615277517659223,
                     38.55870291467437),
            'coordinates': [9.615277517659223, 38.55870291467437],
            'meta': {
                'srid': 4326
            },
            'crs': {
                'type': 'name',
                'properties': {
                    'name': 'EPSG4326'
                }
            }
        }

        self.assertEqual(expected, geopackage.loads(gpkg))
Exemplo n.º 3
0
    def test_bad_envelope(self):
        gpkg = (
            b'GP'
            b'\x00'
            b'\x0b'
            b'\xe6\x10\x00\x00'
            b'\x01\x01\x00\x00\x00\xf0\x9e\xa0\xa7\x05;#@hZ\xbd\x93\x83GC@')

        with self.assertRaises(ValueError) as exc:
            geopackage.loads(gpkg)

        print(str(exc.exception))
        self.assertEquals(
            str(exc.exception),
            ("Could not read Geopackage geometry because of errors: "
             "Envelope indicator must be between 0-4"))
Exemplo n.º 4
0
    def test_wrong_version(self):
        gpkg = (
            b'GP'
            b'\x01'
            b'\x01'
            b'\xe6\x10\x00\x00'
            b'\x01\x01\x00\x00\x00\xf0\x9e\xa0\xa7\x05;#@hZ\xbd\x93\x83GC@')

        with self.assertRaises(ValueError) as exc:
            geopackage.loads(gpkg)

        print(str(exc.exception))
        self.assertEquals(
            str(exc.exception),
            ("Could not read Geopackage geometry because of errors: "
             "Geopackage version must be 0"))
Exemplo n.º 5
0
    def test_with_envelope_and_srid_big_endian(self):
        expected_loads = {
            'coordinates': [1.0, 1.0],
            'type': 'Point',
            'meta': {
                'srid': 4326
            },
            'crs': {
                'type': 'name',
                'properties': {
                    'name': 'EPSG4326'
                }
            },
            'bbox': (1.0, 1.0, 1.0, 1.0)
        }

        expected_dumps = (b'GP\x00\x02\x00\x00\x10\xe6'
                          b'?\xf0\x00\x00\x00\x00\x00\x00'
                          b'?\xf0\x00\x00\x00\x00\x00\x00'
                          b'?\xf0\x00\x00\x00\x00\x00\x00'
                          b'?\xf0\x00\x00\x00\x00\x00\x00'
                          b'\x00\x00\x00\x00\x01'
                          b'?\xf0\x00\x00\x00\x00\x00\x00'
                          b'?\xf0\x00\x00\x00\x00\x00\x00')

        dumps_result = geopackage.dumps(expected_loads)
        self.assertEqual(expected_dumps, dumps_result)

        loads_result = geopackage.loads(dumps_result)
        self.assertEqual(expected_loads, loads_result)
Exemplo n.º 6
0
    def test_without_envelope_with_srid_little_endian(self):
        gpkg = (  # GPKG header
            b'GP'  # "magic"
            b'\x00'  # version
            b'\x01'  # flags
            b'\xe6\x10\x00\x00'  # SRID
            b'\x01\x01\x00\x00\x00\xf0\x9e\xa0\xa7\x05;#@hZ\xbd\x93\x83GC@'  # WKB geom
        )
        expected = {
            'type': 'Point',
            'coordinates': [9.615277517659223, 38.55870291467437],
            'meta': {
                'srid': 4326
            },
            'crs': {
                'type': 'name',
                'properties': {
                    'name': 'EPSG4326'
                }
            }
        }

        result = geopackage.loads(gpkg)
        self.assertEqual(expected, result)
        self.assertEqual(gpkg, geopackage.dumps(result, big_endian=False))
Exemplo n.º 7
0
    def test_loads_noenvelope_with_srid(self):
        gpkg = (
            # GPKG header
            # "magic"
            b'GP'
            # version
            b'\x00'
            # flags
            b'\x01'
            # SRID
            b'\xe6\x10\x00\x00'
            # WKB geom
            b'\x01\x01\x00\x00\x00\xf0\x9e\xa0\xa7\x05;#@hZ\xbd\x93\x83GC@')
        expected = {
            'type': 'Point',
            'coordinates': [9.615277517659223, 38.55870291467437],
            'meta': {
                'srid': 4326
            },
            'crs': {
                'type': 'name',
                'properties': {
                    'name': 'EPSG4326'
                }
            }
        }

        self.assertEqual(expected, geopackage.loads(gpkg))
Exemplo n.º 8
0
    def test_loads_polygon_no_srid_mixed_endian(self):
        gpkg = (
            # Little-endian header & envelope
            b'GP\x00\x03\x00\x00\x00\x00'
            b'\x00\x00\x00\x00\x00\x004@'
            b'\x00\x00\x00\x00\x00@e@'
            b'\x00\x00\x00\x00\x00\x00'
            b'$@\x00\x00\x00\x00\x00\x80a@'
            # Big-endian WKB
            b'\x00\x00\x00\x00\x03\x00\x00'
            b'\x00\x01\x00\x00\x00\t@4\x00'
            b'\x00\x00\x00\x00\x00@4\x00'
            b'\x00\x00\x00\x00\x00@A\x00'
            b'\x00\x00\x00\x00\x00@_\x00'
            b'\x00\x00\x00\x00\x00@Q\x80'
            b'\x00\x00\x00\x00\x00@a\x80'
            b'\x00\x00\x00\x00\x00@`@\x00'
            b'\x00\x00\x00\x00@`@\x00\x00'
            b'\x00\x00\x00@Q\x80\x00\x00'
            b'\x00\x00\x00@Y\x00\x00\x00'
            b'\x00\x00\x00@[\x80\x00\x00'
            b'\x00\x00\x00@Q\x80\x00\x00'
            b'\x00\x00\x00@e@\x00\x00\x00'
            b'\x00\x00@4\x00\x00\x00\x00'
            b'\x00\x00@V\x80\x00\x00\x00'
            b'\x00\x00@$\x00\x00\x00\x00'
            b'\x00\x00@4\x00\x00\x00\x00'
            b'\x00\x00@4\x00\x00\x00\x00'
            b'\x00\x00')

        expected = {
            'type':
            'Polygon',
            'coordinates': [[[20.0, 20.0], [34.0, 124.0], [70.0, 140.0],
                             [130.0, 130.0], [70.0, 100.0], [110.0, 70.0],
                             [170.0, 20.0], [90.0, 10.0], [20.0, 20.0]]],
            'bbox': (20.0, 170.0, 10.0, 140.0)
        }
        self.assertEqual(expected, geopackage.loads(gpkg))
Exemplo n.º 9
0
    def test_polygon_no_srid_with_envelope_little_endian(self):
        expected_dumps = (b'GP\x00\x03\x00\x00\x00\x00'
                          b'\x00\x00\x00\x00\x00\x004@'
                          b'\x00\x00\x00\x00\x00@e@\x00'
                          b'\x00\x00\x00\x00\x00$@\x00'
                          b'\x00\x00\x00\x00\x80a@\x01'
                          b'\x03\x00\x00\x00\x01\x00\x00'
                          b'\x00\t\x00\x00\x00\x00\x00\x00'
                          b'\x00\x00\x004@\x00\x00\x00\x00'
                          b'\x00\x004@\x00\x00\x00\x00\x00'
                          b'\x00A@\x00\x00\x00\x00\x00\x00'
                          b'_@\x00\x00\x00\x00\x00\x80Q@\x00'
                          b'\x00\x00\x00\x00\x80a@\x00\x00'
                          b'\x00\x00\x00@`@\x00\x00\x00\x00'
                          b'\x00@`@\x00\x00\x00\x00\x00\x80'
                          b'Q@\x00\x00\x00\x00\x00\x00Y@\x00'
                          b'\x00\x00\x00\x00\x80[@\x00\x00'
                          b'\x00\x00\x00\x80Q@\x00\x00\x00'
                          b'\x00\x00@e@\x00\x00\x00\x00\x00'
                          b'\x004@\x00\x00\x00\x00\x00\x80'
                          b'V@\x00\x00\x00\x00\x00\x00$@\x00'
                          b'\x00\x00\x00\x00\x004@\x00\x00'
                          b'\x00\x00\x00\x004@')

        expected_loads = {
            'type':
            'Polygon',
            'coordinates': [[[20.0, 20.0], [34.0, 124.0], [70.0, 140.0],
                             [130.0, 130.0], [70.0, 100.0], [110.0, 70.0],
                             [170.0, 20.0], [90.0, 10.0], [20.0, 20.0]]],
            'bbox': (20.0, 170.0, 10.0, 140.0)
        }

        loads_result = geopackage.loads(expected_dumps)
        self.assertEqual(expected_loads, loads_result)

        dumps_result = geopackage.dumps(loads_result, big_endian=False)
        self.assertEqual(expected_dumps, dumps_result)