def test_multigeom(): p1, p2 = (0, 0), (1, 2) p3, p4 = (3, 4), (5, 6) b1 = geometry.box(*p1, *p2, epsg4326) b2 = geometry.box(*p3, *p4, epsg4326) bb = multigeom([b1, b2]) assert bb.type == 'MultiPolygon' assert bb.crs is b1.crs assert len(list(bb)) == 2 g1 = geometry.line([p1, p2], None) g2 = geometry.line([p3, p4], None) gg = multigeom(iter([g1, g2, g1])) assert gg.type == 'MultiLineString' assert gg.crs is g1.crs assert len(list(gg)) == 3 g1 = geometry.point(*p1, epsg3857) g2 = geometry.point(*p2, epsg3857) g3 = geometry.point(*p3, epsg3857) gg = multigeom(iter([g1, g2, g3])) assert gg.type == 'MultiPoint' assert gg.crs is g1.crs assert len(list(gg)) == 3 assert list(gg)[0] == g1 assert list(gg)[1] == g2 assert list(gg)[2] == g3 # can't mix types with pytest.raises(ValueError): multigeom([geometry.line([p1, p2], None), geometry.point(*p1, None)]) # can't mix CRSs with pytest.raises(CRSMismatchError): multigeom([ geometry.line([p1, p2], epsg4326), geometry.line([p3, p4], epsg3857) ]) # only some types are supported on input with pytest.raises(ValueError): multigeom([gg])
def test_clip_lon180(): err = 1e-9 def b(rside): return geometry.box(170, 0, rside, 10, epsg4326) def b_neg(lside): return geometry.box(lside, 0, -170, 10, epsg4326) assert clip_lon180(b(180 - err)) == b(180) assert clip_lon180(b(-180 + err)) == b(180) assert clip_lon180(b_neg(180 - err)) == b_neg(-180) assert clip_lon180(b_neg(-180 + err)) == b_neg(-180) bb = multigeom([b(180 - err), b_neg(180 - err)]) bb_ = [g for g in clip_lon180(bb)] assert bb_[0] == b(180) assert bb_[1] == b_neg(-180)