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"))
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))
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"))
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"))
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)
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))
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))
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))
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)