def test_simplify(self): geom = wkbelement_from_geojson( json.loads( '{"type": "LineString", "coordinates": ' + '[[635900, 5723600], [635902, 5723600], [635905, 5723600]]}'), 3857) route = Route(activities=['hiking'], geometry=DocumentGeometry(geom=None, geom_detail=geom)) self.session.add(route) self.session.flush() # check that the line was simplified on insertion simplified_geom = route.geometry self.session.refresh(simplified_geom) geojson = json.loads( geojson_from_wkbelement(simplified_geom.geom_detail)) self.assertEqual(len(geojson['coordinates']), 2) # check that the line was simplified after an update route.geometry.geom_detail = wkbelement_from_geojson( json.loads( '{"type": "LineString", "coordinates": ' + '[[635901, 5723600], [635902, 5723600], [635905, 5723600]]}'), 3857) self.session.flush() simplified_geom = route.geometry self.session.refresh(simplified_geom) geojson = json.loads( geojson_from_wkbelement(simplified_geom.geom_detail)) self.assertEqual(len(geojson['coordinates']), 2) self.assertCoodinateEquals([635901, 5723600], geojson['coordinates'][0])
def test_simplify(self): geom = wkbelement_from_geojson( '{"type": "LineString", "coordinates": ' + '[[635900, 5723600], [635902, 5723600], [635905, 5723600]]}', 3857) route = Route( activities=['hiking'], geometry=DocumentGeometry(geom=None, geom_detail=geom)) self.session.add(route) self.session.flush() # check that the line was simplified on insertion simplified_geom = route.geometry self.session.refresh(simplified_geom) geojson = json.loads( geojson_from_wkbelement(simplified_geom.geom_detail)) self.assertEqual(len(geojson['coordinates']), 2) # check that the line was simplified after an update route.geometry.geom_detail = wkbelement_from_geojson( '{"type": "LineString", "coordinates": ' + '[[635901, 5723600], [635902, 5723600], [635905, 5723600]]}', 3857) self.session.flush() simplified_geom = route.geometry self.session.refresh(simplified_geom) geojson = json.loads( geojson_from_wkbelement(simplified_geom.geom_detail)) self.assertEqual(len(geojson['coordinates']), 2) self.assertCoodinateEquals( [635901, 5723600], geojson['coordinates'][0])
def test_geometry_update(self): """ Check that geometries are only compared in 2D when updating a document. """ geom1 = wkbelement_from_geojson( '{"type": "LineString", "coordinates": ' + '[[635956, 5723604, 1200], [635966, 5723644, 1210]]}', 3857) route_db = Route( document_id=1, activities=['hiking'], geometry=DocumentGeometry( document_id=1, geom=None, geom_detail=geom1) ) geom2 = wkbelement_from_geojson( '{"type": "LineString", "coordinates": ' + '[[635956, 5723604, 9999], [635966, 5723644, 9999]]}', 3857) route_in = Route( document_id=1, activities=['hiking'], geometry=DocumentGeometry( geom=None, geom_detail=geom2) ) route_db.update(route_in) self.assertIs(route_db.geometry.geom_detail, geom1) geom3 = wkbelement_from_geojson( '{"type": "LineString", "coordinates": ' + '[[635956, 5723608, 1200], [635966, 5723644, 1210]]}', 3857) route_in = Route( document_id=1, activities=['hiking'], geometry=DocumentGeometry( geom=None, geom_detail=geom3) ) route_db.update(route_in) self.assertIsNot(route_db.geometry.geom_detail, geom1) self.assertIs(route_db.geometry.geom_detail, geom3)
def test_wkb_to_shape_point(self): wkb = wkbelement_from_geojson(json.loads( '{"type": "Point", "coordinates": [1.0, 2.0, 3.0, 4.0]}'), 3857) point = wkb_to_shape(wkb) self.assertFalse(point.has_z) self.assertAlmostEquals(point.x, 1.0) self.assertAlmostEquals(point.y, 2.0)
def test_wkb_to_shape_multipolygon(self): wkb = wkbelement_from_geojson(json.loads( '{"type": "MultiPolygon", "coordinates": ' + '[[[[100.0, 0.0, 1200], [101.0, 0.0, 1200], [101.0, 1.0, 1200], ' '[100.0, 1.0, 1200], [100.0, 0.0, 1200]]]]}'), 3857) multi_polygon = wkb_to_shape(wkb) self.assertFalse(multi_polygon.has_z) self.assertEqual(len(multi_polygon.geoms[0].exterior.coords), 5) self.assertEqual(len(multi_polygon.geoms[0].exterior.coords[0]), 2)
def test_wkb_to_shape_polygon(self): wkb = wkbelement_from_geojson( '{"type": "Polygon", "coordinates": ' + "[[[100.0, 0.0, 1200], [101.0, 0.0, 1200], [101.0, 1.0, 1200], " "[100.0, 1.0, 1200], [100.0, 0.0, 1200]]]}", 3857, ) polygon = wkb_to_shape(wkb) self.assertFalse(polygon.has_z) self.assertEqual(len(polygon.exterior.coords), 5) self.assertEqual(len(polygon.exterior.coords[0]), 2)
def test_wkb_to_shape_linestring(self): wkb = wkbelement_from_geojson( '{"type": "LineString", "coordinates": ' + "[[635956, 5723604, 1200], [635966, 5723644, 1210]]}", 3857 ) line = wkb_to_shape(wkb) self.assertFalse(line.has_z) self.assertEqual(len(line.coords), 2) self.assertEqual(len(line.coords[0]), 2) self.assertCoodinateEquals(line.coords[0], [635956.0, 5723604.0]) self.assertCoodinateEquals(line.coords[1], [635966.0, 5723644.0])
def test_wkb_to_shape_linestring(self): wkb = wkbelement_from_geojson( json.loads('{"type": "LineString", "coordinates": ' + '[[635956, 5723604, 1200], [635966, 5723644, 1210]]}'), 3857) line = wkb_to_shape(wkb) self.assertFalse(line.has_z) self.assertEqual(len(line.coords), 2) self.assertEqual(len(line.coords[0]), 2) self.assertCoodinateEquals(line.coords[0], [635956.0, 5723604.0]) self.assertCoodinateEquals(line.coords[1], [635966.0, 5723644.0])
def test_geometry_update(self): """ Check that geometries are only compared in 2D when updating a document. """ geom1 = wkbelement_from_geojson( json.loads('{"type": "LineString", "coordinates": ' + '[[635956, 5723604, 1200], [635966, 5723644, 1210]]}'), 3857) route_db = Route(document_id=1, activities=['hiking'], geometry=DocumentGeometry(document_id=1, geom=None, geom_detail=geom1)) geom2 = wkbelement_from_geojson( json.loads('{"type": "LineString", "coordinates": ' + '[[635956, 5723604, 9999], [635966, 5723644, 9999]]}'), 3857) route_in = Route(document_id=1, activities=['hiking'], geometry=DocumentGeometry(geom=None, geom_detail=geom2)) route_db.update(route_in) self.assertIs(route_db.geometry.geom_detail, geom1) geom3 = wkbelement_from_geojson( json.loads('{"type": "LineString", "coordinates": ' + '[[635956, 5723608, 1200], [635966, 5723644, 1210]]}'), 3857) route_in = Route(document_id=1, activities=['hiking'], geometry=DocumentGeometry(geom=None, geom_detail=geom3)) route_db.update(route_in) self.assertIsNot(route_db.geometry.geom_detail, geom1) self.assertIs(route_db.geometry.geom_detail, geom3)
def test_save_and_load(self): fake_doc = Document() self.session.add(fake_doc) self.session.flush() geom = wkbelement_from_geojson( '{"type": "Point", "coordinates": [1.0, 2.0]}', 3857) geometry = DocumentGeometry( document_id=fake_doc.document_id, geom=geom) self.session.add(geometry) self.session.flush() self.session.expire(geometry) geom_loaded = geometry.geom geom_str = geojson_from_wkbelement(geom_loaded) geom_geojson = json.loads(geom_str) self.assertCoodinateEquals([1.0, 2.0], geom_geojson['coordinates'])
def test_save_and_load(self): fake_doc = Document() self.session.add(fake_doc) self.session.flush() geom = wkbelement_from_geojson( '{"type": "Point", "coordinates": [1.0, 2.0]}', 3857) geometry = DocumentGeometry(document_id=fake_doc.document_id, geom=geom) self.session.add(geometry) self.session.flush() self.session.expire(geometry) geom_loaded = geometry.geom geom_str = geojson_from_wkbelement(geom_loaded) geom_geojson = json.loads(geom_str) self.assertCoodinateEquals([1.0, 2.0], geom_geojson['coordinates'])
def test_wkb_to_shape_point(self): wkb = wkbelement_from_geojson('{"type": "Point", "coordinates": [1.0, 2.0, 3.0, 4.0]}', 3857) point = wkb_to_shape(wkb) self.assertFalse(point.has_z) self.assertAlmostEquals(point.x, 1.0) self.assertAlmostEquals(point.y, 2.0)